- 1、本文档共37页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 设备驱动程序开发 ;本章内容;目的和要求;8.1 设备驱动概述;8.1.1 驱动程序和应用程序的区别;应用程序与驱动程序的关系图 ; Linux的设备管理 ;字符设备 ;;块设备 ;;网络设备驱动 ;网络驱动的体系结构 ;8.2 设备驱动程序的开发过程;Linux为所有的设备文件都提供了统一的操作函数接口,具体操作方法是使用数据结构struct file_operations。 ; 在嵌入式系统的开发中,我们一般仅仅实现其中几个接口函数:read、write、ioctl、open、release,就可以完成应用系统需要的功能。
open接口
Open 接口提供给驱动程序初始化设备的能力,从而为以后的设备操作做好准备。
release接口
与 open函数相反 ;
read 和write 接口
read 函数完成将数据从内核拷贝到应用程序空间,write函数则相反,将数据从应用程序空间拷贝到内核。 ;ioctl 接口
ioctl 接口主要用于对设备进行读写之外的其他控制。
;1、LED驱动需要的头文件
# include linux/config.h //配置头文件
# include linux/kernel.h //内核头文件
# include linux/init.h //用户定义模块初始函数需引用的头文件
# include linux/module.h //模块加载的头文件
# include linux/delay.h //延时头文件
# include linux/major.h
# include asm/hardware.h //用户的硬件配置文件
# include linux/io.h;2、LED驱动需要的宏定义
# define GPIO_LED_MAJOR 220 //定义主设备号
//声明4个LED灯的I/O端口; GPFDAT 是端口F的数据寄存器
# define LED1_ON()(GPFDAT = ~0x10) //GPF4输出0
# define LED2_ON()(GPFDAT = ~0x20) //GPF5输出0
# define LED3_ON()(GPFDAT = ~0x40) //GPF6输出0
# define LED4_ON()(GPFDAT = ~0x80) //GPF7输出0
# define LED1_OFF()(GPFDAT | = 0x10) //GPF4输出1
# define LED2_OFF()(GPFDAT | = 0x20) //GPF5输出1
# define LED3_OFF()(GPFDAT | = 0x40) //GPF6输出1
# define LED4_OFF()(GPFDAT | = 0x80) //GPF7输出1
//定义LED灯的状态
# define LED_ON 0 //低电平点亮LED
# define LED_OFF 1 //高电平熄灭LED;3、file_operations 结构体的设计
struct file_operations GPIO_LED_ctl_ops={
open: GPIO_LED_open,
read: GPIO_LED_read,
write: GPIO_LED_write,
ioctl: GPIO_LED_ioctl,
release: GPIO_LED_release,
} ;;4、LED驱动程序的读写函数实现
在本例中,LED的读写操作不做任何操作,可以省略。本例仅给出了读写操作函数的框架。
//-----------------READ-------------------
ssize_t GPIO_LED_read(struct file * file ,char * buf , size_t count, loff_t * f_ops)
{
return count;
}
//------------------WRITE------------------
ssize_t GPIO_LED_write(struct file * file ,const char * buf , size_t count, loff_t * f_ops)
{
return count;
};ssize_t GPIO_LED_ioctl(struct inode
文档评论(0)