Linux

I.MX6ULL

正点原子 I.MX6ULL MINI 开发板学习笔记:Linux 驱动架构详解——编译、树内树外与运行时效果

这是 Linux 驱动小系列的总结篇。前三篇把 LED 驱动从内核模块写到 misc 设备,属于“会用”;这篇把背后的架构讲透:驱动到底怎么编译、内核树内和树外两种方式的区别、以及驱动里每个操作在系统跑起来之后到底产生了什么效果。内容整理自我的学习笔记(note.pdf)和实际工程 code/2026/20260803。 1. 驱动代码到底怎么编译的? 不管哪种方式,最终都靠内核的 kbuild 系统。核心就三个文件的关系: * Kconfig:定义 menuconfig 里的选项(如 CONFIG_MYMODULE),三态 y/m/n——y 编进内核,m 编成模块,n 不编; * .config:menuconfig 的选择结果,保存在源码顶层; * Makefile:

作者:azhezhezhe

I.MX6ULL

正点原子 I.MX6ULL MINI 开发板学习笔记:misc 设备——字符设备驱动的快捷方式

上两篇分别用手动 mknod 和 class_create+device_create 注册字符设备,调用链一长串。这篇用 misc(混杂)设备 一步搞定。代码来自实际工程 code/2026/20260803/05_misc_led,已验证可用。 1. 完成什么实验? 用 misc_register 重写 LED 驱动:一步完成设备号分配、字符设备注册、/dev/myled0 节点创建,同时保留上一篇的 sysfs 属性 led_status。 2. 什么是 misc 设备? misc(混杂)设备是 Linux 给“不好归类的小字符设备”

作者:azhezhezhe

I.MX6ULL

正点原子 I.MX6ULL MINI 开发板学习笔记:自动创建 /dev 节点与 sysfs 属性

上一篇的 LED 驱动还要手动 mknod 才能用。这篇在同一驱动上加两步:用 class_create + device_create 让内核自动生成 /dev 节点,再挂一个 sysfs 属性文件,用 cat/echo 就能看灯、控灯。代码来自实际工程 code/2026/20260803/04_led_sys,已验证可用。 1. 完成什么实验? 在 LED 字符设备驱动基础上:insmod 后自动生成 /dev/myled0(不再手动 mknod);同时在 /sys/class/LED/myled0/ 下挂出 led_status 属性文件,

作者:azhezhezhe

I.MX6ULL

正点原子 I.MX6ULL MINI 开发板学习笔记:第一个 Linux 驱动——内核模块与 LED/蜂鸣器字符设备

系统跑起来之后,这篇开始写第一个 Linux 驱动。代码全部来自实际工程 code/2026/20260803(01_drv_template、02_drv_led、03_drv_beep),在开发板上验证通过:先写最简单的内核模块,再升级成能控制 LED 的字符设备驱动,最后照同样套路驱动蜂鸣器。 1. 完成什么实验? 编写并加载一个 LED 字符设备驱动(.ko):insmod 后生成设备号、ioremap 映射 GPIO 寄存器,应用程序通过 /dev/myled0 设备节点 write 控制灯亮灭、read 读回灯状态;蜂鸣器驱动完全复用同一框架。 2. 内核模块是什么? 内核模块(.ko)是可以动态加载到正在运行的内核中的代码。和裸机编程最大的区别:

作者:azhezhezhe

I.MX6ULL

正点原子 I.MX6ULL MINI 开发板学习笔记:Linux 系统移植——U-Boot、Kernel、rootfs 编译与启动

这篇笔记开始进入 Linux 部分:在正点原子 I.MX6ULL MINI 开发板上完成系统移植——从源码编译 U-Boot、Linux 内核和 busybox 根文件系统,让开发板从裸机状态跑起完整的 Linux。内容整理自我的学习笔记(note.pdf),每一步都实际跑通过。 1. 完成什么实验? 从源代码出发,分别编译出三个系统组件:U-Boot(引导程序)、zImage+dtb(内核与设备树)、busybox rootfs(根文件系统),并通过 SD 卡烧录 + tftp 下载内核 + NFS 挂载根文件系统的方式,把开发板启动到 Linux 命令行。 2. U-Boot、Kernel、rootfs 各是什么?

作者:azhezhezhe