Red Hat Enterprise Linux 8 (RHEL8) 的新玩意 第4篇 通过grub
配置Kernel启动参数
内核启动参数, 简单的说就是可以给内核传递参数,并且用于控制内核行为方式.
1 通常来说我们有3种方式可以给内核传递参数
1.1 在编译内核时侯,添加我们要的参数
1.2 内核启动时通过boootloader添加,比如通过gurb
或者uboot
(arm或者ppc平台)
1.3 在系统运行的时候,通过修改/proc
和/sys
里面对应的文件.
2 这里, 我们讲第二项(内核启动时通过boootloader添加,比如通过gurb
或者uboot
); 通常来说我们可以通过直接修改/boot/grub2/grub.cfg
文件来现实.但是我们看到,在RHEL8上面,/boot/grub2/grub.cfg
居然没有我们熟悉linux /boot/vmlinuz-xxx.x86_64 root=UUID=xxx
的条目. 这是什么回事,比如我们要重定向串口输出,添加console=ttyS0,115200n8
这个参数要加到什么地方?不要紧,让我们先来看看\boot
下面都有些什么文件.
3 查看启动目录/boot/
的内容, 我们知道系统是启动这个内核vmlinuz-4.18.0-80.el8.x86_64
1 | [root@vm3_rhel8 ~]# cd /boot/ && ls |
4 知道了系统内核vmlinuz-4.18.0-80.el8.x86_64
的名字,我们来找找有配置它的地方,来grub
一下
1 | [root@vm3_rhel8 boot]# grep -n "vmlinuz-4.18.0-80.el8.x86_64" -r ./ |
5 好了, 我们找到了相关的文件./loader/entries/54d1217dfdda4592a9e30059e470cf24-4.18.0-80.el8.x86_64.conf
, 那就来看看里面都有些什么cat
一下.
1 | title Red Hat Enterprise Linux (4.18.0-80.el8.x86_64) 8.0 (Ootpa) |
6 有熟悉的面孔吧,看起来我们可以在这配置内核的参数,而且变量kernelopts
似乎是对应的启动参数.
1 | [root@vm3_rhel8 boot]# grep -n "kernelopts" -r ./ |
7 它在这里定义,那我们就直接编辑添加我们需要的内核参数就好了.改一下,变成这样.
1 | ./grub2/grubenv:3:kernelopts=root=UUID=06246343-6949-4824-a96f-6ce27ff92cd5 ro crashkernel=auto console=ttyS0,115200n8 console=tty0 |
8 深入一些,那这个options $kernelopts
又是怎么就能传递到内核去的呢?
8.1 小Tips,先来打开个debug开关. 我们可以添加set debug=blscfg
(grub会通过函数grub_dprintf
输出对应的debug消息)到文件/boot/grub2/grub.cfg
; 然后注意把启动设置到一个不存在menu(比如set pager=1
). 这样的话,gurb
就会因为找不到启动项而停住,那我们就可以看到输出呢. 另外多说一句,还有这些模块可以用来调试(有兴趣可以试试看).
1 | "acpi","ahci","arcdisk","archelp","ata","atkeyb","badram","blscfg","bootp","bsd","btrfs","chain","cros","crypt","cryptodisk","devalias","disk", |
8.2 通过查看grub
的debug输出. 看到了options $kernelopts
在grub
启动时被调用了,所以对应的内核参数也被导入了.
1 | commands/blscfg.c:135: new keyval at 0xbfe42aa0:options:$kernelopts $tuned_params |
8.3 再深入一些,那options $kernelopts
具体又是怎么调进去的呢?好办,快速瞄个代码(呵呵,这就是开源的优势之一; 想知道内幕,下个代码瞄瞄). 通过查阅代码,grub
里面的与之对应的函数大概流程如下,都简明易懂,就不多解析咯.
1 | 1. GRUB_MOD_INIT(blscfg) // gurb在启动时,初始化'blscfg' |
9 到此,内核启动时通过boootloader添加启动参数就结束了. 多说一句,grub2-mkconfig
命令也可以有类似功能.
好, Red Hat Enterprise Linux 8 (RHEL8) 的新玩意 第4篇 通过grub
配置Kernel启动参数就介绍完了. 想要了解更多? 可以参考 GRUB Manual 或者源代码.
想要亲手玩一下新玩具? 请随时去 https://www.redhat.com 下载最新的 REHL 8
也欢迎关注 addos
微信公众号获取更多的,有意思的新玩具 :-)