编译内核
安装内核编译所需包:
1 | sudo apt-get update && sudo apt-get install build-essential gcc g++ make libncurses5-dev libssl-dev bison flex bc libelf-dev |
生成内核编译配置文件:
1 | make localmodconfig |
修改.config
文件:
1 | vim .config |
删除系统吊销密钥
查找
CONFIG_PSI
,将其对应行修改为:1
CONFIG_SYSTEM_REVOCATION_KEYS=""
然后就可以进行内核编译:
1 | make -j8 && sudo make modules_install && sudo make install |
修改grub
打开grub配置文件:
1 | sudo vim /etc/default/grub |
进行以下修改:
- 注释
GRUB_TIMEOUT_STYLE=hidden
- 将
GRUB_CMDLINE_LINUX_DEFAULT
设置为”text” - 将
GRUB_TIMEOUT
修改成30
然后保存退出,更新grub:
1 | sudo update-grub |
进入内核
完成上述步骤后,重启虚拟机:
1 | sudo reboot |
在进入GRUB界面时选择Advanced Ubuntu
,然后选择内核版本6.4.0+即可。
问题记录
ALERT! root=UUIDxxx does not exist. Dropping to a shell!
因缺少磁盘驱动挂载文件系统失败
init进程启动失败,error code为-8
1
2Starting init: /sbin/init exists but couldn't execute it (error -8)
然后init进程被杀死了,然后就进入BusyBox Shell最后发现是不知道为什么它将启动参数中的text误认为init进程的启动参数了,最后的解决方案是删掉启动参数里的text(具体方法可以看GRUB介绍部分,看完大概就懂了)
cannot set terminal proccess group(-1): Inappropriate ioctl for device.
不知道为啥重启下就好了。偶尔出现偶尔不出现,很奇怪
initrd.img Unable to mount root fs on Unknown-block(0,0)
最后发现好像是这个initrd.img损坏了,最后执行
mkinitramfs -o /boot/initrd.img-xxx
重新做了个initrd.img解决问题。Kernel panic - not syncing: No working init found. Try passing init= option to kernel.
按它说的那样,在GRUB参数加个比方说
init=/bin/bash
就行了