保姆级教程:在银河麒麟V10系统上,为飞腾FT2000设备制作grub2启动U盘(附常见错误排查)
银河麒麟V10系统下飞腾FT2000设备grub2启动U盘全流程指南
第一次接触国产化平台时,我被银河麒麟系统与飞腾处理器的组合难住了——特别是当需要制作一个可靠的救援启动盘时。与x86平台不同,ARM64架构下的引导流程有着独特的规则和陷阱。本文将分享我在长城UF716等飞腾设备上反复验证过的grub2启动盘制作方法,从分区格式化到引导安装的每个细节都会拆解说明,并附上那些只有踩过坑才知道的注意事项。
1. 环境准备与工具链配置
在开始制作之前,我们需要确保基础环境正确。银河麒麟V10默认已经包含大部分必要工具,但有些关键组件需要额外确认。
首先检查当前系统架构和内核版本:
uname -a输出应包含aarch64字样,确认是ARM64架构。如果看到x86_64则说明错用了x86系统。
安装必要的编译工具和依赖库:
sudo kylin-software-center install autoconf automake bison flex对于飞腾FT2000平台,grub2需要特定配置参数。建议从官方git仓库获取最新源码:
git clone git://git.savannah.gnu.org/grub.git cd grub配置编译参数时,这几个选项至关重要:
./autogen.sh ./configure --target=aarch64 --with-platform=efi \ --prefix=/usr/local注意:不要遗漏
--with-platform=efi参数,这是UEFI引导的关键。我曾因漏掉这个参数导致制作的U盘无法被飞腾设备识别。
编译安装过程需要约15-30分钟(视设备性能而定):
make -j$(nproc) sudo make install验证安装是否成功:
/usr/local/sbin/grub-install --version正常应显示类似grub-install (GRUB) 2.06的版本信息。
2. U盘分区与格式化实操
选择一个容量不小于4GB的U盘插入电脑。重要提醒:以下操作会清除U盘所有数据,请提前备份。
首先确认U盘设备标识符:
lsblk输出中通常会显示为/dev/sdb或/dev/sdc。务必确认无误,错误的设备号可能导致数据丢失。
使用parted工具进行GPT分区:
sudo parted /dev/sdb在交互界面依次执行:
mklabel gpt mkpart primary fat32 1MiB 100% set 1 boot on quit接着格式化分区为FAT32:
sudo mkfs.vfat -F32 /dev/sdb1创建挂载点并挂载分区:
sudo mkdir -p /mnt/usb sudo mount /dev/sdb1 /mnt/usb常见问题:如果遇到
mount: /mnt/usb: wrong fs type错误,可能是分区未正确格式化。可尝试重新执行mkfs.vfat命令。
3. grub2安装与配置详解
在挂载好的U盘上创建必要的目录结构:
sudo mkdir -p /mnt/usb/boot/grub关键步骤是使用正确的参数安装grub2:
sudo /usr/local/sbin/grub-install \ --efi-directory=/mnt/usb \ --boot-directory=/mnt/usb/boot \ --removable \ --target=arm64-efi参数解析:
--efi-directory:指定EFI系统分区挂载点--boot-directory:设置grub核心文件存放位置--removable:这是让飞腾设备识别U盘的关键--target:必须明确指定为arm64-efi
安装完成后检查生成的文件结构:
tree /mnt/usb/boot/grub应看到arm64-efi目录和大量.mod模块文件。
创建基本的grub.cfg配置文件:
sudo nano /mnt/usb/boot/grub/grub.cfg输入以下内容:
set timeout=5 menuentry "银河麒麟救援模式" { search --no-floppy --fs-uuid --set=root [你的U盘UUID] linux /casper/vmlinuz boot=casper quiet splash initrd /casper/initrd }获取U盘UUID:
sudo blkid /dev/sdb1将输出中的UUID替换到配置文件中。
4. 飞腾设备启动与排错指南
将制作好的U盘插入飞腾FT2000设备(如长城UF716),开机时按下F12或ESC进入启动菜单选择界面。
常见问题及解决方案:
问题1:U盘未被识别为启动选项
- 检查是否使用了
--removable参数安装 - 确认U盘格式化为FAT32而非NTFS
- 尝试在其他USB端口插入
问题2:启动时卡在grub rescue>
- 重新检查grub.cfg文件路径是否正确
- 确认linux和initrd镜像路径存在
- 可能是模块缺失,尝试完整安装所有模块
问题3:启动后无法找到根文件系统
- 检查grub.cfg中的UUID是否与U盘实际UUID一致
- 确认内核参数是否正确
调试技巧:
- 在grub启动时按
c进入命令行模式 - 使用
ls命令查看可用的设备和分区 ls (hd1,gpt1)/可以查看特定分区内容
5. 高级应用场景扩展
基础启动盘制作完成后,可以进一步扩展功能:
多系统引导配置: 在grub.cfg中添加多个menuentry,实现对不同系统的引导。例如:
menuentry "Ubuntu 22.04" { search --no-floppy --fs-uuid --set=root xxxx-xxxx linux /boot/vmlinuz-5.15.0-78-generic root=UUID=yyyy-yyyy initrd /boot/initrd.img-5.15.0-78-generic }持久化存储支持: 在U盘上创建额外分区用于存储配置和修改:
- 使用parted创建第二个ext4分区
- 在grub.cfg中添加
persistent参数 - 创建标记文件:
sudo touch /mnt/usb/casper-rw
网络引导配置: 利用grub的net模块实现PXE-like网络启动:
menuentry "网络安装" { insmod net insmod efinet insmod tftp set net_default_server=192.168.1.100 linux (tftp)/netboot/vmlinuz ip=dhcp initrd (tftp)/netboot/initrd.gz }6. 性能优化与安全加固
模块精简: 通过编辑grub.cfg只加载必要模块,加快启动速度:
insmod part_gpt insmod fat insmod ext2安全启动支持: 虽然飞腾平台不完全支持Secure Boot,但可以添加基础验证:
sudo grub-mkstandalone --pubkey=my_key.pub -o /mnt/usb/EFI/BOOT/BOOTAA64.EFI启动速度测试工具: 添加时间戳记录到grub.cfg:
echo "Starting kernel at $(date)" >> /boot/grub/debug.log exec tail -f /boot/grub/debug.log在UF716设备上,一个优化良好的grub2启动时间应该控制在3-5秒内。如果明显慢于这个数值,可能需要检查是否加载了不必要的模块或使用了低速U盘。
