Grub编译与调试

3 篇文章 1 订阅
2 篇文章 0 订阅

Grub编译与调试

1. Grub编译

git clone https://github.com/loongarch64/grub.git
cd grub
./bootstrap
./configure --with-platform=efi --target=loongarch64 --prefix=$(pwd) --disable-werror

2. Grub文件生成

2.1 grub.efi

./grub-mkimage -p . -c /boot/mxd.cfg -d ./grub-core/ -O loongarch64-efi -o /boot/mxd.efi $(ls grub-core/ | grep -E "\.mod$" | cut -d "." -f 1 | uniq)

各参数可在help信息中查看.

2.2 grub.cfg

./grub-mkconfig -o /boot/mxd.cfg

除了生成grub.cfg外, 系统下还有一些用于参考的grub默认配置选项, 如: /etc/default/grub, /etc/grub.d等. 倘若修改这些文件, 还需要更新/boot/grub/grub.cfg, 有命令可以做到:

update-grub

2.3 将grub安装至UEFI引导界面

grub-install --boot-directory=/boot --efi-directory=/boot/efi --bootload-id=mxd /dev/sda

--boot-directory指定在/boot作为根目录, 下寻找grub.cfg和模块.

--efi-directory指定在/boot/efi下寻找grubefi文件.

--bootload-id指定生成的efi选项在UEFI下显示的名称.

/dev/sda是安装grubloongarch64.efi的目标路径.

grub-install会调用grub-mkimage生成grub.efi文件, 同时会调用efibootmgr命令, 将grub.efi的路径通过UEFI运行时服务的接口写入到Flash中, 比如我这里举例是--bootload-id=mxd, 那在UEFI启动界面下将显示一个启动项, 名叫mxd, 指向/boot/efi/EFI/mxd/grubloongarch64.efi.

3. GRUB界面

GRUB主界面

如图, GRUB界面下列出了几个选项, 其中第一项vm.mxd是我自己加的内核, 第二项Loongnix GNU/Linux是系统自带内核, 第三项Advanced options for Loongnix GNU/Linux是高级选项, 通常包含一些恢复模式的选项, 第四项是System Setup–系统设置, 其实就是进入UEFI Setup界面.

然后在界面的最下方:

Use the ^ and v keys to select which entry is highlighted.
Press enter to boot the selected OS, e to edit the commands
before booting or c for a command-line.

翻译一下:

通过按上下键选择选项, 按执行进入选项, 按e去编辑选项, 按c进入GRUB的命令行.

4. 编辑GRUB选项

通常我们通过UEFI执行GRUBefi文件即可进入GRUB界面, 然后回车便可以启动内核, 但是倘若内核无法正常启动, 我们需要加串口调试, 就需要我们按e去编辑选项, 比如增加串口或者进入单用户模式等.

e后进入下图, 我们可以将光标通过上下左右按键, 移动至linux开头的那一行, 并在行末加入想要的参数比如串口console=ttyS0,115200 earlycon=uart,mmio,0x1fe001e0.

GRUB编辑

可以看到, 界面最下面仍然有一些文字, 告诉我们按下Ctrl-X组合键或者F10可以直接启动, 按下Ctrl-cF2进入到GRUB命令行, 按下ESC可以退回上一步.

5. 手动找grub.cfg

当我们在UEFI下执行GRUBefi文件后, 加入grub.cfg的路径有问题, 则需要我们手动找到grub.cfg并且加载:

GRUB命令行操作

逐个说明上述命令: 首先ls命令能够看到当前能够识别的设别, 其中hd0表示一块硬盘(Hard Disk0), 如果有多个硬盘将以hdx的形式显示.

但是hd0并不具有文件系统, (hd0,msdos2)这种形式才表示有文件系统, msdos指MBR的分区格式, msdos2也就表示MBR硬盘上第二个分区.

然后逐级用ls命令找到grub.cfg的路径:(hd0,msdos2)/boot/grub/grub.cfg.

最后通过configfile命令, 解析grub.cfg文件, 即可重新回到GRUB的主界面.

6. 没有grub.cfg的情况下引导内核

有时候, 我们会遇到有grub, 但是没有grub.cfg的情况, 这时, 我们可以稍微背下来两条命令, 这两条也就是grub.cfg中加载内核和加载initrd的命令: linux命令和initrd命令

linux命令后面加内核的路径, 以及内核启动参数

initrd命令后面加initrd的路径即可.

然后执行boot即可启动. 如下图:

grub命令启动内核

7. Grub增加串口

7.1 使能串口

grub> serial --unit=0 --speed=115200

或:

grub> serial --speed=115200 com0

--unit后指定com0comN用作串口, 通常默认使用com0.

但比如loongarch机器, 串口可能注册为了别的名字, 比如efi0, 所以真正执行的命令是:

grub> serial --speed=115200 efi0

7.2 使能串口输入

使能串口后, terminal_inputterminal_output命令分别查看可用的输入输出选项如下:

grub> terminal_input
Active input terminals:
console
Available input terminals:
serial_efi0
grub>
grub> terminal_output
Active output terminals:
console gfxterm
Available output terminals:
serial_efi0

可见输入和输出选项中各自增加了一个可用选项:serial_efi0

所以使用terminal_inputterminal_output命令分别设定可用的选项作为输入输出.

grub> terminal_input console serial_efi0
grub> terminal_output console gfxterm serial_efi0

串口下即可显示grub的一举一动了.

8. Grub打开debug

grub> set pager=1
grub> set debug=all

打开后打印会从terminal_output中可用的选项中输出. 所以建议增加串口后使用, 否则屏幕不支持回翻也挺麻烦的.

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值