摘要: 编译/安装驱动程序 在Linux系统中,驱动程序通常采用内核模块的程序结构来进行编码。因此编译/安装一个驱动程序,其实就是编译/安装一个内核模块。 示例: make insmod memdev.ko 创建设备文件 应用程序->设备文件->驱动程序 通过字符设备文件,应用程序可以使用相应的字符设备驱动 阅读全文
posted @ 2016-03-06 19:36 盛夏夜 阅读(340) 评论(0) 推荐(0) 编辑
摘要: 硬件访问实质 驱动程序控制设备,主要是通过访问设备内的寄存器来达到控制目的的,因此我们讨论如何访问硬件,就成了如何访问这些寄存器。 访问流程 1.地址映射 在Linux系统中,无论是内核程序还是应用程序,都只能使用虚拟地址,而芯片手册中给出的硬件寄存器地址或RAM地址都是物理地址,无法直接使用。因此 阅读全文
posted @ 2016-03-06 16:03 盛夏夜 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 驱动程序分类 常规分类法: 1.字符设备 字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,这样的驱动通常支持open,close,read和write系统调用。例如:串口,LED。按键。 2.块设备 在大部分unix系统中,块设备的定义为:以块(通常是512字节)为最小传输单位的设备, 阅读全文
posted @ 2016-03-06 15:33 盛夏夜 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 系统调用 函数实现体在内核空间,提供给应用程序来使用,就是一个系统调用。 工作流程 1.通过软中断(swi)从用户空间切换到内核空间。entry-common.S中的ENTRY(vector_swi)是用来处理软中断的。系统调用通常从r7寄存器中取出系统调用编号。 2.通过系统调用编号从系统调用表中 阅读全文
posted @ 2016-03-06 15:04 盛夏夜 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 链表简介 链表是一种常见的数据结构,它通过指针将一系列数据节点连接成一条数据链。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。 传统链表与Linux内核链表的区别 L 阅读全文
posted @ 2016-03-06 11:11 盛夏夜 阅读(298) 评论(0) 推荐(0) 编辑