![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux Device Driver
Stay_Hungry123
这个作者很懒,什么都没留下…
展开
-
LDD-第四章 调试技术
内核编程有自身独特的调试难题。由于内核是一个不与特定进程相关的功能集合,所以内核代码无法轻易放在调试器中执行,而且很难追踪。同样,要想重现内核代码中的错误也是相当困难的,因为这种错误可能导致整个系统崩溃,这样就破坏了可以用来追踪它们的现场。内核中的调试支持内核配置工具的“kernel hacking”菜单中:CONFIG_DEBUG_KERNEL:该选项仅仅使得其他调试选项可用。我...原创 2018-07-25 16:20:59 · 647 阅读 · 0 评论 -
LDD-第一章设备驱动程序简介
设备驱动程序的作用设备驱动程序在Linux内核中扮演特殊的角色。它们是一个个独立的“黑盒子”,使某个特定的硬件响应一组定义良好的内部编程接口,这些接口完全隐藏了设备工作细节。用户的操作通过一组标准化的调用执行,这些调用独立于特定的驱动程序。驱动的作用是将这些调用映射到作用于实际硬件的设备特有操作上。 设备驱动程序在于提供机制,而不是提供策略。大多数编程问题实际上都可以分成两部分:“...原创 2018-07-21 21:38:38 · 560 阅读 · 0 评论 -
LDD-第二章 构造和运行模块
内核中的并发内核编程区别于常见应用程序编程的地方在于对并发的处理。考虑并发的原因:1.Linux系统通常正在运行多个并发进程,并且可能有多个进程同时使用我们的驱动程序。2.大多数设备能够中断处理器,而中断程序异步运行,而且可能在驱动程序正试图处理其他任务时被调用。3.有一些软件抽象(如内核定时器)也在异步运行。3.Linux可能运行在对称多处理器(SMP)系统上,因此可能同时不止一个CPU运行...原创 2018-07-21 21:40:29 · 287 阅读 · 0 评论 -
LDD-第三章 字符设备驱动程序
主设备号和次设备号 对字符设备的访问是通过文件系统内部的设备名称(设备节点)进行的。它们通常位于/dev下。主设备号标识设备对应的驱动程序,次设备号用于确定设备文件所指的设备。MAJOR(dev_t dev); //获得主设备号MINOR(dev_t dev);//获得次设备号MKDEV(int major,int minor);//将主设备号和次设备号转换成dev_t类型分配...原创 2018-07-21 21:42:29 · 268 阅读 · 0 评论 -
LDD-第五章 并发和竞态
并发执行的原因:中断:中断几乎可以在任何时刻异步发生,也就随时可能打断当前正在执行的代码。软中断和tasklet:内核能在任何时刻唤醒或者调度软中断和tasklet,打断当前正在执行的代码。内核抢占:内核具有抢占性,所以内核任务可能被另一任务抢占。睡眠及用户空间的同步:在内核执行的进程可能会睡眠,这就会唤醒调度程序,从而调度一个新的用户进程执行。对称多处理:两个或多个处理器可以...原创 2018-08-06 14:31:25 · 306 阅读 · 0 评论