基于PXA255开发板外围字符设备的嵌入式Linux字符设备驱动设计与应用.doc
《基于PXA255开发板外围字符设备的嵌入式Linux字符设备驱动设计与应用.doc》由会员分享,可在线阅读,更多相关《基于PXA255开发板外围字符设备的嵌入式Linux字符设备驱动设计与应用.doc(6页珍藏版)》请在三一文库上搜索。
1、基于PXA255开发板外围字符设备的嵌入式Linux字符设备驱动设计与应用1引言随着嵌入式系统的发展,嵌入式 Linux以其稳定性和开放源代码的优点在嵌入式系统的开发中得到广泛应用。越来越多的软硬件厂商使用嵌入式 Linux来开发自己的产品,对基于嵌入式 Linux平台开发设备的驱动程序和应用程序的需求在成倍增长。本文通过实现对 PXA255开发板外围字符设备(电机、数码管、串口和 mini键盘)的操作和控制,详细讨论了嵌入式 linux字符设备驱动的设计与应用。2系统的设计框架系统的设计分为字符设备驱动程序和人机交互界面两部分。驱动程序为应用程序提供了操作设备的接口;人机交互界面的设计实现设
2、备应用程序并完成人机交互的功能。整个系统软硬件的关系如图 1:字符设备被映射到 Linux文件系统的文件和目录,通过文件系统的系统调用接口 open(),write(),read(),close()等函数访问字符设备,实现设备的操作。Linux驱动程序是设备与具体的应用程序的中间层,它提供操作设备的接口,应用程序员不需要知道具体设备工作细节,只要调用一组标准化的函数就能完成对设备的操作,这些标准化的函数与具体的驱动没有关系,而将这些函数映射到作用于具体设备上的操作则与驱动程序相关1。Linux设备分为字符设备,块设备和网络设备,字符设备是能够像字节流一样被访问的设备。以下通过描述字符设备(电动
3、机、数码管、串口、mini键盘)驱动的实现方法,深入讨论了基于嵌入式 linux的字符设备驱动的设计方法和实现过程。3.1初始化函数与清除函数Linux系统中,设备驱动的初始化函数负责注册设备,并完成驱动程序必要的初始化以及申请中断等2,Linux系统使用 module_init宏指定初始化函数。在初始化函数中调用 regiSTer_chrdev函数向系统注册字符设备,通过 request_IRq 函数申请中断。例如电机设备的初始化函数如下:static int _init moto_init(void)int ret;ret = register_chrdev(MOTO_MAJOR, “mo
4、to”, /注册电机设备if (ret) printk(KERN_ERR “%s: cant get major %d.n”,_func_, MOTO_MAJOR);return ret;printk(KERN_INFO “%s: register moto device successfully.n”, _func_);return 0; 其中,register_chrdev函数的第一个参数为主设备号,如果为0 则系统为此驱动程序动态地分配一个主设备号;第二个参数是设备名称,这里是以moto为设备名称;第三个参数moto_fops是默认的struct file_operaTIons结构体 。
5、清除函数的功能和初始化函数的功能相反,它将驱动程序所占用的系统资源、中断号进行释放。Linux系统使用 module_exit宏指定清除函数。3.2中断在 Linux 系统中,中断是由系统来管理与维护的。中断服务子程序在初始化函数中调用 request_irq 函数与相应中断号关联,并将该中断的相关信息添加到系统的中断信息列表中。中断发生时, Linux系统响应中断号来实现中断处理程序的执行。mini键盘按键触发产生中断号为 SIMPLE_KEY_IRQ的中断,系统自动检索并调用键盘中断服务子程序。键盘中断处理流程如图 2:3.3 设备驱动接口的实现在Linux内核中,字符设备使用 struc
6、t file_operaTIons结构体来实现设备的各种操作接口,这些操作主要用来实现系统调用,命名为 open、read等等。file_operaTIons结构是定义在 linux/fs.h中的函数指针数组,每个设备文件都与它自己的操作函数相关联。编写字符设备驱动程序,主要是实现 struct file_operaTIons结构中的各个函数。本系统各设备驱动的设计主要实现 open、read、write和 release这四个方法接口。 file_operation结构成员如下: /* DEVICE驱动程序设备操作方法集 */ struct file_operations device_fo
7、ps = open方法提供给驱动程序以初始化的能力,从而为以后的操作完成初始化做准备。本系统中存在多个设备共用一个驱动的情况,驱动中的 open方法程序框架如下:int device_open(struct inode *inode, struct file *filp) int minor = MINOR(kdev); /次设备号的读取 switch(minor) case first_device: device_first_vaddr = (unsigned long)ioremap (DEVICE_ FIRST _ADDR, 2);case second_device:default:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 PXA255 开发 外围 字符 设备 嵌入式 Linux 驱动 设计 应用
链接地址:https://www.31doc.com/p-3411642.html