湘潭市建设网站,汕头建站费用,常青藤网站建设,培训建设网站author: hjjdebug date: 2024年 10月 25日 星期五 15:38:48 CST description: ubuntu20 从源码编译升级到版本5.15.263 我的内核是 5.15.105, 用apt 下载源码后其版本是5.15.263 为什么要从源码编译内核. 升级内核? 目的: 练练手. 消除内核神秘性. 还可以裁减内核,也是调试内核…
author: hjjdebug date: 2024年 10月 25日 星期五 15:38:48 CST description: ubuntu20 从源码编译升级到版本5.15.263 我的内核是 5.15.105, 用apt 下载源码后其版本是5.15.263 为什么要从源码编译内核. 升级内核? 目的: 练练手. 消除内核神秘性. 还可以裁减内核,也是调试内核和模块的基础. 甲: 编译内核 1. 下载源码 $sudo apt-get source linux-hwe-5.15-source-5.15.0
2. 配置内核, 形成.config 文件
make defconfig 是不行的它形成的.config文件包含的内容太少形成的内核是不能引导系统的. 所以你需要一个基础点作为.config 的起点. $cp /boot/config-5.15.0-105-generic .config //选用一个可以运行的配置作为起点.简化了我们配置 // 你的也许需要修改第一个参数 make menuconfig //你想修改配置就修改它了不想修改直接保存 覆盖一下.config 文件, 直接保存跟copy来的那个基础config 还是会有差别的. 它会修改一些配置例如版本信息等. config 搞不对,编出的内核会不能运行
注意需要把内核CONFIG_DEBUG_INFO配置关掉 不然会因为编译完安装内核时生成的initrd.img-5.15.0-263太大而导致系统启动时报“out of memory”的错误导致系统起不来。 怎样让grub 支持大内核不在本博阐述.
加上debug信息生成的initrd.img 大概有800M左右 而去掉debug 才64M make menuconfig - Kernel hacking - Compile-time checks and compiler options - [ ] Compile the kernel with debug info
3. 编译内核
$make -jN 花费时间比较长, 有几个核,N 就写几吧,快点让它编出来.
遇到的错误, 大多是缺少相关工具,flex,bison,zstd等安装即可. $sudo apt install flex $sudo apt install bison $sudo apt install zstd
下面这个比较陌生, 也是缺少工具造成, 解决方法也是安装工具包. BTF: .tmp_vmlinux.btf: pahole (pahole) is not available Failed to generate BTF for vmlinux Try to disable CONFIG_DEBUG_INFO_BTF Makefile:1127: recipe for target ‘vmlinux’ failed make: *** [vmlinux] Error 1
分析: BTFBPF Type Format是一种紧凑的格式用于表达类型信息 BPF扩展的 Berkeley Packet Filter是一项强大而灵活的技术。 它允许在内核中运行沙盒化程序类似于虚拟机环境为扩展内核功能提供了一种不会导致系统崩溃的安全方法。 pahole 是一个工具, 是dwarves 项目中的一部分 它主要用于提取数据结构中的调试信息格式如DWARF和CTF) 缺少该工具,安装之.
解决方法 $ sudo apt install dwarves
编译内核总是会浪费很多时间尤其是配置一变又要重新编译. 大好时间都浪费在编译上没办法… 编译成功会有 Kernel: arch/x86/boot/bzImage is ready (#4)
前边是基础. 新内核怎样让grub 认识. 乙: 升级内核 1. 安装模块及内核, 通常是安装在/boot 目录下
这里说的太专业化了白话是把新内核和新模块copy 到指定的位置.方便grub 找到它 $make modules_install // 签名,安装也要花不少时间. 靠,等等等… $make install 要先安装模块,后安装内核,因为后者还要依赖于前者.
$ make -n install , 只显示不安装会让你看到它会运行什么脚本.
2. 更新bootloader
$update-grub // 这一步其实不用了,因为make install 已经包含该过程了. 再执行一遍也可以.3. 启用新内核
$reboot, 选择新内核 丙: ubuntu20 怎样把新安装的内核设置成默认项 编辑/etc/default/grub 文件 GRUB_DEFAULT0 表示选择第一项, 可以更改为其它项
如果开机选择内核目录为两层则 GRUB_DEFAULT‘1-4’ 1 表示选择第二个选项(往往对应着高级选项 4 表示选择第五个内核
保存文件后, $update-grub