大多数嵌入式设备都是为了在通常资源受限或低规格的设备上执行特定任务而构建的。 因此,大多数嵌入式开发人员需要去除不必要的库和模块,并为其特定设备和用例创建自定义分发。我们先来了解一下嵌入式 Linux 系统有哪些组件。
引导加载程序
从技术上讲,它位于系统之外,其运行方式与首先运行 BIOS 的台式机或服务器系统不同。在嵌入式系统上,硬件启动负责基本初始化和执行内核的引导加载程序。在嵌入式系统上,这可以通过以下方式处理:GRUB、LILO 或 Das U-Boot。后者专门用于嵌入式设备。
Linux内核
包含进程和内存管理、网络堆栈、设备驱动程序,并为任何用户空间应用程序提供服务。引导加载程序将内核加载到内存中并运行它。内核寻找首先运行的“init”程序。 “Init”程序负责启动其他服务,例如硬件驱动程序、文件系统驱动程序、文件系统挂载、服务和其他应用程序。内核只知道 init 程序,如果找不到它,就会“内核崩溃”。
嵌入式系统上的内核与台式机等大型系统中的内核相同。主要区别在于嵌入式 Linux 内核专为在不同的 CPU 架构上运行而构建。
根文件系统
根文件系统包含 C 库和 Linux 服务/命令,以及其他必要的脚本。在嵌入式开发中,文件系统是内核和用户空间应用程序之间的接口。在初始化时,内核将每个程序加载到内存中,并希望将它们组织到文件和目录中。这是根文件系统,应该提前创建并挂载到“/”,然后内核才能启动“init”。
用户空间
用户空间是任何自定义应用程序或服务所在的地方。 init 程序还负责将这些加载到内存中。大多数嵌入式系统都是执行特定功能的单一用途应用程序,因此嵌入式系统上的应用程序往往是精简和最小化的。在目标嵌入式处理器上运行 Linux 需要至少 8MB 的 RAM,大多数应用程序至少需要 32MB 的 RAM。 RAM 的实际要求取决于你的嵌入式应用程序的大小。除了 RAM 之外,还需要至少 4MB 的存储内存。它可以是以下类型之一:NAND 或 NOR 闪存、SD 或 MMC 卡。
主板支持包
主板支持包包含驱动程序和其他软件,它们与你正在运行的特定硬件和操作系统相连接。 对于 Linux 系统,每种电路板类型都有自己的一组 BSP。在嵌入式开发某些情况下,如果你需要硬件来执行默认 BSP 中未包含的特定功能,你可能需要自定义这些并编写你自己的驱动程序来支持你的特定应用程序。