嵌入式Linux驱动
牛马尼格
开发的不仅仅是程序
展开
-
2.处理器与设备间数据交换方式
处理器与外设之间传输数据的控制方式通常有3种:查询方式、中断方式和直接内存存取(DMA)方式。21.查询方式设备驱动程序通过设备的I/O端口空间,以及存储器空间完成数据的交换。例如,网卡一般将自己的内部寄存器映射为设备的I/O端口,而显示卡则利用大量的 存储器空间作为视频信息的存储空间。利用这些地址空间,驱动程序可以向外设发送指定的操作指令。通常来讲,由于外设的操作耗时较长,因此,当处转载 2015-05-12 21:25:25 · 1479 阅读 · 0 评论 -
1.设备驱动程序的概念
系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分。Linux将设备主要分成两大类:一类是块设备,类似磁盘以记录块或扇区为单位,成块进行输入/输出的设备;另一类是字符设备,类似键盘以字符为转载 2015-05-12 21:24:27 · 2225 阅读 · 0 评论 -
5.中断管理
设备驱动程序通过调用request_irq函数来申请中断,通过free_irq来释放中断。它们在linux/sched.h中的定义如下:int request_irq(unsigned int irq,void (*handler)(int irq,void dev_id,structpt_regs *regs),unsigned long flags,co转载 2015-05-12 21:28:41 · 583 阅读 · 0 评论 -
4.设备注册和初始化
设备的驱动程序在加载的时候首先需要调用入口函数init_module(),该函数最重要的一个工作就是向内核注册该设备,对于字符设备调用register_chrdev()完成注册。register_chrdev 的定义为:int register_chrdev(unsignedint major, const char *name, struct file_ operations *fops);转载 2015-05-12 21:29:26 · 1372 阅读 · 0 评论 -
10块设备驱动程序的编写
块设备文件通常指一些需要以块(如512字节)的方式写入的设备,如IDE硬盘、SCSI硬盘、光驱等。它的驱动程序的编写过程与字符型设备驱动程序的编写有很大的区别。为了把各种块设备的操作请求队列有效地组织起来,内核中设置了一个结构数组blk_dev,该数组中的元素类型是blk_dev_struct结构。这个 结构由三个成分组成,其主体是执行操作的请求队列request_queue,还有一个函数转载 2015-05-12 21:36:03 · 972 阅读 · 0 评论 -
7.设备驱动开发的基本函数
7.1.I/O口函数无论驱动程序多么复杂,归根结底,无非还是向某个端口或者某个寄存器位赋值,这个值只能是0或1。接收值的就是I/O口。与中断和内存不同,使用一个没有 申请的I/O端口不会使处理器产生异常,也就不会导致诸如“segmentationfault”一类的错误发生。由于任何进程都可以访问任何一个I/O 端口,此时系统无法保证对I/O端口的操作不会发生冲突,甚至因此而使系统崩溃。因此转载 2015-05-12 21:33:46 · 599 阅读 · 0 评论 -
9.实例剖析
9.1实例一9.1.1驱动程序[cpp]view plaincopyprint?/****************************** * LED_Driver 2007/09/20 *****************************/ #include #include #include #include #in转载 2015-05-12 21:33:11 · 509 阅读 · 0 评论 -
6.设备驱动程序的开发过程
由于嵌入式设备由于硬件种类非常丰富,在默认的内核发布版中不一定包括所有驱动程序。所以进行嵌入式Linux系统的开发,很大的工作量是为各种设备编写 驱动程序。除非系统不使用操作系统,程序直接操纵硬件。嵌入式Linux系统驱动程序开发与普通Linux开发没有区别。可以在硬件生产厂家或者 Internet上寻找驱动程序,也可以根据相近的硬件驱动程序来改写,这样可以加快开发速度。实现一个嵌入式Linux设转载 2015-05-12 21:31:13 · 1372 阅读 · 0 评论 -
3.驱动程序结构
3.1一个设备驱动程序模块的基本框架设备驱动程序流程图在系统内部,I/O设备的存取通过一组固定的入口点来进行,入口点也可以理解为设备的句柄,就是对设备进行操作的基本函数。字符型设备驱动程序提供如下几个入口点:— open入口点。打开设备准备I/O操作。对字符设备文件进行打开操作,都会调用设备的open入口点。open子程序必须对将要进行的I/O操作做好必转载 2015-05-12 21:26:57 · 652 阅读 · 0 评论 -
8.模块加载与卸载
虽然模块作为内核的一部分,但并未被编译到内核中,它们被分别编译和链接成目标文件。Linux中模块可以用C语言编写,用gcc命令编译成模块*.o, 在命令行里加上-c的参数和“-D__KERNEL__-DMODULE”参数。然后用depmod -a 使此模块成为可加载模块。模块用insmod命令加载,用rmmod命令来卸载,这两个命令分别调用init_module()和cleanup_ module转载 2015-05-12 21:34:19 · 604 阅读 · 0 评论