Beaglebone Black如何从SD卡FAT分区启动U-Boot
BeagleBone Black FAT分区模式启动U-Boot失败问题排查
- 正在学习《Master Embedded Linux Programming》引导加载程序章节,当前研究对象为BeagleBone Black平台的U-Boot
- 已完成交叉编译环境搭建,可成功编译U-Boot,但无法复现书中描述的FAT分区启动流程
- 已验证可用的启动方式:通过原始写入模式直接向无分区的SD卡写入
MLO和u-boot.img,设备可正常启动 - 故障现象:将相同的
MLO和u-boot.img存放在SD卡的FAT32格式MBR引导分区中时,BeagleBone无法启动,串口持续输出C字符,代表设备已切换到串口加载引导程序模式,SD卡启动流程失败 - 已尝试调整U-Boot编译配置中
MMC raw mode相关选项、参考社区公开方案操作,均未解决问题,推测遗漏了基础配置要点,需要明确可行的调试方向
更新:分区表细节
可正常启动的原始写入模式分区状态
该场景下SD卡未创建任何分区,分区查询结果如下:
$ sudo sfdisk /dev/sda -l Disk /dev/sda: 117,75 GiB, 126437294080 bytes, 246947840 sectors Disk model: MassStorageClass Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
启动失败的FAT分区模式分区状态
该场景下SD卡使用DOS分区表,创建了64M的FAT32引导分区,分区查询结果如下:
$ sudo sfdisk /dev/sda -l Disk /dev/sda: 117,75 GiB, 126437294080 bytes, 246947840 sectors Disk model: MassStorageClass Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x3d985ec3 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 133119 131072 64M c W95 FAT32 (LBA)
更新2:文件一致性验证
FAT分区内存放的MLO、u-boot.img与原始写入模式使用的文件完全一致,已排除文件损坏、编译错误的问题,分区内文件列表如下:
$ ls -al total 1000 drwxr-xr-x 2 peter peter 16384 Jan 1 1970 . drwxr-x---+ 3 root root 4096 Jul 18 08:44 .. -rw-r--r-- 1 peter peter 108184 Jul 14 13:56 MLO -rw-r--r-- 1 peter peter 893144 Jul 14 13:56 u-boot.img
更新3:已尝试的配置调整
已在SPL/TPL配置菜单下尝试调整以下U-Boot选项,均未解决问题:
Support FAT filesystems:该选项默认开启,判断为启用FAT分区启动功能的必要配置,匹配当前场景需求MMC raw mode: by sector:曾禁用该选项,禁用后原本可用的原始模式启动也同步失效,符合配置预期MMC raw mode: by partition:曾尝试启用该选项,并配置从分区1加载U-Boot,但对该选项的实际作用存疑——已知原始模式不需要依赖分区读取,但该选项要求指定用于加载的目标分区
目前缺少系统的U-Boot配置参考资料,只能盲目尝试名称相关的配置选项,排查效率极低,除调试方向外,也需要可靠的U-Boot配置参考资料指引。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

