为嵌入式 Linux 平台构建内核映像

为嵌入式 Linux 平台构建内核映像

我有兴趣为基于 Ingenic SoC 的平台编译 Linux 映像。供应商含糊地提供了如何为目标 SoC 编译 Linux 内核的说明。因此,根据供应商说明和在线搜索,需要以下内容才能获得该平台的嵌入式 Linux 映像。

  1. 编译工具链(mipsel 用于基于 mips 的架构)
  2. 使用工具链使用给定的驱动程序/BSP 编译 Linux 内核
  3. 编译根文件系统 - Busybox 建议(不知道为什么)
  4. 为目标SoC编译uBoot
  5. 使用目标特定分区表对存储(例如 sd)进行分区
  6. 将整个图像闪存到 SD 中

那么问题是,为什么根文件系统与内核映像是分开的? busybox在生成文件系统中起什么作用?另外,如果 Linux 映像是在没有根文件系统的情况下编译的,如何将两者合并以使驱动程序位于根文件系统的 /sys 目录中?

答案1

构建嵌入式 Linux 是一个极其广泛但又非常神秘的主题,不确定它是否适合 EE.SE 或 Unix/Linux.SE 站点。

可以在这里找到一些解决您问题的书籍:

Linux 从头开始​​ (LFS)
http://www.linuxfromscratch.org/
“这本书源自流行的 Linux-From-Scratch-HOWTO,描述了从已安装的 Linux 发行版从头开始创建自己的 Linux 系统的过程,只使用所需的软件源。”

本书是 Linux 文档项目的一部分:
https://www.tldp.org/guides.html

从您之前的问题(在 EE.SE 上)可以看出您正在自学嵌入式系统,因此推荐阅读此内容。 Linux from Scratch 假设您正在一台 PC 上为同一台 PC 构建 Linux 发行版;这与针对 PC 以外的不同系统进行交叉编译的问题是分开的。

其他推荐阅读内容(也在上面的 TLDP 指南链接中):

  • Bash 初学者指南
  • Linux 简介 - 实践指南
  • GNU/Linux 命令行工具总结
  • 高级 Bash 脚本指南
  • Linux 系统管理员指南
  • Linux 内核模块编程指南(如果您开始编写设备驱动程序)
  • 定制 Linux:移植指南 - 将 LinuxPPC 移植到定制 SBC

另请查看嵌入式 Linux Wiki,https://elinux.org/Main_Page

您可能会考虑从更普遍支持的嵌入式目标系统开始,例如 Raspberry Pi 或 Beaglebone,其中有很多现有支持。如果您首先在 PC 上构建相当最新的发行版,然后构建相当最新的发行版以在嵌入式目标系统上运行,那么项目成功的机会会更大。本质上是同样的问题,但更多的人可以帮助解决有关构建 Raspian(Debian Stretch) 的具体问题,很少有人会尝试具体猜测 Ingeninc SoC。例如,请参阅 RaspberryPi.SE 上的这个问题:https://raspberrypi.stackexchange.com/questions/3196/building-kernel-image-img-include-ramdisk

为什么根文件系统与内核映像分开?

Linux 就是这样设计的。内核映像是在内核空间中运行的可执行代码(在启动时,并且具有特殊权限),根文件系统是其数据。除非为特定目标系统构建启动介质,否则将两者结合起来没有意义。

busybox在生成文件系统中起什么作用?

没有任何。 Busybox 将几个最常用的 Unix 实用程序合并到 shell 可执行文件中。

传统的 Unix 偏爱大量小型、独立的实用程序;相比之下,Busybox 方法将几个最常用的实用程序捆绑为 shell 内置程序。 Busybox 是包含在目标系统根文件系统中的一个不错的选择,因为它在一个相当小、方便的包中提供了许多有用的实用程序。

“Linux from Scratch”指南遵循传统的非 Busybox 方法。我建议首先完成该过程,而不必担心是否为您的目标系统包含 Busybox。

如果linux映像是在没有根文件系统的情况下编译的,如何将两者合并以使驱动程序位于根文件系统的/sys目录中?

设备驱动程序要么构建为内核映像的一部分,要么是单独的可加载内核模块,可以在引导过程中选择性地加载。

虽然术语“文件”通常表示存储在硬盘或 USB 记忆棒等非易失性存储设备上的比特流,但“文件”也可以表示具有名称或某种其他类型的任何临时数据位串。处理。 /proc、/sys 和 /dev 中有一些特殊的、动态生成的文件,它们是由内核生成的,并且安装在根文件系统的空 /proc /sys 和 /dev 占位符之上。

相关内容