Linux学习之Ubuntu 20.04安装内核模块

news2024/12/27 12:50:25

参考博客:Ubuntu20.04编译内核教程

sudo lsb_release -a可以看到我当前的系统是Ubuntu 20.04.4sudo uname -r可以看到我的系统内核版本是5.4.0-100-generic
在这里插入图片描述
sudo apt-get install -y libncurses5-dev flex bison libssl-dev安装所需要的依赖。
在这里插入图片描述

sudo apt-get install linux-source按两下Tab,看一下可以下载的源码。
在这里插入图片描述

然后输入sudo apt-get install linux-source-5.4.0就可以下载源码。
在这里插入图片描述

sudo find / -name linux-source-5.4.0看一下源码下载位置,ls -l /usr/src/linux-source-5.4.0看一下目录下边的内容。
在这里插入图片描述

sudo tar xjf /usr/src/linux-source-5.4.0/linux-source-5.4.0.tar.bz2 -C /usr/src/linux-source-5.4.0/把源码压缩包解压到/usr/src/linux-source-5.4.0/目录下。
在这里插入图片描述

cd /usr/src/linux-source-5.4.0/linux-source-5.4.0/进入到源码顶层目录下。
在这里插入图片描述

sudo make menuconfig进入到配置页面。
在这里插入图片描述
键可以选择目录,键可以选择选项,比如<Select>,< Exit >等。
在这里插入图片描述

键选择 Device Drivers --->,然后按Enter
在这里插入图片描述

键选择Network device support ---> ,然后按Enter
在这里插入图片描述

键选择Universal TUN/TAP device driver support,然后按m,在尖括号里边要有M

在这里插入图片描述
键,选择 < Save >,然后按Enter
在这里插入图片描述

键,选择 < ok >,然后按Enter
在这里插入图片描述

然后再按Enter
在这里插入图片描述

键,选择 < Exit >,然后按Enter
在这里插入图片描述

键,选择 < Exit >,然后按Enter
在这里插入图片描述

键,选择 < Exit >,然后按Enter
在这里插入图片描述

最后退出到命令行。
在这里插入图片描述

重新配置一些参数。

sudo sed -i 's/CONFIG_MODULE_SIG=y/CONFIG_MODULE_SIG=n/g' .config  # 把 CONFIG_MODULE_SIG=y  替换成  CONFIG_MODULE_SIG=n
sudo sed -i 's/CONFIG_MODULE_SIG_ALL=y/CONFIG_MODULE_SIG_ALL=n/g' .config
sudo sed -i 's/CONFIG_SYSTEM_TRUSTED_KEYS="debian\/canonical-certs.pem"/CONFIG_SYSTEM_TRUSTED_KEYS=""/g' .config
sudo sed -i 's/CONFIG_SYSTEM_REVOCATION_KEYS="debian\/canonical-revoked-certs.pem"/CONFIG_SYSTEM_REVOCATION_KEYS=""/g' .config
sudo sed -i 's/CONFIG_SYSTEM_TRUSTED_KEYRING=y/CONFIG_SYSTEM_TRUSTED_KEYRING=n/g' .config  # 把 CONFIG_SYSTEM_TRUSTED_KEYRING=y 替换成 CONFIG_SYSTEM_TRUSTED_KEYRING=n 
cat .config | grep "CONFIG_SYSTEM_TRUSTED_KEYRING=n" # 看一下 CONFIG_SYSTEM_TRUSTED_KEYRING 相关字符串是否成功替换。

在这里插入图片描述
sudo nohup make -j2 all &在后台运行make编译过程,按一下回车键可以再次进入命令输出。
在这里插入图片描述

cat nohup.out可以看一下文件里边的内容。
在这里插入图片描述

使用sudo ps -aux | grep nohup可以看一下sudo nohup make -j2 all &是否还在运行。
在这里插入图片描述

sudo ps -aux | grep nohup要是只有如下所示一条记录,要么执行完成,要么有问题报错了。在这里插入图片描述

cat nohup.out看一下输出文件,发现报错如下:

BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
Failed to generate BTF for vmlinux
Try to disable CONFIG_DEBUG_INFO_BTF
make: *** [Makefile:1139: vmlinux] Error 1

在这里插入图片描述

sudo apt-get install -y dwarves是为了解决上边的报错而安装依赖包。
在这里插入图片描述

sudo nohup make -j2 all &执行之后,nohup: ignoring input and appending output to 'nohup.out'之后按一下回车键,接着让系统进行编译吧。
在这里插入图片描述

ps -aux | grep 459469sudo ps -aux | grep nohup发现这个459469进程已经不执行了。
在这里插入图片描述

sudo tail -n 20 nohup.out看一下/usr/src/linux-source-5.4.0/linux-source-5.4.0/nohup.out最后二十行内容,发现没有报错。结合上边459469已经执行结束,这说明内核已经编译成功了。
在这里插入图片描述
sudo nohup make modules_install &进行内核安装,在nohup: ignoring input and appending output to 'nohup.out'之后按一下回车键。
在这里插入图片描述

ps -aux | grep 555980看一下555980进程是否还在执行,发现已经结束了。
在这里插入图片描述

sudo tail -n 30 nohup.out看一下nohup.out最后三十行输出结果,发现没有报错,结合上边555980进程已经结束,所以内核模块已经安装完成。
在这里插入图片描述

sudo grep 'menuentry' /boot/grub/grub.cfg可以看一下相关信息。
在这里插入图片描述

/etc/default/grub里边的原来内容如下:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX="net.ifnames=0 consoleblank=600 console=tty0 console=ttyS0,115200n8 nospectre_v2 nopti noibrs noibpb"

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

具体如何修改/etc/default/grub,可以参考下边两篇博客:
Ubuntu 20.04 LTS修改内核版本
Ubuntu20.04 如何降低内核版本?

sudo vim /etc/default/grub,我把内容修改如下:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT="gnulinux-advanced-bbd3ea56-da3b-4e1a-b14e-159e41299ea3>gnulinux-5.4.0-26-generic-advanced-bbd3ea56-da3b-4e1a-b14e-159e41299ea3"
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX="net.ifnames=0 consoleblank=600 console=tty0 console=ttyS0,115200n8 nospectre_v2 nopti noibrs noibpb"

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

就是把GRUB_DEFAULT=0改为GRUB_DEFAULT="gnulinux-advanced-bbd3ea56-da3b-4e1a-b14e-159e41299ea3>gnulinux-5.4.0-26-generic-advanced-bbd3ea56-da3b-4e1a-b14e-159e41299ea3"

sudo update-grub更新grubsudo reboot进行重启。
在这里插入图片描述

重启之后输入sudo uname -r可以看到内核已经变为5.4.0-26-generic
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/779132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国密SSL优势及应用场景

国密SSL的优势主要有以下几点&#xff1a; 更高的安全性&#xff1a;国密算法采用的是国家密码管理局推荐的算法&#xff0c;相对于传统的SSL协议更加安全。 更好的性能&#xff1a;国密算法是国家密码管理局推荐的算法&#xff0c;其加密效率与密钥长度相比传统算法更高。 更…

Java集合之List

ArrayLsit集合 ArrayList集合的特点 ArrayList集合的一些方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中的元素个数。 ③.get(int index) 返回列表中指定位置的元素&#xff0c;index从0开始。 public class Test {public static void m…

【Python学习笔记】记载解决Python报错HTTP Error 403: Forbidden的一波三折过程

【Python学习笔记】记载解决Python报错HTTP Error 403: Forbidden的一波三折过程 当前进度&#xff1a;还没有解决&#xff0c;但是已经尝试了好几种办法&#xff0c;此处做个记录&#xff0c;也许能帮上忙。 本帖是整理回顾帖&#xff0c;不是教程帖&#xff0c;追求一个完美…

QT日志调试系统(前台、后台、文件查看调试信息)

通过qInstallMessageHandler获取Qt的打印信息&#xff0c;将这些打印信息存放到一个Widget中&#xff0c;实现不通过后台就能查看日志信息。 实现方法如下&#xff1a; main.cpp #include "mainwidget.h" #include <QApplication> #include <QStyleFactory…

yum的安装和使用(包含安装过程中遇到的问题及解决方法)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

2022年十月份电赛OpenMV巡线方案详细代码分析(1)

前言 &#xff08;1&#xff09;马上要进行电赛了&#xff0c;机器识别是铁定会使用到的。为了防止出现去年十月份那种特殊的巡线方案。我在此分享出OpenMV巡线方案&#xff0c;并且进行讲解和分析如何更改。 &#xff08;2&#xff09;学习本文之前&#xff0c;需要学习&#…

通过nexus3部署公司内部的私有npm仓库

简介&#xff1a; 登录时使用默认用户admin&#xff0c;密码不知道就需要找默认的&#xff0c;点击Sign in时会提示你路径&#xff0c;这里我是这样查的&#xff0c;在linux服务器上输入以下命令 ​编辑 前言&#xff1a; 准备工作&#xff0c;可能需要一台linux服务器&#x…

Jenkins报警机制的配置与Linux的使用总结

先在钉钉中添加一个机器人 在Configure System中找到机器人选项&#xff0c;并且复制webhook到网络钩子&#xff0c;然后添加机器人的编号、名称和关键词&#xff0c;然后点击测试&#xff0c;如果显示测试成功则表示配置成功&#xff0c;最后保存 再到配置中勾选顶顶机器人的定…

19.matlab数据分析插值(matlab程序)

1.简述 数据插值的计算机制 数据插值是一种函数逼近的方法。 一维插值 Y1interp1(X,Y,X1,method) 二维插值 interp2():二维插值函数。 调用格式: Z1interp2(X,Y,Z,X1,Y1,method) 其中&#xff0c;X、Y是两个向量&#xff0c;表示两个参数的采样点, Z是采样点对应的函数值。X1…

flutter开发实战-Stagger Animation实现水波纹动画

flutter开发实战-实现水波纹动画&#xff0c;使用到了交织动画&#xff0c;实现三个圆逐渐放大与渐变的过程。 一、效果图 二、实现水波纹效果 实现水波纹动画&#xff0c;使用到了交织动画&#xff0c;实现三个圆逐渐放大与渐变的过程。 交织动画 有些时候我们可能会需要一些…

一种具有改进的反向导通、击穿和开关特性的新型4H-SiC沟道MOSFET

标题&#xff1a;A New 4H-SiC Trench MOSFET With Improved Reverse Conduction, Breakdown, and Switching Characteristics 阅读日期&#xff1a;2023.07.23 研究了什么 该文提出并通过TCAD模拟研究了一种带有集成MOS通道二极管&#xff08;MCD&#xff09;的SiC MOSFET&a…

性能测试Ⅵ(总结)

locust&#xff1a;是基于Python语言的性能测试工具&#xff0c;它是基于协程的思想来进行设计的。Python语言是没有办法利用多核的优势&#xff0c;所以了Python为了解决这个问题&#xff0c;设计了协程&#xff0c;作为协程的任务&#xff0c;遇到IO堵塞就立刻切换。 生命是协…

FFmpeg5.0源码阅读—— avcodec_send_frame avcodec_receive_packet

摘要&#xff1a;本文主要描述了FFmpeg中用于编码的接口的具体调用流程&#xff0c;详细描述了该接口被调用时所作的具体工作。   关键字&#xff1a;ffmpeg、avcodec_send_frame、avcodec_receive_packet   读者须知&#xff1a;读者需要了解FFmpeg的基本使用流程&#xf…

AQS概述

基本介绍 队列同步器AbstractQueuedSynchronizer&#xff08;以下简称同步器&#xff09;&#xff0c;是用来构建锁或者其他同步组件的基础框架。 使用了一个int成员变量&#xff08;volatile int state&#xff09;表示同步状态&#xff0c;通过内置的FIFO队列来完成资源获取…

【NLP】如何使用Hugging-Face-Pipelines?

一、说明 随着最近开发的库&#xff0c;执行深度学习分析变得更加容易。其中一个库是拥抱脸。Hugging Face 是一个平台&#xff0c;可为 NLP 任务&#xff08;如文本分类、情感分析等&#xff09;提供预先训练的语言模型。 本博客将引导您了解如何使用拥抱面部管道执行 NLP 任务…

不写代码开启Restful服务

1 前言 很久没有写文章了&#xff0c;不管什么原因&#xff0c;总觉得心里还是觉得有点焦虑&#xff0c;不看看书写点东西就有莫名的焦虑&#xff0c;仿佛只有忙起来才能忘记焦虑。虽然我也知道更重要的是思考方向&#xff0c;但是就像走路&#xff0c;不出发随着时间的流逝&am…

MacBook外接键盘修改键位

众所周知&#xff0c;MacBook的键盘和Windows差别很大&#xff0c;比如我们最常用的ctrlcv在Mac下是commandcv…而外接键盘往往是Windows布局&#xff0c;因此如何修改外接键盘键位就是一件很重要的事情&#xff01; 首先&#xff0c;我们要知道Win键在Mac系统中是多余的&…

微服务一 实用篇 - 5.分布式搜索引擎(ElasticSearch基础)

《微服务一 实用篇 - 5.分布式搜索引擎&#xff08;ElasticSearch基础&#xff09;》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《微服务一 实用篇 - 5.分布式搜索引擎&#xff08;ElasticSearch基础&#xff09;》 《微服务一 实用篇 - 5.分布式搜索…

mysql悲观锁与乐观锁、死锁

mysql悲观锁与乐观锁、死锁 乐观锁的缺点 这个策略源于 mysql 的 mvcc 机制&#xff0c;使用这个策略其实本身没有什么问题&#xff0c;主要的问题就是**对数据表侵入较大&#xff0c;我们要为每个表设计一个版本号字段&#xff0c;然后写一条判断 sql 每次进行判断&#xff…

k8s Service网络详解(一)

有关K8s网络的几个概念 Service&#xff1a;服务 Endpoint&#xff1a;端点 Ingress&#xff1a;和Service类似&#xff0c;基于OSI&#xff08;Open System Interconnection&#xff09;网络模型的七层协议数据&#xff08;如HTTP&#xff09;的转发 Kube Proxy&#xff1…