我有一个带有标准Beaglebone图像的SD卡。我还有构建u引导的MLO和u-boot.img文件。我想在SD卡上安装新的u引导,然后在Beaglebone Black上将修改后的映像闪存到MMC上。
我可以从SD卡上闪现MMC。我也可以连接到板的串行和停止在u-引导。
我不知道如何正确地将新的u引导写入SD卡。我试过几样东西
附加备注
SD卡/图像
SD卡包含来自beagleboard最新图片的Debian7.92015-11-12固件映像.
这是分区表。
Model: Generic- USB3.0 CRW -SD (scsi)
Disk /dev/sdb: 31.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 102MB 101MB primary fat16 boot, lba
2 102MB 3565MB 3463MB primary ext4引导分区不包含要替换的MLO或u-boot.img文件:
total 96
drwxr-xr-x 2 root root 2048 Nov 12 2015 App
-rwxr-xr-x 1 root root 288 Nov 12 2015 autorun.inf
drwxr-xr-x 4 root root 2048 Nov 12 2015 Docs
drwxr-xr-x 5 root root 2048 Nov 12 2015 Drivers
-rwxr-xr-x 1 root root 40 Nov 12 2015 ID.txt
-rwxr-xr-x 1 root root 41174 Nov 12 2015 LICENSE.txt
-rwxr-xr-x 1 root root 1008 Nov 12 2015 nfs-uEnv.txt
-rwxr-xr-x 1 root root 16838 Nov 12 2015 README.htm
-rwxr-xr-x 1 root root 428 Nov 12 2015 README.md
drwxr-xr-x 2 root root 2048 Nov 12 2015 scripts
-rwxr-xr-x 1 root root 16838 Nov 12 2015 START.htm
-rwxr-xr-x 1 root root 1179 Nov 12 2015 uEnv.txt发布于 2020-03-27 04:47:11
我不知道如何正确地将新的u引导写入SD卡。 ..。 SD卡包含Debian有7.9 2015-11-12固件图像来自beagleboard最新的图像。
问题的症结在于,AM335x SoC的ROM引导代码能够在原始扇区模式或FAT文件模式下从SD卡(或eMMC)读取MLO。此外,在原始模式下,有四个可能的区域来定位引导映像,尽管当介质的第一个扇区包含MBR时,只有三个区域。
AM335x SoC将首先使用原始模式检查引导映像。
因此,如果希望将MLO安装为FAT文件系统中的文件,则必须确保删除存储在原始扇区中的任何以前的MLO。
在eMMC/SD卡上存储MLO的方法有多种,检查它们的顺序决定了用于引导的映像。FAT文件将是引导顺序中的最后一个映像。
带有Debian映像的SD卡将MLO和u-boot.img存储为原始扇区(即FAT文件系统从扇区2049开始,偏移量为0x100000,因此在第一个分区之前有未分配的扇区)。
注意,扇区编号从1开始,而不是0。
SD卡上现有的MLO存储在扇区257 (偏移量为0x20000或128 K),其中包括一个用于其TOC (目录)的扇区和一个8字节的GP头。
SD卡上现有的u-boot.img存储在扇区769 (偏移量为0x60000或384 K)。
您可以使用超逻辑指令替换这两个图像,因为对于SD卡上已经存在的内容,seek=位移是正确的。
Digikey指令指定类似的seek=位移,但使用不同的块和计数。第一个命令还将删除MBR (并使FAT和ext文件系统不可访问)。
或者,您可以将TOC清零,这样原始模式将失败,然后ROM引导将恢复到FAT文件模式。
然后,您可以免除dd命令和扇区偏移,并使用普通的文件系统命令。
您的SD卡只有一个TOC可删除,因此一个命令就足够了:
dd if=/dev/zero bs=512 count=1 seek=256 of=/dev/sdX如果您不知道图像的位置,则需要清除其他可能的区域:
dd if=/dev/zero bs=512 count=1 seek=512 of=/dev/sdX
dd if=/dev/zero bs=512 count=1 seek=768 of=/dev/sdX我怎么知道哪只u靴装好了?
你的意思是哪个U引导映像被执行/引导?
booted在启动时显示的版本字符串(带有构建时间戳)不会指示哪个映像已被引导吗?
但是,这个引导加载程序并不是通过提供的脚本写入MMC的,因此它实际上并不能解决这个问题。
我读到的唯一的“问题”是在你的标题中。
Clarification
虽然您可以在原始扇区或在或SD卡上作为FAT文件找到/存储,但是存储u-boot.bin映像的方式取决于U是如何配置/构建的。( MLO只是内容表和GP头的U,前面有520个字节。)
例如,BBB的默认U引导配置将构建一个SPL/MLO,它将期望u-boot.bin存储在原始扇区0x300 (如果不从零中正确计数,则存储在769 )。
即来自.config文件:
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR=y
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x300这似乎是与您正在使用的Debian卡映像相同的配置。
如果要将u-boot.bin映像存储在SD卡的FAT文件系统中,则必须重新配置U(即make menuconfig)并重新构建以获得新的MLO。
这是我哪儿都找不到的信息。
请参阅26.1.8.5 MMC/ SD Cards的AM335x和AMIC110 Sitara处理器技术参考手册章节。
发布于 2020-03-27 20:16:24
如果您使用init-eMMC-flasher-v3.sh将SD卡闪存到MMC,则只需将mlo.img文件复制到SD卡上的/opt/backup/uboot。除了设置分区和编写rootfs之外,如果存在这些文件,脚本将使用这些文件编写MMC引导加载程序。
没有必要将新的u引导安装到SD卡上。使用SD卡引导加载程序启动板也是不必要的。
您可能需要通过在/opt/脚本中运行git pull来更新SD卡上的flasher脚本。
所以,假设SD卡驱动器是/dev/sdb
$ mount /dev/sdb2 /mnt/sd
$ cp MLO /mnt/sd/opt/backup/uboot
$ cp uboot.img /mnt/sd/opt/backup/uboot
$ cd /mnt/sd/opt/scripts
$ git pull
$ umount /mnt/sd当然,编辑uEnv.txt以启用eMMC闪光灯。
然后你可以将SD卡插入到beaglebone和电源上。新的引导加载程序和SD卡rootfs都将写入MMC。
https://stackoverflow.com/questions/60873038
复制相似问题