• ubuntu20.04 编译内核源码5.15.58


    现在的内核版本:

    1. ok@ok-VirtualBox:~$ uname -a
    2. Linux ok-VirtualBox 5.15.0-41-generic #44~20.04.1-Ubuntu SMP Fri Jun 24 13:27:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

     5.15.0-41

    下载新的内核源码The Linux Kernel Archives

     

    如果下载网络过慢,可以下载:linuxsrc5.15.58-Linux文档类资源-CSDN下载

     

    1 安装环境

    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

    解压源码

    1. xz -d linux-5.15.58.tar.xz
    2. tar -xvf linux-5.15.58.tar

    2 配置内核相关参数项

    首先进入代码根目录

    ok@ok-VirtualBox:~/Downloads$ cd linux-5.15.58/

    把本机config配置拷贝到我们前面解压出来的内核源码根目录下:

    cp -v /boot/config-$(uname -r) .config
    

     如果之前编译过内核源码,由于出错或者其它原因想重新编译,则需要先清理下之前的编译结果,执行:

    make mrproper

    采用基于文本的菜单配置,适用性强,也可用于远程编译内核

    sudo make menuconfig

     

     

     

    编译内核源码

    执行make命令即可,但是内核源码庞大,编译下来很费时间(跟机器性能有关,一般需要数十分钟到几个小时),可以make加上-jn选项多线程编译内核来加速内核编译,如:

    1. # j后面数字,可以设置成cpu个数
    2. root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# make -j8

     如果报错:

    编译内核错误——*** 没有规则可制作目标“debian/canonical-certs.pem”,由“certs/x509_certificate_list” 需求。 停止

    sudo gedit .config

    删掉双引号中的内容(保留双引号):
     

     安装驱动

    root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# make modules_install
    

    完成: 

    在/lib/moudles下生成了:

     

    当前版本:

     

     生成内核压缩镜像文件

    root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# make bzImage
    

    在 ./arch/x86/boot 下生成bzImage

     

            bzImage:是压缩的内核镜像文件,bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。比zImage有更高的压缩率。
        vmlinuz:是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz的建立有两种方式。一是编译内核时通过“make zImage”创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage/boot/vmlinuz”产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。二是内核编译时通过命令make bzImage创建,然后通过:“cp/usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”产生。一般是一个软链接。但是,它已经丢失了调试信息等,不可用于调试,这就是为什么perf和systemtap等内核级别的调试软件安装的时候,需要重新编译内核的原因。同理,解压缩vmlinuz是可以得到vmlinux的。但是失去了调试信息。相对于vmlinux,它增加了解压缩和boot的部分


    安装

            拷贝镜像文件:

    1. root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# cp arch/x86/boot/bzImage /boot/vmlinuz-5.15.58
    2. root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# cp .config /boot/config-5.15.58

    进入/lib/modules/5.15.58/

    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
    9. root@ok-VirtualBox:/lib/modules/5.15.58# update-initramfs -c -k 5.15.58

    更改系统启动参数

    root@ok-VirtualBox:/lib/modules/5.15.58# update-grub
    

     

     重启:

    内核替换成功:

     

  • 相关阅读:
    pytorch中nn.Conv1d功能介绍
    【Python基础入门5】关于数据类型
    【sass中文文档】
    一文读懂 HTTP/2 特性
    【英语:语法基础】B2.核心语法-动词
    k8s日志收集
    天线设计中的负载牵引
    统计学习方法第三章-k近邻法
    双指针算法的实现
    如何通过内网穿透实现公网远程连接Redis数据库
  • 原文地址:https://blog.csdn.net/LIJIWEI0611/article/details/126088341