翼度科技»论坛 云主机 LINUX 查看内容

ubuntu编译kernel

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
前言

使用的是ubuntu 22.04    本来的kernel:5.19.0-38-generic    编译kernel 5.19
使用虚拟机要注意存储空间的变化,避免内存爆掉。
环境配置

需要先安装配置环境
  1. sudo apt-get install ncurses-dev
  2. sudo apt-get install flex
  3. sudo apt-get install bison
  4. sudo apt-get install libelf-dev
  5. sudo apt-get install libssl-dev
  6. sudo apt install dwarves
  7. sudo apt-get install zstd
复制代码
编译kernel

下载和kernel同版本的源码。
http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/v5.x/linux-5.19.tar.gz
将自带的配置文件copy到解压的源码的顶层Makefile处。
  1. cp -r /boot/config-5.19.0-38-generic .config
复制代码
配置kernel
sudo make menuconfig
选择save,选择.config(之前copy过来的)
完成之后回到这个界面选择退出。
make

出现问题
  1. make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'.  Stop.
  2. make: *** [Makefile:1843: certs] Error 2
复制代码
删除.config文件中这两行中的双引号中的内容,双引号保留。
  1. CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
  2. CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
复制代码
清除编译结果重新编译。
清除编译结果
  1. make mrproper
复制代码
安装驱动
  1. sudo make modules_install
复制代码
完成后会生成一个版本号的文件夹。生成位置是/lib/modules/5.19.0
这个文件夹要创建需要权限。
生成内核压缩镜像文件
  1. make bzImage
复制代码
./arch/x86/boot下会生成bzImage文件
安装准备

5.19.0这个名字是/lib/modules下创建的文件夹的名字。
  1. sudo cp -r arch/x86/boot/bzImage /boot/vmlinuz-5.19.0
  2. sudo cp -r .config /boot/config-5.19.0
复制代码
  1. root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# cd /lib/modules/5.15.58/
  2. root@ok-VirtualBox:/lib/modules/5.15.58# ls
  3. build                      modules.builtin.bin      modules.softdep
  4. kernel                     modules.builtin.modinfo  modules.symbols
  5. modules.alias              modules.dep              modules.symbols.bin
  6. modules.alias.bin          modules.dep.bin          source
  7. modules.builtin            modules.devname
  8. modules.builtin.alias.bin  modules.order
复制代码
切换kernel版本

查看kernel版本

​        这是可以选择的kernel版本,每个版本都有正常的和recovery mode两个   (不要选择recovery mode)
  1. root@ubuntu:/# cat /boot/grub/grub.cfg |grep -E 'menuentry.+class.+class.+menuentry_id_option'
  2. menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-97fa777f-a9b2-4ce8-babc-03476266e1dd' {
  3.         menuentry 'Ubuntu, with Linux 5.19.0-41-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.19.0-41-generic-advanced-97fa777f-a9b2-4ce8-babc-03476266e1dd' {
  4.         menuentry 'Ubuntu, with Linux 5.19.0-41-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.19.0-41-generic-recovery-97fa777f-a9b2-4ce8-babc-03476266e1dd' {
  5.         menuentry 'Ubuntu, with Linux 5.19.0-38-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.19.0-38-generic-advanced-97fa777f-a9b2-4ce8-babc-03476266e1dd' {
  6.         menuentry 'Ubuntu, with Linux 5.19.0-38-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.19.0-38-generic-recovery-97fa777f-a9b2-4ce8-babc-03476266e1dd' {
  7.         menuentry 'Ubuntu, with Linux 5.19.0' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.19.0-advanced-97fa777f-a9b2-4ce8-babc-03476266e1dd' {
  8.         menuentry 'Ubuntu, with Linux 5.19.0 (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.19.0-recovery-97fa777f-a9b2-4ce8-babc-03476266e1dd' {
  9. root@ubuntu:/# vi /etc/default/grub
复制代码
选择版本

对照上面拿到的数据编上顺序号码
  1. 0        5.19.0-41-generic
  2. 1        5.19.0-41-generic (recovery mode)
  3. 2        Linux 5.19.0-38-generic
  4. 3        5.19.0-38-generic (recovery mode)
  5. 4        Linux 5.19.0
  6. 5        Linux 5.19.0 (recovery mode)
复制代码
配置/etc/default/grub文件
  1. GRUB_DEFAULT=0
复制代码
这个0就是选择的结果,对应的就是前面的版本,0表示的是默认的版本。不要选择recovery mode
如果不小心真的进入了recovery mode  在开机时长按shift键,自己手动选择。
为什么是0,因为默认的时候会自己选择第一个选项(正常开机就是默认选择的第一个 *Ubuntu):
但是我们自己编译的kernel想要使用就在第二个选项中,对应的操作码是1
然后第二个选项的子菜单
第一个选项是0,以此类推。
如果是想要启动Linux 5.19.0内核,就
  1. GRUB_DEFAULT=1> 4
复制代码
1表示的是一级菜单选择的是1,4表示的是二级菜单选择5.19.0                    >     符号后面有一个空格
这个选项表也和之前查看的kernel版本对的上。
完成之后更新
  1. sudo update-grub
复制代码
重启
uname -r 查看版本是否切换成功

来源:https://www.cnblogs.com/wdgray/p/17371885.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具