上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 27 下一页
摘要: 设备控制理论 1.设备控制的作用 大部分驱动程序除了需要提供读写设备的能力外,还需要具备控制设备的能力。比如改变波特率。 2.设备控制的函数 在用户空间使用ioctl系统调用函数来控制设备。 int ioclt(int fd, unsigned long cmd, ...) fd:要控制的设备文件描 阅读全文
posted @ 2016-03-07 17:10 盛夏夜 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 应用程序访问驱动程序 1.系统调用找到内核实现函数(read) 在这个过程中主要做了下面的工作: r7 = 3 svc 说明: svc是系统调用指令,当使用该指令时系统会从用户空间进入内核空间的固定入口处,内核会从r7寄存器中取出系统调用编号,然后内核会查找系统调用表找到对应的函数实现,然后调用该函 阅读全文
posted @ 2016-03-07 17:07 盛夏夜 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 头文件 <linux/cdev.h> struct cdev <linux/fs.h> struct file_operations <asm/uaccess.h> copy_from_user(); copy_to_user(); memdev.c #include <linux/init.h> 阅读全文
posted @ 2016-03-07 15:47 盛夏夜 阅读(565) 评论(0) 推荐(0) 编辑
摘要: 设备驱动模型 1.驱动初始化(驱动安装) 1.1.分配设备描述符 1.2.初始化设备描述符 1.3.注册设备描述符 1.4.硬件初始化 2.实现设备操作(驱动操作) 3.驱动注销(驱动卸载) 设备描述结构 在任何一种驱动模型中,设备都会用内核中的一种结构来描述。我们的字符设备在内核中使用struct 阅读全文
posted @ 2016-03-07 10:11 盛夏夜 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 编译/安装驱动程序 在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) 编辑
摘要: 进程与程序 1.程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体。 2.进程:是一个执行中的程序,它是一个动态的实体。 进程四要素 1.有一段程序供其执行。这段程序不一定是某个进程所专有,可以与其他进程共用。 2.有进程专用的内核空间堆栈。 3.在内核中有一个task_struct 阅读全文
posted @ 2016-03-05 20:27 盛夏夜 阅读(252) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 27 下一页