嵌入式 Linux 系统基础:从启动到内存布局
1. 库链接方式
在系统中,像文件系统库通常只在系统内存(RAM)中加载一次,并且被所有使用该库的应用程序共享。不过,在嵌入式系统里,静态链接有时比动态链接更受青睐。静态链接是指将库作为应用程序二进制文件的一部分。当一两个应用程序只使用库的部分功能时,静态链接能避免在嵌入式系统的存储设备中存储整个库。当将专有应用程序与仅遵循严格 GPL 许可证而非 LGPL 许可证的库进行链接时,情况会变得更加复杂。
2. 系统启动
系统启动主要涉及三个软件组件:引导加载程序(bootloader)、内核(kernel)和初始化进程(init process)。
- 引导加载程序 :启动时运行的第一个软件,高度依赖目标硬件。它负责进行底层硬件初始化,然后跳转到内核的启动代码。
- 内核 :早期的内核启动代码因架构而异,在为 C 代码运行设置合适环境之前会进行自身的初始化。之后,内核会跳转到与架构无关的 start_kernel() 函数,该函数会初始化高级内核功能、挂载根文件系统并启动初始化进程。在高级内核初始化过程中,会调用特定平台的代码,不同架构的代码有所不同。
- 初始化进程 :系统启动的其余部分由根文件系统上的初始化程序在用户空间中完成。
以下是系统启动流程的 mermaid 流程图:
graph TD;
A[启动] --> B[引导加载程序];
超级会员免费看
订阅专栏 解锁全文
2

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



