可以通过以下方法判断系统使用的是 extlinux、GRUB 还是 U-Boot:
方法1:检查 /boot
目录结构
- 查看
/boot
下的子目录:ls /boot
- extlinux:存在
/boot/extlinux/
目录,且包含extlinux.conf
。 - GRUB:存在
/boot/grub/
目录,且包含grub.cfg
或grubenv
。 - U-Boot:通常无
/boot
目录,或仅包含内核镜像(如uImage
)。
- extlinux:存在
方法2:查看启动日志
- 检查内核启动参数:
cat /proc/cmdline
- extlinux/GRUB:输出类似
root=/dev/mmcblk0p2 ...
(无直接标识,需结合其他方法)。 - U-Boot:可能包含
bootargs=
参数,如bootargs=root=/dev/mmcblk0p2 ...
。
- extlinux/GRUB:输出类似
- 查看完整启动日志:
dmesg | grep -i "bootloader"
- extlinux:可能无直接输出,需结合文件检查。
- GRUB:可能显示
GRUB
相关日志。 - U-Boot:可能显示
U-Boot
版本信息。
方法3:检查系统架构
- 查看CPU架构:
uname -m
- ARM架构(如
armv7l
、aarch64
):可能是 extlinux 或 U-Boot。 - x86/x64架构(如
x86_64
):通常是 GRUB。
- ARM架构(如
方法4:检查启动过程
- 重启并观察启动画面:
- extlinux:无图形界面,直接显示内核启动日志。
- GRUB:显示图形化或文本菜单(按
Esc
/Shift
进入)。 - U-Boot:显示
U-Boot
命令行界面(需在启动时快速按键中断)。
方法5:检查环境变量(仅限U-Boot)
- 挂载根分区并检查U-Boot环境:
sudo mount /dev/sdX2 /mnt # 替换sdX为设备名 sudo chroot /mnt printenv | grep -E "bootcmd|bootargs"
- U-Boot:输出类似
bootcmd=run distro_bootcmd
和bootargs=...
。
- U-Boot:输出类似
综合判断逻辑
条件 | 可能的引导程序 |
---|---|
存在 /boot/extlinux/extlinux.conf | extlinux |
存在 /boot/grub/grub.cfg | GRUB |
启动时看到 U-Boot 命令行 | U-Boot |
系统架构为ARM且无上述特征 | extlinux/U-Boot |
系统架构为x86/x64 | GRUB |
示例场景
- 树莓派(ARM架构):
/boot
目录包含extlinux/
→ extlinux。- 启动时无图形菜单 → extlinux。
- Ubuntu桌面版(x86架构):
/boot
目录包含grub/
→ GRUB。- 启动时显示紫色GRUB菜单 → GRUB。
- 嵌入式路由器(ARM架构):
- 启动时显示
U-Boot
命令行 → U-Boot。 - 无
/boot
目录 → U-Boot。
- 启动时显示
通过以上方法,您可以快速确定系统使用的引导加载程序类型。