上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 27 下一页
摘要: 编译/安装驱动程序 在Linux系统中,驱动程序通常采用内核模块的程序结构来进行编码。因此编译/安装一个驱动程序,其实就是编译/安装一个内核模块。 示例: make insmod memdev.ko 创建设备文件 应用程序->设备文件->驱动程序 通过字符设备文件,应用程序可以使用相应的字符设备驱动 阅读全文
posted @ 2016-03-06 19:36 盛夏夜 阅读(340) 评论(0) 推荐(0) 编辑
摘要: 硬件访问实质 驱动程序控制设备,主要是通过访问设备内的寄存器来达到控制目的的,因此我们讨论如何访问硬件,就成了如何访问这些寄存器。 访问流程 1.地址映射 在Linux系统中,无论是内核程序还是应用程序,都只能使用虚拟地址,而芯片手册中给出的硬件寄存器地址或RAM地址都是物理地址,无法直接使用。因此 阅读全文
posted @ 2016-03-06 16:03 盛夏夜 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 驱动程序分类 常规分类法: 1.字符设备 字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,这样的驱动通常支持open,close,read和write系统调用。例如:串口,LED。按键。 2.块设备 在大部分unix系统中,块设备的定义为:以块(通常是512字节)为最小传输单位的设备, 阅读全文
posted @ 2016-03-06 15:33 盛夏夜 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 系统调用 函数实现体在内核空间,提供给应用程序来使用,就是一个系统调用。 工作流程 1.通过软中断(swi)从用户空间切换到内核空间。entry-common.S中的ENTRY(vector_swi)是用来处理软中断的。系统调用通常从r7寄存器中取出系统调用编号。 2.通过系统调用编号从系统调用表中 阅读全文
posted @ 2016-03-06 15:04 盛夏夜 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 链表简介 链表是一种常见的数据结构,它通过指针将一系列数据节点连接成一条数据链。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。 传统链表与Linux内核链表的区别 L 阅读全文
posted @ 2016-03-06 11:11 盛夏夜 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 进程与程序 1.程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体。 2.进程:是一个执行中的程序,它是一个动态的实体。 进程四要素 1.有一段程序供其执行。这段程序不一定是某个进程所专有,可以与其他进程共用。 2.有进程专用的内核空间堆栈。 3.在内核中有一个task_struct 阅读全文
posted @ 2016-03-05 20:27 盛夏夜 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 内存管理子系统 1.虚拟地址与物理地址的映射 2.物理内存的分配 Linux虚拟地址空间分布 设备最后访问的一定是物理地址,但Linux系统中使用的都是虚拟地址。虚拟地址简单的来说就是程序中使用的地址。所以存在虚拟地址到物理地址之间的映射关系。 Linux系统支持的虚拟地址空间由硬件来决定。例如处理 阅读全文
posted @ 2016-03-05 18:51 盛夏夜 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 模块申明 1.MODULE_LICENSE(“遵守的协议”) 申明该模块遵守的许可证协议,如:”GPL”,”GPL v2”等 2.MODULE_AUTHOR(“作者”) 申明模块的作者 3.MODULE_DESCRIPTION(“模块的功能描述”) 申明模块的功能 4.MODULE_VERSION( 阅读全文
posted @ 2016-03-05 16:49 盛夏夜 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 内核模块示例 #inlcude <linux/init.h> #inlcude <linux/module.h> static int hello_init(){ printk(KERN_WARNING”hello_init\n”); return 0; } static void hello_ex 阅读全文
posted @ 2016-03-05 16:44 盛夏夜 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 什么是内核模块 Linux内核的整体结构非常庞大,其中包含的组件也非常多,如何使用这些组件。一种方式是把所有的组件都编译进内核文件,即zImage或bzImage,但这样会导致一个问题,占用内存过多。内核模块是一种能让内核文件本身并不包含某些组件,而是是在被需要使用的时候,动态地添加到到在运行的内核 阅读全文
posted @ 2016-03-05 16:41 盛夏夜 阅读(190) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 27 下一页