Skip to main content

配置 U-Boot 的 extlinux 启动文件

Linux 的三个产物已经生成,但 U-Boot 仍需要内核路径、设备树路径和启动参数。工程使用 extlinux.conf 保存这些信息。

这张图也给出了排错顺序:找不到 Image 或 DTB 时检查 FAT;内核已经运行却挂载不了 / 时,再检查 append 与 rootfs。

检查工程中的 extlinux 配置

文件位于:

buildroot-2026.05.1/
└── board/avaota/a1-mainline/rootfs-overlay/boot/extlinux/
└── extlinux.conf

当前工程内容是:

board/avaota/a1-mainline/rootfs-overlay/boot/extlinux/extlinux.conf
menu title Avaota A1 mainline boot
timeout 20
default mainline

label mainline
menu label Linux 7.2 / Buildroot 2026.05.1
linux /Image
fdt /sun55i-t527-avaota-a1.dtb
append console=ttyS0,115200 earlycon root=LABEL=rootfs rootwait rw fsck.repair=yes net.ifnames=0

extlinux.conf 各字段的作用

配置消费者解决的问题典型失败位置
default mainlineU-Boot extlinux选择默认启动项停留在启动菜单
linux /ImageU-Boot从 FAT 加载内核Image not found
fdt /...dtbU-Boot从 FAT 加载板级 DTBFDT 读取或 booti 失败
console=ttyS0,115200Linux 串口驱动保留正式控制台内核日志中途消失
earlyconLinux 早期串口正式驱动注册前输出日志最早一段日志不可见
root=LABEL=rootfsLinux 根设备解析找到 ext4 根分区VFS: Unable to mount root fs
rootwaitLinux等待 eMMC 枚举完成MMC 尚未出现便尝试挂载
fsck.repair=yes用户空间工具请求修复文件系统文件系统异常后需要人工处理
net.ifnames=0Linux 用户空间使用传统网卡名称网卡名称与脚本不一致

root=LABEL=rootfs 能成立的前提不是“第二分区”,而是目标 ext4 文件系统确实带有 rootfs 卷标。这个关系在 Buildroot defconfig 中建立,并由镜像校验脚本再次确认。

BR2_TARGET_ROOTFS_EXT2_LABEL="rootfs"


rootfs.ext2 的卷标


root=LABEL=rootfs 找到根文件系统

将配置安装到启动分区

源码树中的文件不会自动出现在 FAT 中。工程的 post-build.sh 把它复制到 BINARIES_DIR,随后 genimage 把整个 extlinux/ 目录装入 boot.vfat

因此,只修改源码文件而不重新执行构建,最终 FAT 不会自动更新。检查时应直接读取 U-Boot 真正会看到的副本:

cd buildroot-2026.05.1

mdir -i output/images/boot.vfat ::/
mdir -i output/images/boot.vfat ::/extlinux
mtype -i output/images/boot.vfat ::/extlinux/extlinux.conf

再把 FAT 中的三个对象取出,与本次构建输入逐字节比较:

check_dir=$(mktemp -d)
trap 'rm -rf "$check_dir"' EXIT

mcopy -i output/images/boot.vfat ::/Image "$check_dir/Image"
mcopy -i output/images/boot.vfat ::/sun55i-t527-avaota-a1.dtb "$check_dir/board.dtb"
mcopy -i output/images/boot.vfat ::/extlinux/extlinux.conf "$check_dir/extlinux.conf"

cmp output/images/Image "$check_dir/Image"
cmp output/images/sun55i-t527-avaota-a1.dtb "$check_dir/board.dtb"
cmp board/avaota/a1-mainline/rootfs-overlay/boot/extlinux/extlinux.conf \
"$check_dir/extlinux.conf"

三条 cmp 没有输出,表示 FAT 内的副本与当前输入一致。它仍然只是离线检查;还要在 U-Boot 串口中核对真正采用的 append: 行:

append: console=ttyS0,115200 earlycon root=LABEL=rootfs rootwait rw fsck.repair=yes net.ifnames=0

内核随后识别出 eMMC 分区,并将卷标为 rootfs 的 ext4 文件系统挂载为 /。这样即使设备从 mmcblk0 变为 mmcblk1,启动项也不需要跟着修改。

继续:规划 eMMC 镜像布局