【Linux】VMware虚拟机Ubuntu18.04编译升级内核笔记
背景:想深入了解内核经典管理,但是又不想在开发板上花钱,于是想到借助虚拟机,在虚拟机上编译,安装学习内核,运行起来之后通过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=""
相关文章
- linux cp指令,linux指令操作是最快的,不清楚就直接去查文档即可
- 【2023最新教程】Linux 性能测试之性能测试指标详解
- Linux 内核的测试和调试(1)
- Linux 有问必答: 如何在红帽系linux中编译Ixgbe驱动
- linux多线程随机数,随机数SecureRandom在Linux下阻塞
- linux安装Gitlab
- 【Linux】linux中自动定时备份mysql数据
- 分享Kali Linux 2016.2第45周VMware虚拟机
- linux 通过服务名称查找目录
- 【运维】Linux 服务器 基本安防配置
- vmware虚拟机扩容磁盘、硬盘 Linux虚拟机,以ubuntu为例,用自带软件,无需输入命令
- 记录一次实验室linux系统的GPU服务器死机故障的排查——Linux系统的Power States
- VMware创建Linux虚拟机之(一)实现免密登录
- Linux中nginx手动安装
- Linux 如何将linux主机变为路由器&&iptables的基本用法
- Linux学习---linux下的彩蛋和各种有趣的命令
- Linux sftp命令详解
- VMware Workstation 12 Player之安装林耐斯-Linux Red Hat 7 -系统
- Windows下vmware虚拟Linux环境
- 【Linux】linux经常使用基本命令
- 利用VMware克隆linux虚拟机需要注意的事项
- Linux学习笔记(3)linux服务管理与启停(开机自启与自定义服务)
- VMWare 安装 Linux
- 【Linux】linux中删除指定日期之前的文件
- linux常用命令
- 【Linux】linux下用python获取底层硬件信息接口
- 解决linux终端粘贴网络地址多出符号的办法
- Linux CentOS 安装 VMware Tools