感谢 yocto,我成功编译了一个 Linux 发行版。我有 4 个不同的文件,它们是:
bootloader u-boot-sunxi-with-spl.bin-bananapi-2020.01-r0
kernel uImage--5.4.111-r0-bananapi-20230504112433.bin
rootfs core-image-minimal-bananapi-20230504112433.rootfs.ext4
device tree sun7i-a20-bananapi--5.4.111-r0-bananapi-20230504112433.dtb
我遵循了以下指示https://linux-sunxi.org/Bootable_SD_card
我所做的事情如下:
- 我创建了分区并将文件系统设置为分区。这就是SD卡的现状。
label: dos
label-id: 0x65bf9d54
device: /dev/mmcblk0
unit: sectors
/dev/mmcblk0p1 : start= 2048, size= 204800, type=6, bootable
/dev/mmcblk0p2 : start= 206848, size= 60225536, type=83
- 根据文档闪烁启动代码是
dd if=u-boot-sunxi-with-spl.bin of=${card} bs=1024 seek=8
我使用以下代码代替上面的代码:
dd if=u-boot-sunxi-with-spl.bin-bananapi-2020.01-r0 of=/dev/mmcblk0 bs=1024 seek=8
这是输出:
965+1 records in
965+1 records out
494399 bytes (494 kB, 483 KiB) copied, 0.117692 s, 4.2 MB/s
问题:我不应该dd
把它放到第一个分区(/dev/mmcblk0p1
)吗?
- 然后我按照文档将内核复制到第一个分区
sudo cp uImage--5.4.111-r0-bananapi-20230504112433.bin /mnt/mmcblk0p1
- 我将设备树复制到第一个分区
sudo cp ~/Documents/shared_with_VB/bananapi/sun7i-a20-bananapi--5.4.111-r0-bananapi-20230504112433.dtb /mnt/mmcblk0p1
- 我将 rootfs 复制到第二个分区
sudo cp ~/Documents/shared_with_VB/bananapi/core-image-minimal-bananapi-20230504112433.rootfs.ext4 /mnt/mmcblk0p2
然后我把SD卡放在开发板上并给开发板供电,什么也没发生。
问题:我是否犯了一个错误,或者有人可以建议采取什么步骤或遵循什么?
答案1
回答第一个问题
不会。第一个分区是 FAT 卷,U-Boot 将在其中找到要启动的内核和使用的设备树。但 U-Boot 本身需要放置在其他地方。距离 SD 卡起始位置 8 kByte 的偏移是第一阶段引导加载程序 (SPL?) 可以找到的常见位置。它位于分区表和第一个分区开头之间的未使用区域内。
回答第二个问题
您的 rootfs 文件是 ext4 文件系统映像,因此您需要刷新该映像:
sudo dd if=~/Documents/shared_with_VB/bananapi/core-image-minimal-bananapi-20230504112433.rootfs.ext4 of=/mnt/mmcblk0p2 bs=1M
如果您在串行控制台上观看系统启动,您可能会看到它抱怨一个无聊的 rootfs,只有一个无用的文件(复制的图像而不是dd
ing 它。