LDD3
wuye110
这个作者很懒,什么都没留下…
展开
-
LDD3读书笔记--建立和运行模块
1.Hello World 模块 #include #include MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "Hello, world\n"); return 0; } static void hello_exit(vo原创 2013-02-19 09:33:24 · 752 阅读 · 0 评论 -
LDD3 读书笔记---设备驱动简介
1.1 驱动程序的角色 你也可以从不同的角度看你的驱动: 它是一个存在于应用程序和实际设备间的软件层. 机制和策略的区分是其中一个在 Unix 设计背后的最好观念. 大部分的编程问题其实可以划分为 2 部分:" 提供什么能力"(机制) 和 "如何使用这些能力"(策略). 在编写驱动时, 程序员应当特别注意这个基础的概念: 编写内核代码来存取硬件, 但是不能强加特别的策略给用户, 因为不同的用原创 2013-02-18 16:00:11 · 796 阅读 · 0 评论 -
LDD3读书笔记--字符驱动
字符设备通过文件系统中的名子来存取. 那些名子称为文件系统的特殊文件, 或者设备文件, 或者文件系统的简单结点; 惯例上它们位于 /dev 目录. 传统上, 主编号标识设备相连的驱动,次编号被内核用来决定引用哪个设备。现代 Linux 内核允许多个驱动共享主编号, 但是你看到的大部分设备仍然按照一个主编号一个驱动的原则来组织. 依据你的驱动是如何编写的,你可以从内核得到一个你的设备的直接指针,原创 2013-02-20 09:43:57 · 632 阅读 · 0 评论 -
LDD3读书笔记-----并发和竞争情况
在现代 Linux 系统, 有非常多的并发源, 并且因此而来的可能竞争情况. 多个用户空间进程在运行, 它们可能以令人惊讶的方式组合存取你的代码. SMP 系统能够同时在不同处理器上执行你的代码. 内核代码是可抢占的; 你的驱动代码可能在任何时间失去处理器, 代替它的进程可能也在你的驱动中运行. 设备中断是能够导致你的代码并发执行的异步事件. 内核也提供各种延迟代码执行的机制, 例如 workqu原创 2013-02-20 10:49:19 · 646 阅读 · 0 评论 -
LDD3读书笔记----分配内存
1. kmalloc 的真实故事 kmalloc 分配引擎是一个有力的工具并且容易学习因为它对 malloc 的相似性. 这个函数快(除非它阻塞)并且不清零它获得的内存; 分配的区仍然持有它原来的内容. 分配的区也是在物理内存中连续. kmalloc 原型是: #include void *kmalloc(size_t size, int flags); 给 kmalloc 的原创 2013-02-21 13:23:59 · 686 阅读 · 0 评论 -
LDD3读书笔记----IO端口和IO内存
1.I/O 寄存器和常规内存 不管硬件寄存器和内存之间的强相似性, 存取 I/O 寄存器的程序员必须小心避免被 CPU(或者编译器)优化所戏弄, 它可能修改希望的 I/O 行为. I/O 寄存器和 RAM 的主要不同是 I/O 操作有边际效果, 而内存操作没有: 一个内存写的唯一效果是存储一个值到一个位置, 并且一个内存读返回最近写到那里的值. 因为内存存取速度对 CPU 性能是至关重要的,原创 2013-02-21 13:46:08 · 835 阅读 · 0 评论