7 bit

Linux 块设备驱动

块设备驱动 99.99999999...% 的情况下不需要自己写,因为该有的存储介质(SD、EMMC、SPI-Nor等)的驱动都有了。

没志青年 没志青年 发布于 2026-01-27

2 Linux 代码规范

开发者务必遵循 Linux 的代码规范,否则多人协作时代码不好维护。 Linux 内核代码风格 — The Linux Kernel documentation 缩进和空格 制表符 缩进的制表符为 8 个字符,并非我们常用的 4 个字符。大一点的缩进更容易分辨代码块。 不要使用空格来代替制表符。

没志青年 没志青年 发布于 2026-01-27

Linux 内核 IO 操作

等待队列 多路复用

没志青年 没志青年 发布于 2026-01-27

Linux 竞态与并发

选择原则: 不允许睡眠的上下文需要采用忙等待类,可以睡眠的上下文可以采用阻塞类。在异常上下文中访问的竞争资源一定采用忙等待类。 临界区操作较长的应用建议采用阻塞类,临界区很短的操作建议采用忙等待类。 中断屏蔽仅在有与中断上下文共享资源时使用。 共享资源仅是一个简单整型量时用原子变量。 原子变量

没志青年 没志青年 发布于 2026-01-27

Linux 内核中断处理

关于 Linux 的中断: 进入中断服务程序时,硬件会自动关闭当前 CPU 的可屏蔽中断 IRQ,但不会影响其他 CPU 的中断处理。FIQ 中断不受影响,但是 Linux 内核不使用 FIQ。虽然可以在 ISR 中手动调用 local_irq_enable() 重新开启本地中断,但内核出于防止重入

没志青年 没志青年 发布于 2026-01-26

Linux 杂设备驱动(misc子系统)

杂项设备 主设备号默认规定为10,用户无须关心主设备号 可以作为拓展设备驱动数量的一种手段 依然是一个字符设备驱动 是字符设备驱动的另一种更加简单的注册方式

没志青年 没志青年 发布于 2026-01-26

Linux 内核 printk 函数

printk 是内核提供的日志打印函数,和C语言的 printf 差不多,但是不支持浮点数据。 日志级别: printk的用法和printf类似,printf用于用户空间,printk用于内核空间。 用printk函数时,内核会根据打印的日志级别,决定是否把打印的信息输出到控制台上。 消息正常输出的

没志青年 没志青年 发布于 2026-01-26

Linux PWM 驱动

设备树节点 imx6ull 上作为屏幕背光 pinctrl_pwm1: pwm1grp { fsl,pins = < MX6UL_PAD_GPIO1_IO08__PWM1_OUT 0x110b0 >; }; &pwm1 { pinctrl-names = "defau

没志青年 没志青年 发布于 2025-09-08

Linux tty 子系统

管理终端设备、串口。 这个系统特别复杂,图中只有一部分。

没志青年 没志青年 发布于 2025-08-10

Linux 内核定时器

时钟中断 硬件有一个时钟装置,该装置每隔一定时间发出一个时钟中断(称为一次时钟嘀嗒(tick)),对应的中断处理程序就将全局变量jiffies_64加1 jiffies_64 是一个全局64位整型, jiffies全局变量为其低32位的全局变量,程序中一般用jiffies HZ:可配置的宏,表示1秒

没志青年 没志青年 发布于 2025-07-31

15 Linux 总线驱动 - SPI

功能架构 和 I2C 差不多,匹配方式差不多。 设备树语法 i.MX6ULL </

没志青年 没志青年 发布于 2025-06-14

14 Linux 总线驱动 - I2C & SPI

I2C 和 SPI 很相似,放在一起讲。 I2C 和 SPI 都是 SOC 上的外设,厂商已经实现好了主机控制器驱动,所以无论换什么芯片,驱动的写法都是一样的。 总线架构 I2C 功能架构: S

没志青年 没志青年 发布于 2025-06-14

13 Linux input 子系统

设备文件:/dev/input/ 按键驱动

没志青年 没志青年 发布于 2025-06-14

4 Linux gpio 和 pinctrl 子系统

GPIO 和 Pinctrl 子系统是为了更方便的初始化和使用引脚。 GPIO 子系统提供操作引脚的函数。 Pinctrl 子系统用于设置引脚复用和电气属性。 pinctrl 子系统 参考文档: pinctrl 子系统源码目录为 drivers/pinctrl 内核\Documentation\de

没志青年 没志青年 发布于 2025-06-14

11 Linux 内核内存

Linux 内存组织: 函数使用参考: 申请内存

没志青年 没志青年 发布于 2025-06-14

12 Linux 内核数据结构

IDR Bitmap kfifo 链表 红黑树

没志青年 没志青年 发布于 2025-06-14

9 Linux proc 文件系统

proc 是伪文件系统,不在磁盘中,只存在于内存中。 挂载在 /proc 目录下,内核运行时动态生成里面的内容,为用户空间程序提供了一个动态查看和修改内核运行时信息的窗口。 如何使用 proc 手动浏览:使用 ls和 cat是最直接的方式。 编程读取:应用程序可以像打开普通文件一样 open()、r

没志青年 没志青年 发布于 2025-06-14

10 Linux sysfs 文件系统

好的,我们来深入讲解 sysfs 文件系统。它与 proc文件系统密切相关,但在设计目的和使用方式上有显著区别。 简单来说,sysfs是一个基于内存的虚拟文件系统,它在用户空间和内核空间之间提供了一个结构化的、清晰的接口,主要用于导出内核设备模型的各个部分——即系统中的总线、设备、驱动以及它们的相互

没志青年 没志青年 发布于 2025-06-14

8 Linux platform 设备驱动

设备和驱动匹配方式: 设备树匹配(现代使用) id 匹配(老,淘汰) name 匹配(远古,淘汰) ACPI 匹配(x86 使用) 匹配优先级:设备树匹配 > id 匹配 > name 匹配 Linux 设备驱动模型 驱动和设备写在一起的缺点: 设

没志青年 没志青年 发布于 2025-06-14

5 Linux 设备树

设备树简介 早期 Linux 内核源码包含大量的与特定硬件平台相关的代码,代码重复度高且杂乱无章,内核维护工作量大。 后来引入设备树,这是一个描述硬件信息的数据结构,将硬件配置从 Linux 内核源码中提取出来,提高了移植性,更方便维护。 小故事:Linux 之父 Linus Torvalds 闲来

没志青年 没志青年 发布于 2025-06-14

6 Linux 字符设备驱动

设备文件位于 /dev 下。 设备文件和普通文件的区别: 设备号 设备号共 32 位: 主设备号:占高12位,标识一个类型的设备,全局唯一。 次设备号:占低20位,标识一个类型下的不同设备,每个主设备号下的次设备号互不干扰,不会冲突。 // 拼接成设备号 dev_t devno = MKDEV(

没志青年 没志青年 发布于 2025-06-14