从引导加载程序、内核、设备树、ramdisk 生成可引导 ELF

从引导加载程序、内核、设备树、ramdisk 生成可引导 ELF

我是 Linux 内核编程的新手,并且非常困惑(我认为是)构建可启动映像的最后一步。

对于一些背景,我们尝试通过 JTAG 将完整的操作系统映像上传到 Virtex 5 FPGA 内的强化 PPC440 处理器上。我们正在从已弃用的操作系统转向 Xilinx 定制 Linux 内核并提供持续支持。此上传所需的文件是一个包含整个操作系统及其应用程序的 ELF,(我们认为)它由引导加载程序、内核、设备树和 ramdisk 映像组成。

我们在使用 ELDK 构建方面取得了一些成功,它确实生成了正确的文件并在处理器上运行;然而,对 ELDK 的支持是有限的,它包括旧的库(libc例如 2.6)和老化的实用程序。构建更新的工具链和程序对于可维护性会更好。

跳过几个步骤,我们就能够构建我们认为的 ELF 核心组件。我们有用于引导加载程序的 u-boot、内核zImage、已编译的设备树 blob 以及包含所有必要库的 ramdisk 映像。

我很难理解的是如何将它们打包到一个文件中。 u-boot 包含一个实用程序mkimage,允许您连接后三项并在 u-boot 提示符下使用一个命令加载它们,但显然可以连接所有四个项目,因为 ELDK 确实会生成一个包含(我们相信)所有内容的单个文件里面的那些碎片。

有谁知道我在这里缺少什么?这个串联步骤是否简单,或者我们偏离了轨道?

谢谢!

答案1

我已经能够回答这个问题了。在制作linux内核时,只需指定目标如下:simpleImage.initrd.[device-tree-name]。这告诉 Makefiles 包装 zImage、ramdisk 映像(必须命名ramdisk.image.gz并放置在 中arch/[your-arch]/boot)和您的 dts(必须命名device-tree-name并放置在 中arch/[your-arch]/boot/dts)。它还会在 make 期间自动将您的文件编译为您的.dts文件。.dtc

请注意,此输出 ELF 不包含引导加载程序。这需要单独处理。

相关内容