[内核学习]内核模块机制
前面每篇都在编模块加载模块,这篇把模块本身的机制说透:insmod 敲下去之后内核里发生了什么,符号怎么导出和解析,引用计数怎么防止"还有人用着就被拔走",参数怎么从命令行一路活到 sysfs.全程两个小模块互相依赖做实验,所有...
前面每篇都在编模块加载模块,这篇把模块本身的机制说透:insmod 敲下去之后内核里发生了什么,符号怎么导出和解析,引用计数怎么防止"还有人用着就被拔走",参数怎么从命令行一路活到 sysfs.全程两个小模块互相依赖做实验,所有...
调试内核三件事:能断下来看现场,能不打断看流动,能事后验尸.对应三套工具:QEMU 加 gdb,KGSGB 加串口,ftrace 加 kallsyms.这篇每套都实际跑一遍,顺带说说板上这套配置偏素的内核,哪些能用哪些用不了,别拿着网上的教程命令硬敲. 这...
从 bootloader 松手到 shell 提示符出来,中间是内核生命周期里密度最高的两秒钟.这篇顺着这条线走一遍,大部分环节拿实机日志对号入座,initcall 部分在 QEMU 里开了调试参数逐个计时. 这篇回答几件事: bootloader 交接那一刻机...
内核构建是很多人的第一堵墙:make 一下几千个文件哗哗过,改一行重编四十秒,摸一个头文件二十分钟.这篇把 Kconfig 和 Kbuild 拆开讲,所有数字都是实测,机器是 8 核 x64 交叉编译同一份 6.18.56 源码,两份配置:板上内核和给 QEMU 编的 ...
上电那一刻,一颗 ARM SoC 上通常只有一个核活着.其它核是谁叫醒的,醒来第一件事干什么,跑起来之后又怎么下线休息,这条线串起来就是这篇.里头还会讲到 PSCI 这层和 firmware 的分权,以及 cpuhp 状态机,全是驱动工程师天天碰但很少往下...
内核里一切虚拟地址都不是白给的:每条取指,每次访存,硬件都在 MMU 里做一次 VA 到 PA 的翻译.这篇把翻译机制拆开:地址空间怎么切,页表长什么样,每一位置的什么含义,最后亲手把四级页表从 TTBR 一路走到 PTE.全程板上实测,中间还炸出...
系统调用,中断,缺页,断点,全是踩着异常处理这条路径进内核的.把这条主干吃透,后面讲系统调用,讲缺页,讲中断,都只是它身上的分支. 这篇回答几件事: 异常向量表长什么样,为什么 16 个槽 一场异常从硬件跳转到 C 函数,中间每步发...
读内核反汇编,写驱动碰到内存序问题,最后都会归结到这一篇的东西:A64 指令的基本套路,原子指令怎么实现,屏障指令各管什么.这篇偏实测,代码全上板跑过,有几组数据挺反直觉的. 这篇回答几件事: A64 指令集长什么样,读内核汇编最...
翻开 arch/arm64 的代码,满屏都是 EL1, x29, SPSR, DAIF 这种词.它们不是内核发明的,是 ARMv8 执行模型的地基.地基不打牢,后面看 entry.S,看异常处理,看上下文切换,全是云里雾里.这篇把地基一次说清,顺手在板子上全部验证一遍. 这...
本文仅仅是上手记录,并且丢掉那烦人的CubeIDE(不喜欢Eclipse),可以用CubeCLT来代替,里面包含了CubeIDE除了那个UI外壳的所有东西. 本文也不会依赖正点自己的东西,因为他也没解释文件来源等,属于授人以鱼了,所以我现在就要授人以渔....