2

我看到了一些关于这个主题的帖子,但没有什么能真正帮助我的事业,所以在这里重申我的问题。 

我想构建自己的工具链、U-boot 和主线 Linux 内核,以便移植到特定的处理器上。由于我目前拥有 Raspberry Pi 4B,因此我决定使用它来逐步测试我的二进制文件。

到目前为止,我执行了以下操作:

  1. 使用 Crosstool-ng (v1.24.0) 构建了一个 64 位工具链 - 得到 \x-tools\aarch64-rpi3-linux-gnu
  2. 克隆 U-boot 并构建 v2020.07 版本,从而生成 u-boot.bin + 其他文件(使用 rpi_4_defconfig 和 rpi_arm64_defconfig 构建)
  3. 克隆 Linux 内核(v5.4.65 和 v5.8.9),在 Raspberry Pi 存储库的 arch/arm64/configs 中添加 bcm2711_defconfig 并构建 Linux 内核 - 生成 vmlinux、Image、Image.gz、System.map、bcm2711-rpi-4 -b.dtb + 其他文件
  4. 在我的 32-GB SD 卡上创建了两个分区 boot (FAT32)、rootfs (Ext4)
  5. 复制u-boot.bin、Kernel images、start4.elf、fixup4.dat到boot分区
  6. 在 config.txt//config.txt 中有这个

在下面取消注释以使用您的自定义命名内核

内核=u-boot.bin

串行控制台输出!

enable_uart=1 7. 尝试使用 HDMI 线将 RPi 连接到显示器

我所看到的:设备似乎打开了,我看到一些绿色 LED 快速闪烁,然后只有红色 LED 保持稳定。监视器收到信号,表明它变亮了,但屏幕是空白的。我期待一个带有 UART > 或其他东西的命令提示符,但什么也没出现。 

问题:

  1. 有人可以评论我身边缺少的东西吗?
  2. 获得自己的 U-Boot、自己的 Linux 内核和在 Raspberry Pi 4B 上运行的根 FS 的绝对最低要求是什么?(关于.elf、fix*.dat等,+config.txt、cmdline.txt上的设置?)
4

1 回答 1

1

我希望这能回答问题的 U-Boot 方面:

以下为我使用 64 位 Raspbian 内核启动 1 GiB Raspberry 4 工作:

构建 u-boot v2020.10-rc5(在 Debian Bullseye 上使用 GCC 10)。

make rpi_arm64_defconfig
CROSS_COMPILE=aarch64-linux-gnu- make -j4

将 u-boot.bin 复制到 RPi4 SD 卡的第一个分区。

编辑 config.txt 并添加以下行:

enable_uart=1
arm_64bit=1
kernel=u-boot.bin

在 U-Boot 的串行控制台上,我输入了以下命令。您可以使用 mkimage 将它们放入 boot.scr 文件中。

U-Boot> setenv bootargs coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 smsc95xx.macaddr=DC:A6:32:05:53:B6 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000 console=ttyS0,115200 console=tty1 root=PARTUUID=7f586f18-02 rootfstype=ext4 elevator=deadline rootwait
U-Boot> load mmc 0:1 $fdt_addr_r bcm2711-rpi-4-b.dtb                 
47471 bytes read in 26 ms (1.7 MiB/s)
U-Boot> load mmc 0:1 $kernel_addr_r kernel8.img
15483392 bytes read in 823 ms (17.9 MiB/s)
U-Boot> booti $kernel_addr_r - $fdt_addr_r

您必须根据您的根分区和 MAC 地址来调整 PARTUUID。

于 2020-09-24T18:19:44.823 回答