Linux内核执行与目录结构解析
1. 内核从闪存执行过程
当内核直接从闪存执行时,makefile、ld脚本和引导代码紧密协作。ld规则将代码和只读段(如初始化调用信息)放入闪存,而将数据段(数据和以符号BSS开头的块)放入系统RAM,这导致两者地址不连续。makefile提供特殊规则将这些段合并为连续地址,并转换为适合上传到目标系统的格式。这是因为数据段包含初始化的数据结构,必须写入只读内存,否则会丢失。在 start_kernel 之前运行的汇编代码需要将数据段从闪存复制到RAM(链接器指定的地址),并将BSS段相关的地址范围清零,之后C语言代码才能运行。
上传新内核到目标系统时,固件从网络或串行通道获取数据文件并写入闪存。上传内核到目标计算机的中间格式因系统而异,取决于实际上传方式。例如,BIN格式用于网络传输,S3格式是通过串行电缆发送到目标系统的十六进制ASCII文件。系统开机时,用户通常可以选择启动Linux或输入固件命令。
1.1 内核上传流程
graph LR
A[获取数据文件] --> B{上传方式}
B -->|网络| C[使用BIN格式]
B -->|串行通道| D[使用S3格式]
C --> E[写入闪存]
D --> E
2. init进程
start_kernel 派生 init 线程(由 init/main.c 中
超级会员免费看
订阅专栏 解锁全文
1407

被折叠的 条评论
为什么被折叠?



