linux 驱动学习

Snasph9 天前
linux 驱动学习
09-设备驱动中的异步通知与异步 I/O"异步通知"指设备在数据可用或状态改变时主动通知应用程序,而不是应用程序反复轮询或阻塞等待。Linux 用户空间的标准异步通知机制是 信号(signal)+ SIGIO。
Snasph9 天前
linux 驱动学习
17-SPI 驱动与 I2C/SPI/USB 架构类比初学者最大的困惑是:I²C 有 i2c_driver/i2c_client,SPI 有 spi_driver/spi_device, USB 有 usb_driver/usb_interface,它们名字不同、API 不同,但骨架完全一样:
Snasph9 天前
linux 驱动学习
21-Linux 设备驱动的调试调试是驱动开发最花时间的环节。7.2.5 的调试手段比 4.0 丰富得多: 从最原始的 printk,到 dynamic debug、ftrace、perf、eBPF、KASAN、 lockdep、pstore,再到 QEMU + gdbstub 的单步源码级调试。
Snasph9 天前
linux 驱动学习
22-QEMU 实验总览结论:除了少数"真机才有"的细节(真实时序、电压、EMC), 书上的每一个知识点都能在 QEMU 上复现。
Snasph9 天前
linux 驱动学习
13-Linux 块设备驱动块设备的分层:7.2.5 的定义(include/linux/blkdev.h):与 4.0 的对比(重要):
Snasph9 天前
linux 驱动学习
15- Linux I2C 核心、总线与设备驱动I²C(Inter-Integrated Circuit)是两条线的低速串行总线:SCL(时钟)和 SDA(数据), 外加地址寻址。它的最大价值不是"快",而是"省引脚":一根总线上可以挂几十个芯片, 每个芯片有 7 位(或 10 位)地址。EEPROM、RTC、温湿度传感器、PMIC、触摸屏控制器、 音频 codec 几乎都用 I²C 连接。
Snasph9 天前
linux 驱动学习
附录-API 速查与术语表IS_ERR()/PTR_ERR()/ERR_PTR() 用于区分指针与错误码;PTR_ERR() 取负值,ERR_PTR(-ENOMEM) 造错误指针。
Snasph9 天前
linux 驱动学习
11-内存与 I/O 访问内核中的两种地址:__iomem 是 sparse 检查用的注解,它能捕获"把 MMIO 指针当普通指针解引用"的错误。必须用 readl()/writel() 访问。
Snasph9 天前
linux 驱动学习
14-Linux 网络设备驱动网络设备与字符/块设备最大的不同:没有设备文件,只能通过 socket 接口访问。四层结构:核心是 struct sk_buff(include/linux/skbuff.h),它承载一个网络包及其元数据。
Snasph9 天前
linux 驱动学习
18-ARM Linux 设备树设备树(Device Tree, DT)是 7.2.5 内核里硬件描述的唯一主线。 4.0 时代 ARM32 还有大量板级文件(arch/arm/mach-*/board-*.c), 到 7.2.5 这些文件基本绝迹,硬件信息全部来自设备树(ARM/部分 RISC-V) 或 ACPI(x86/服务器)。
Snasph9 天前
linux 驱动学习
20-Linux 芯片级移植及底层驱动本章讲的是SoC 移植者的工作:把一颗新芯片(或一块新板)bring-up 到能跑 Linux。 这些"底层驱动"是所有上层驱动的地基——没有它们,字符/块/网络驱动都无从谈起。
Snasph9 天前
linux 驱动学习
12- Linux 设备驱动的软件架构思想7.2.5 中驱动软件架构的四个核心抽象:匹配流程:7.2.5 的头文件拆分(重要变化):4.0 时代所有设备模型结构体都堆在 include/linux/device.h 里。7.2.5 已经拆分:
Snasph9 天前
linux 驱动学习
23-从 Linux 4.0 到 7.2.5 的迁移-f 写法与 -C 等价,但不切换工作目录,路径处理更直观。自带的配置片段(kernel/configs/):kvm_guest.config、debug.config、 hardening.config、rust.config、x86_debug.config、nopm.config。
Snasph20 天前
linux 驱动学习
01-设备驱动概述与开发环境构建计算机系统可以抽象为三层:硬件、内核(含驱动)、应用程序。硬件不懂"读写文件",应用程序也不懂"寄存器位域",中间必须有人翻译。设备驱动就是这段翻译层:
Snasph20 天前
linux 驱动学习
05-Linux 文件系统与设备文件用户空间与驱动交互的第一入口是系统调用。驱动工程师必须清楚每个系统调用最终会落到 file_operations 的哪个成员:
Snasph20 天前
linux 驱动学习
04-Linux 内核模块内核模块(.ko)是可以运行时动态加载/卸载的内核代码。它的价值:模块不是什么:模块与内核的边界:最小模块(hello_module.c):
我是有底线的