ubuntu编译kernel

这篇具有很好参考价值的文章主要介绍了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.toymoban.com/news/detail-433480.html

到了这里,关于ubuntu编译kernel的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ubuntu22.04下rv1109 rootfs编译问题处理

    出于对Ubuntu新版本系统的体验,将系统更新到了ubuntu22.04了。然后在编译rv1109 sdk时出现了一些异常的错误。但是已经不回去了,只能硬着头皮一路走下去了。并将错误记录以下,以便下次有类似错误,做个参考。 buildroot 报错:c-stack.c:55:26:error:missing binary operator before token “

    2024年02月11日
    浏览(40)
  • Openharmony3.2 源码编译(ubuntu 22.04) 过程记录

    OS: ubuntu 22.04 x64 1.1 安装码云repo工具 1.2 将repo添加到环境变量 1.3 获取源码 需有gitee.com 账号,同时设置好ssh 公钥登录(https://gitee.com/help/articles/4191#article-header0) 2.1 安装编译工具 2.2 将hb添加到环境变量 2.3 通过hb 选取板卡配置 解决方法: 2.4 编译 解决方法: 安装ninja 和 gn

    2024年02月08日
    浏览(53)
  • OpenWRT LEDE在Ubuntu22.04 编译全过程记录

    注, feeds用法 查看更新的订阅源信息,index file feeds/packages.index 【问题1】m4 编译错误 解决,参考博文 【问题2】 freadahead 异常 解决,参考博文 注意 : 参考博文中的 _IO_IN_BAXKUP 应该为 _IO_IN_BACKUP ,否则会导致下述报错,此文为正确写法 【问题3】 bison-3.0.4 相关错误 解决,参考

    2024年02月12日
    浏览(117)
  • 【Matter】基于Ubuntu 22.04 编译chip-tool工具

    编译过程有点曲折,做下记录,过程中,有参考别人写的博客,也看github 官方介绍,终于跑通了~ 环境说明: 首先需要稳定的梯子,可以访问“外网” ubuntu 环境,最终成功实验在Ubuntu 22.04,应该主要体现在python 库的版本要求 基础: 关于梯子,我使用的是虚拟机NAT方式上网

    2024年02月15日
    浏览(47)
  • Ubuntu22.04 交叉编译gcc9.5 for arm

    环境:ubuntu22.04为刚刚安装,未安装gcc等包 vi ~/.bashrc输入 保存,reboot 安装: 将/opt/gmp-6.1.0/install/lib目录下所有库文件拷贝到gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib/, 然后执行 删除cc 然后安装一些库,要不然编译不过 然后执行 问题:Oops, mp_limb_t is 64 bits,

    2024年02月08日
    浏览(46)
  • 一篇搞定Ubuntu 22.04 下联网问题、 ifconfig、net-tools不能用的问题(亲测可行_仅供参考)

    刚下载的Ubuntu 联不上网、找不到ifconfig (告诉你要安装net-tools)但是输入 sudo apt install net-tools 又发现 E:无法定位软件包 net-tools 鼠标跟着“—”走 step1:打开虚拟网络编辑器 编辑—虚拟网络编辑器 —更改设置 —选择“NAT”模式—移除网络 —添加网络(哪一个都行问题不大

    2023年04月26日
    浏览(44)
  • Ubuntu22.04LTS编译Frida历史版本,环境配制及细节调整

    经常使用Frida的朋友们可能会遇到Frida的各种问题需要自定义的,而这时候Frida的本地编译就显得很重要了。 最近一位朋友发现使用Frida14/15/16版的server只能连拉一定数量的设备,超过了frida-device-manager便不能连接设备。 实现没有办法,我只好去修改源码,然后自己搭建编译环

    2024年02月19日
    浏览(54)
  • Ubuntu 22.04 搭建arm-linux-gcc交叉编译环境

    如果使用的是64位的Ubuntu系统,建议直接安装64位的arm-linux-gcc交叉编译器 下载地址: https://pan.baidu.com/s/14-lQpsXuEyCcHNHcTXcOyA 提取码: 55at 0. 注意在终端进行粘贴的操作为【Ctrl+shift+v】!! 把下载好的安装包移动到根目录下的tmp目录中(/tmp):在【其他位置】中的【计算机】中找

    2024年02月05日
    浏览(77)
  • Ubuntu18.04/20.04/22.04的Apollo8.0软件包安装(免编译)

    本文主要介绍在如何使用软件包(即 deb 包)的方式来安装 Apollo,相对于源码方式安装,软件包安装方式不需要编译,更加快捷。但是对环境的支持比较单一,如果在自定义环境内安装,请移步源码安装方式 1. 安装 Ubuntu Linux 安装 Ubuntu 18.04+ 的步骤,参见 官方安装指南。 完

    2024年02月05日
    浏览(65)
  • 解决ubuntu 22.04新内核6.5.0-15无法编译NVIDIA显卡驱动

    这里的新内核应该包括6.5.*系列的 今天我在安装NVIDIA显卡驱动发现了一个问题,主要日志如下所示: 从这个日志可以发现,他与内核冲突了。于是借助魔法搜到了ubuntuforums.org的多种方法,一个是换内核版本,有人说切换到6.2系列就好了,但我实在不行破坏内核,万一改了内

    2024年03月17日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包