【Linux】VMware虚拟机Ubuntu18.04编译升级内核笔记
背景:想深入了解内核经典管理,但是又不想在开发板上花钱,于是想到借助虚拟机,在虚拟机上编译,安装学习内核,运行起来之后通过log的形式了解一些经典的用法。在环境搭建时的简单步骤,简单记下来,方便后续遇到问题后查找。VMware,ubuntu18.04,运行内核版本:linux-5.4.0.tar.gz 升级内核版本:linux-5.15.7.tar.xz环境准备:编译依赖sudo apt-get
背景:想深入了解内核经典管理,但是又不想在开发板上花钱,于是想到借助虚拟机,在虚拟机上编译,安装学习内核,运行起来之后通过log的形式了解一些经典的用法。在环境搭建时的简单步骤,简单记下来,方便后续遇到问题后查找。
VMware,ubuntu18.04,运行内核版本:linux-5.4.0.tar.gz 升级内核版本:linux-5.15.7.tar.xz
环境准备:编译依赖
sudo apt-get install libncurses5-dev openssl libssl-dev
sudo apt-get install build-essential
sudo apt-get install pkg-config
sudo apt-get install libc6-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install libelf-dev
sudo apt-get install libidn11-dev libidn11
sudo apt-get install zlibc minizip
1.下载和配置内核:https://www.kernel.org/
linux-5.15.7.tar.xz
解压:tar -xvf linux-5.15.7.tar.xz
cd linux-5.15.7
cp /boot/config-5.4.0-104-generic .config
yes "" | make oldconfig
使用yes ""命令来回答它使用默认选项
2.编译内核
(1)make zImage x86平台<512KB
(2)make bzImage
获取详细编译信息方法:
(1)make zImage V=1
(2)make bzImage V=1
编译好的内核位于arch/<cpu>/boot/目录下
3.编译内核模块
(1)make modules
(2)make modules_install
编译好的内核模块散落在内核源代码目录下,使用make modules_install将其从源代码目录复制到/lib/modules下,为打包做准备
4.制作ramdisk
方法:mkinitramfs -ko initrd.img-$version $version
例: mkinitramfs -ko initrd.img-5.15.7 5.15.7
注:直接在/home目录执行上述命令即可;
$version可以通过查询/lib/modules下的目录得到
5.安装内核和配置启动菜单
(1)cp arch/x86/boot/bzImage /boot/vmlinuz-$version
(2)cp initrd.img-$version /boot/
(3)cp System.map /boot/System.map-$version
(3)修改/boot/grub/grub.cfg
复制一份原来的启动配置菜单,按照新的内核配置:注:直接update-grub更新启动菜单貌似不行,反正我没有成功, 手动修改后成功了。
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-xxxx' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 xxxx
else
search --no-floppy --fs-uuid --set=root xxxx
fi
linux /boot/vmlinuz-5.15.7 root=/dev/sda1 ro quiet splash $vt_handoff
echo 'Loading initial ramdisk ...'
initrd /boot/initramfs-5.15.7
}
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-e48d6045-34bd-49ec-85e2-48fb704da297' {
menuentry 'Ubuntu, with Linux 5.15.7' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.7-xxxx' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 xxxx
else
search --no-floppy --fs-uuid --set=root xxxx
fi
echo 'Loading Linux 5.15.7 ...'
linux /boot/vmlinuz-5.15.7 root=/dev/sda1 ro quiet splash $vt_handoff
echo 'Loading initial ramdisk ...'
initrd /boot/initramfs-5.15.7
}
menuentry 'Ubuntu, with Linux 5.15.7 (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.7-recovery-xxxx' {
recordfail
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 xxxx
else
search --no-floppy --fs-uuid --set=root xxxx
fi
echo 'Loading Linux 5.15.7 ...'
linux /boot/vmlinuz-5.15.7 root=/dev/sda1 ro recovery nomodeset dis_ucode_ldr
echo 'Loading initial ramdisk ...'
initrd /boot/initramfs-5.15.7
}
6.重启:
reboot
7.查看是否更新成功:
uname -r
注:使用VirtualBox安装的虚拟机没有换成功。卡在Loading initial ramdisk。
附:在编译内核模块时遇到如下错误:
make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'. Stop.
make[1]: *** Waiting for unfinished jobs....
CC certs/system_keyring.o
CC arch/x86/xen/trace.o
CC kernel/sched/wait_bit.o
Makefile:1868: recipe for target 'certs' failed
make: *** [certs] Error 2
make: *** Waiting for unfinished jobs....
解决方法:
编辑 .config 配置文件。
将:
CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
改为 CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
改为 CONFIG_SYSTEM_REVOCATION_KEYS=""
更多推荐
所有评论(0)