无法在 Raspberry PI 4B 上获取 U-boot 运行。什么是绝对必需品?

Can't get U-boot running on Raspberry PI 4B. What are the absolute necessities?

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

我想构建自己的工具链、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.gz、System.map、bcm2711-rpi-4-b.dtb + 其他文件
  4. 在我的 32-GB SD 卡上创建了两个分区引导 (FAT32)、rootfs (Ext4)
  5. 已将 u-boot.bin、内核映像、start4.elf、fixup4.dat 复制到启动分区
  6. 在config.txt//config.txt
  7. 中有这个

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

内核=u-boot.bin

串行控制台输出!

enable_uart=1 7. 尝试用 HDMI 线将树莓派连接到显示器

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

问题:

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

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

以下内容对我使用 64 位 Raspbian 内核启动 1 GiB Raspberry 4 有用:

构建 u-boot v2020.10-rc5(在带有 GCC 10 的 Debian Bullseye 上)。

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

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

编辑 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。