linux kernel源码解析
基于linux 0.11版本,解析minix文件系统、高速缓冲区、字符设备、块设备、内存管理、进程调度。
基于linux2.6.12 研究platform总线,proc文件系统,misc总线、char、block,wifi/ble驱动、音频驱动、视频驱动、framebuffer LCD驱动。
唐墨123
万丈高楼平地起,辉煌还要靠自己
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux kernel之多叉稀疏树->数据结构解析
Linux内核中的XArray数据结构是一种创新的稀疏树结构,专为高效管理大文件/数据集元数据而设计。相比传统的AVL树,它采用多级哈希实现快速索引,显著减少元数据空洞。该结构在ramdisk、ext4、NVMe、TCP/IP协议栈等十余个内核子系统中广泛应用,完美解决了传统数组/链表/树结构在随机ID场景下的内存空洞问题。XArray以接近"上帝视角"的设计思路,实现了快速索引、低内存占用和高扩展性的统一,成为内核元数据管理的重要基础设施。原创 2026-06-17 18:58:34 · 43 阅读 · 0 评论 -
从写代码以武入道,写出来洞若观火,写出来入木三分,写出来哲学思想
摘要:农村人突破原生环境束缚需经历多重阶段:从道德困境到浮躁冒进,经历失败与迷茫后,少数人能实现认知觉醒。关键是通过观察总结形成方法论,提升逻辑与哲学思维,用理性弥补智力短板。最终极的突破在于通过反复验证培养近乎冷酷的客观分析能力——直面事实、精准纠错、理性决策。这一过程本质是摆脱情绪束缚,建立"实事求是"的思维体系,但大多数人会困在迷茫阶段无法突围。(149字)原创 2026-06-13 21:59:18 · 42 阅读 · 0 评论 -
关于linux kernel错误码为负数编码这件事情,我个人的一些看法
Linux内核采用负数作为错误码的设计背后蕴含深刻考量:一方面规避了社区因标准不统一导致的分裂风险(内核2.6时期论证),另一方面在7.0代码中展现出三重精妙性——通过与用户态正数错误码形成天然隔离层,既保证系统调用的清晰语义划分,又实现二进制兼容性维护,同时为错误处理提供类型安全的编译期检查。这种设计印证了内核代码高度理论化的特征,每处细节都经严谨论证,堪称工程实践的典范。(149字)原创 2026-06-12 15:27:07 · 46 阅读 · 0 评论 -
linux kernel (i2c、uart、spi、frame buffer、pci等)驱动框架的骨架
本文分析了Linux内核驱动框架的四大核心组件:1)设备树(OF)提供硬件描述,内核解析生成设备节点;2)sysfs基于kobject构建虚拟文件系统,展示设备层级;3)kobject/kset实现对象生命周期管理;4)uevent通过netlink实现热插拔通知。驱动启动流程为:内核启动→设备树构建→驱动注册→总线匹配→probe调用→设备创建→触发uevent→用户空间响应。这四大组件各司其职:OF描述硬件,kobject管理对象,sysfs提供视图,uevent实现通知,共同构成了Linux驱动框架的原创 2026-05-09 22:43:39 · 88 阅读 · 0 评论 -
linux kernel源码解析之:smp系统cpu热插拔
本文分析了SMP系统中CPU热插拔流程及per-cpu slab无锁缓存机制。通过流程图展示了CPU热插拔过程,并详细解析了slab缓存的构建与析构代码实现,包括slab元数据管理和object数组回收机制。重点阐述了无锁设计在per-cpu缓存中的运用,通过多幅代码截图展示了关键数据结构的操作流程。该机制有效提升了多核环境下的内存分配性能,同时保证了CPU动态调整时的缓存一致性。原创 2025-12-20 11:02:41 · 127 阅读 · 0 评论 -
linux字符设备驱动
摘要:该代码实现了一个Linux字符设备驱动memdev,包含设备初始化、读写操作等功能。通过register_chrdev_region或alloc_chrdev_region分配设备号,使用cdev_init和cdev_add注册字符设备,并创建4KB的内存缓冲区。实现了open/release/read/write/llseek等文件操作接口,支持用户空间与内核空间的数据拷贝。最后通过class_create创建设备类,为udev/mdev自动创建设备节点提供支持。原创 2025-11-28 13:43:07 · 106 阅读 · 0 评论 -
linux kernel之proc文件系统源码解析
本文对比了新旧Linux内核中proc文件系统的数据结构差异,通过图示直观展示了架构变化。同时解析了老版本内核proc文件系统的实现源码,揭示其内部工作机制。两幅配图分别呈现了数据结构对比和源码实现细节,为理解proc文件系统的演进提供了可视化参考。原创 2025-11-25 16:22:52 · 141 阅读 · 0 评论 -
如何解释c指针?
本文阐明了指针的本质是编译器/链接器的抽象概念,而非CPU直接使用的机制。通过C代码示例和伪汇编分析表明:指针本质上是指导编译器生成多级寻址代码的标记——每增加一个指针层级(),编译器就自动补充一次寻址操作。CPU执行时只处理地址和数据总线上的具体数值,通过逐步访问内存地址链(如0x1000→0x2000→0x3000)最终到达目标数据。无论是读写变量还是多级指针,CPU的底层操作流程完全一致,区别仅在于编译器根据指针层级生成的寻址次数不同(0级变量1次寻址,每多1个增加1次寻址)。这揭示了高级语言指针与机原创 2025-11-12 10:21:53 · 109 阅读 · 0 评论 -
linux module机制
Linux内核模块文件(ko文件)是动态扩展内核功能的二进制文件,采用ELF格式存储模块代码和数据。ko文件包含关键节区如.text(代码)、.data(变量)和.modinfo(元数据)。其生成过程经过预处理、编译、汇编和链接阶段,其中链接阶段处理内核符号引用和版本控制。加载ko文件时,系统会进行签名验证、内存分配、符号解析,最后执行初始化函数完成模块激活。这种机制实现了内核功能的动态扩展和"即插即用"特性。原创 2025-10-30 12:15:54 · 164 阅读 · 0 评论 -
从linux0.11再探minix文件系统设计原理
之前分析过fatfs32文件系统的设计原理,顺带探讨了ext2这种使用多级bitmap级联的文件系统设计原理。本文,将会以linux kernel 0.11为基础,全面分析minix 1.0文件系统的设计原理。代码需要跳来跳去,用顺序的文字比较难描述清楚,后面再说。原创 2025-09-28 15:21:32 · 580 阅读 · 0 评论 -
《linux kernel 进程加载器、进程调度器源码解析》
本文分析了Linux内核中进程加载器的实现机制,以传统a.out格式为例,探讨了执行./a.out时内核如何加载程序的过程。文章详细介绍了a.out文件结构,包括代码段、数据段、BSS段等布局,并对比了现代ELF格式。同时解析了task_struct数据结构中关键字段,如内存管理边界、进程标识、权限机制(uid/euid/suid)等。通过分析内核加载可执行文件的流程,揭示了从文件系统到进程创建的系统内部工作原理,特别关注了权限切换和资源继承机制。原创 2025-10-10 14:34:02 · 888 阅读 · 0 评论
分享