ubuntu编译kernel

前言

使用的是ubuntu 22.04 本来的kernel:5.19.0-38-generic 编译kernel 5.19

使用虚拟机要注意存储空间的变化,避免内存爆掉。

环境配置

需要先安装配置环境

sudo apt-get install ncurses-dev
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install libelf-dev
sudo apt-get install libssl-dev
sudo apt install dwarves
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处。

cp -r /boot/config-5.19.0-38-generic .config

配置kernel

sudo make menuconfig

ubuntu编译kernel

选择save,选择.config(之前copy过来的)

完成之后回到这个界面选择退出。

make

ubuntu编译kernel

出现问题

make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'.  Stop.
make: *** [Makefile:1843: certs] Error 2

删除.config文件中这两行中的双引号中的内容,双引号保留。

CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"

清除编译结果重新编译。

清除编译结果

make mrproper

安装驱动

sudo make modules_install

完成后会生成一个版本号的文件夹。生成位置是/lib/modules/5.19.0

这个文件夹要创建需要权限。

ubuntu编译kernel

生成内核压缩镜像文件

 make bzImage

./arch/x86/boot下会生成bzImage文件

ubuntu编译kernel

安装准备

5.19.0这个名字是/lib/modules下创建的文件夹的名字。

sudo cp -r arch/x86/boot/bzImage /boot/vmlinuz-5.19.0
sudo cp -r .config /boot/config-5.19.0
root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# cd /lib/modules/5.15.58/
root@ok-VirtualBox:/lib/modules/5.15.58# ls
build                      modules.builtin.bin      modules.softdep
kernel                     modules.builtin.modinfo  modules.symbols
modules.alias              modules.dep              modules.symbols.bin
modules.alias.bin          modules.dep.bin          source
modules.builtin            modules.devname
modules.builtin.alias.bin  modules.order

切换kernel版本

查看kernel版本

​ 这是可以选择的kernel版本,每个版本都有正常的和recovery mode两个 (不要选择recovery mode

root@ubuntu:/# cat /boot/grub/grub.cfg |grep -E 'menuentry.+class.+class.+menuentry_id_option'
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-97fa777f-a9b2-4ce8-babc-03476266e1dd' {
	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' {
	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' {
	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' {
	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' {
	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' {
	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' {
root@ubuntu:/# vi /etc/default/grub

选择版本

对照上面拿到的数据编上顺序号码

0	5.19.0-41-generic
1	5.19.0-41-generic (recovery mode)
2	Linux 5.19.0-38-generic
3	5.19.0-38-generic (recovery mode)
4	Linux 5.19.0
5	Linux 5.19.0 (recovery mode)

配置/etc/default/grub文件

GRUB_DEFAULT=0

这个0就是选择的结果,对应的就是前面的版本,0表示的是默认的版本。不要选择recovery mode

如果不小心真的进入了recovery mode 在开机时长按shift键,自己手动选择。

为什么是0,因为默认的时候会自己选择第一个选项(正常开机就是默认选择的第一个 *Ubuntu):

ubuntu编译kernel

但是我们自己编译的kernel想要使用就在第二个选项中,对应的操作码是1

然后第二个选项的子菜单

ubuntu编译kernel

第一个选项是0,以此类推。

如果是想要启动Linux 5.19.0内核,就

GRUB_DEFAULT=1> 4

1表示的是一级菜单选择的是1,4表示的是二级菜单选择5.19.0 > 符号后面有一个空格

这个选项表也和之前查看的kernel版本对的上。

完成之后更新

sudo update-grub

重启

uname -r 查看版本是否切换成功

原文链接:https://www.cnblogs.com/wdgray/p/17371885.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ubuntu编译kernel - Python技术站

(0)
上一篇 2023年5月4日
下一篇 2023年5月5日

相关文章

  • kubeadm 搭建 K8s的详细过程

    以下是”kubeadm 搭建 K8s的详细过程”的攻略。 准备工作 在开始kubeadm搭建Kubernetes之前,需要先完成以下准备工作: 首先确认已经在所有节点(Master节点和Worker节点)上安装好了系统,并且所有节点可以通过ssh互相访问。 各节点的主机名必须确保是正确的,不能是localhost或127.0.0.1。 确认某个节点将作为Ma…

    Linux 2023年5月14日
    00
  • linux下安装memcache及memcache的php扩展

    http://hellosa.blog.51cto.com/2698675/503371 一、构建memcached 服务器(memcached服务端程序的安装) 1)memcached用到了libevent这个库,用于Socket的处理 wget http://www.monkey.org/~provos/libevent-2.0.10-stable.ta…

    Linux 2023年4月12日
    00
  • 如何在Linux系统上创建用户和用户组?

    在Linux系统上创建用户和用户组可以通过命令行或者图形化界面进行操作。在命令行下,可以通过以下步骤完成: 创建用户组: sudo groupadd groupname 其中,groupname是要创建的用户组名称。例如,创建一个名为web的用户组,可以执行以下命令: sudo groupadd web 创建用户:sudo useradd -g groupn…

    Linux 2023年4月19日
    00
  • Linux笔记

    目录 1、Linux入门 1.1、Linux介绍 1.2、概述 1.3、Unix和Linux 2、VM和Linux的安装 2.1、安装VM和CentOS 2.2、VMware网络连接的三种模式 2.3、虚拟机的克隆 2.4、虚拟机的快照 2.5、安装vmtools 2.6、设置共享文件夹 3、Linux的目录结构(⭐) 3.1、目录结构的基本介绍 3.2、具…

    Linux 2023年4月19日
    00
  • Linux ipcrm命令

    Linux ipcrm命令的作用与使用方法 Linux ipcrm命令用于删除系统中的 IPC(Inter-Process Communication,进程间通信)资源,包括消息队列、共享内存和信号量等。它可以帮助管理员清理中的无用资源,释放系统资源,提高系统性能。 Linux ipcrm命令使用方法 ipcrm命令的基本语法如下: ipcrm [项] 标识…

    Linux 2023年5月10日
    00
  • CentOS 6.4系统下编译安装LNMP和配置PHP环境具体步骤

    下面是CentOS6.4系统下编译安装LNMP和配置PHP环境的具体步骤: 一、安装LNMP 1.1 安装Nginx 首先安装Nginx,执行以下命令: yum install gcc gcc-c++ autoconf automake make zlib zlib-devel openssl openssl-devel pcre pcre-devel -y…

    Linux 2023年5月14日
    00
  • 改变libvirt VM镜像的默认位置的方法

    当您使用libvirt来管理虚拟机的时候,默认情况下创建的虚拟机镜像都会存储在/var/lib/libvirt/images/目录下。如果您需要将虚拟机镜像存储到其他目录,可以按照以下步骤操作。 创建一个新的存储池 在libvirt中,存储都是通过存储池来管理的。首先需要创建一个新的存储池,并指定存储镜像的路径。 sudo mkdir /data/virtu…

    Linux 2023年5月24日
    00
  • Linux如何安装和使用Trickle以便更好的进行宽带控制

    下面是Linux如何安装和使用Trickle以便更好的进行宽带控制的完整攻略。 安装Trickle 在Linux系统中,Trickle可以通过命令行进行安装,具体步骤如下: 1.打开终端,输入以下命令安装Trickle: sudo apt-get install trickle 2.等待安装完成,即可开始使用Trickle。 使用Trickle进行宽带控制 …

    Linux 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部