使用计算机离不开IO设备(键盘、鼠标、串口、打印机等),IO设备一般都有几个寄存器,通常我们都是对寄存器进行读写来控制IO设备的行为的。 不论什么设备,其读写寄存器的过程在硬...
使用计算机离不开IO设备(键盘、鼠标、串口、打印机等),IO设备一般都有几个寄存器,通常我们都是对寄存器进行读写来控制IO设备的行为的。 不论什么设备,其读写寄存器的过程在硬...
之前在编写字符设备的时候,我们使用过 kmalloc 和 kfree 来分配和释放内存,除了这个方法外,内核还提供了其他分配内存的方法。 本节主要说一下Linux中的内存分配...
上一节主要说了如何进行延迟操作,这些延迟都是操作当前线程,使得当前线程阻塞或休眠,等到时间到达后再继续在当前线程执行的延迟方法。如果需要在将来的某个时间点执行,而当前线程不阻...
之前我们学会了如何编写一个字符设备,并对其中的一些重要操作进行了说明。对于一个完整的设备而已,可能还有许多工作要做。 本节我们将要说一下内核中是如何对时间问题进行操作的。 本...
本节是本书中《高级字符驱动程序操作》章节的第四节内容,也是最后一节,主要是关于设备读写位置定位和设备文件的访问控制相关的概念和内容。 本节主要有以下内容: llseek的实现...
本节是本书中《高级字符驱动程序操作》章节的第三节内容。本节主要涉及到的是多路复用IO接口 poll、select 和 epoll。 本文主要的内容有以下: poll、sele...
本节是本书中《高级字符驱动程序操作》章节的第二节内容。本节主要涉及到的是进程睡眠和唤醒相关的内容。 本节主要涉及以下内容: 休眠的简单介绍 休眠与唤醒相关的操作函数 1. 休...
接下来要说的内容是书中的《高级字符驱动程序操作》章节。本章的内容比较长,所以分多节介绍。本节主要介绍的是其中的 ioctl 操作。 1. ioctl 的功能 对于一个设备,除...
上一节中介绍了并发和竞态的概念,以及介绍了一些手段用于避免产生竞态,包括信号量、completion机制、自旋锁、原子变量等。 本节我们使用其中的信号量来编写一个简单的示例,...
之前的scull字符设备驱动实例中,我说过还有许多不完善的地方。考虑如下状态:当读取的数据量比较大或者比较耗时,此时有其他的线程在我们的数据区域中写入新的数据,那此时我们读到...
通过 LetEncrypt 或其他平台申请了 SSL 证书后,其会保存在 /etc/letsencrypt/live/{domain} 目录下(是一个 link,指向 ../...
上一节介绍了字符驱动中的一些概念,这一节我们将会基于系统内存编写一个字符设备驱动,加深对上一节中的概念的理解。 本节主要学会的内容: 字符设备注册 对设备节点进行 cat 和...
之前我们说过,Linux设备主要分为三类:字符设备、块设备和网络接口。 字符设备相对于另外两个设备更加容易理解,同时,这类设备也适合大多数简单的硬件设备,因此,接下来我们学习...
之前完成了 Hello World 模块,学会了基本的模块编译、加载和卸载。 作为一个模块,对于不同的系统,可能需要的参数会有所变化,或者对于相同的系统,在不同情况下有不同的...
Hello World 是许多人开始写代码的时候第一个编写的例子,这里也延续传统,从Hello World开始。 本节主要学会以下内容: 了解模块相关的内容:模块概念、模块编...
有多少Linux驱动工程师是通过《Linux设备驱动程序》这本书入门的呢?今天翻到了抽屉里的这本书,想想也是挺感慨的。 所以重新翻开这本书,通过文章来记录并实践其中的知识要点...