Linux内核及补丁编译

一、源码下载

1、查看当前linux内核版本

uname -r

2、获取对应版本的linux源码

方式1:源方式下载

sudo apt search linux-source  ##找到对应版本的linux-source
sudo apt install linux-source-5.4.0 ##以5.4.0举例
mkdir ~/Projects
cd ~/Projects
sudo cp /usr/src/linux-source-5.4.0.tar.bz2 ./

安装完成后,源码将保存在/usr/src/linux-source-5.4.0.tar.bz2

方式2:官方代码库下载 Linux Kernel

找到自己需要版本的代码压缩包,下载

mkdir ~/Projects
cd ~/Projects
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.tar.gz

二、解压源码

解码源方式下,解压压缩包

cd ~/Projects
tar jxvf -f linux-source-5.4.0.tar.bz2

官方代码库方式下,解压压缩包

mkdir ~/Projects
tar -zxvf linux-5.4.tar.gz
mv linux-5.4 linux-5.4.0

三、编译准备

sudo apt install gcc make libncurses5-dev libssl-dev build-essential openssl bison flex libelf-dev libelf-devel elfutils-libelf-devel

注意:最后三个elf的开发包安装成功其中之一即可

四、补丁patch

1、下载补丁

以squashfs的一个patch为例 9996-fs_squashfs_improve_squashfs_error_resistance.patch

浏览器下载这个patch文件放到~/Projects/linux-5.4.0/目录下

2、补丁安装

cd ~/Projects/linux-5.4.0/
cat 9996-fs_squashfs_improve_squashfs_error_resistance.patch | patch -p1

至此,补丁安装完成

五、内核编译

1、代码清理

make mrproper  #删除所有的编译生成文件、内核配置文件

或者

make clean  #删除大多数的编译生成文件,但是会保留内核的配置文件.config

2、内核配置

make oldconfig #现有的内核设置文件基础上建立一个新的设置文件,只会向用户提供有关新内核特性的问题

如果没有特别配置的,直接一路enter

3、代码编译

make bzImage -j 8 #编译内核
make modules -j 8 #编译扩展模块

或者

make -j 8 #编译内核和扩展模块

等待编译完成

六、内核安装

make modules_install #安装扩展模块
make install #安装内核

查看是否安装完成

> grep menuentry /boot/grub/grub.cfg
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
menuentry_id_option=""
export menuentry_id_option
menuentry 'Ubuntu, with Linux 5.4.275' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.275-advanced-ec3e91d6-c1a7-4843-b385-319a8ab2a229' {
menuentry 'Ubuntu, with Linux 5.4.275 (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.275-recovery-ec3e91d6-c1a7-4843-b385-319a8ab2a229' {
menuentry 'Ubuntu, with Linux 5.4.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-26-generic-advanced-ec3e91d6-c1a7-4843-b385-319a8ab2a229' {
menuentry 'Ubuntu, with Linux 5.4.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-26-generic-recovery-ec3e91d6-c1a7-4843-b385-319a8ab2a229' {

七、启用新内核

1、修改grub配置

/etc/default/grub的 GRUB_DEFAULT=那一行修改如下

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.4.275"

2、更新grub

sudo update-grub

八、重启系统

sudo reboot
uname -r #查看内核版本

Linux内核及补丁编译的更多相关文章

  1. Linux 内核配置和编译

    Linux 内核配置和编译 一.配置内核 (1). 为什么要配置内核 1. 硬件需求 2. 软件需求 选出需要的,去掉不要的 (2). 如何配置内核 1. make  config 基于文本模式的交互 ...

  2. Linux内核配置、编译及Makefile简述

    Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核. ...

  3. Linux内核-模块编译和安装

    我安装Ubuntu的时候是没有安装源码的,在没有安装源码前 /usr/src/ 目录下是只有两个包含内核的头文件的文件夹的: 我的内核版本是: 所以接下来就是先安装内核源码: 执行后,/usr/src ...

  4. linux内核系列(一)编译安装Linux内核 2.6.18

    1.配置环境 操作系统:CentOS 5.2 下载linux-2.6.18版本的内核,网址:http://www.kernel.org 说明:该编译文档适合2.6.18以上的Linux内核版本,只需所 ...

  5. Xilinx-Zynq Linux内核源码编译过程

    本文内容依据http://www.wiki.xilinx.com网址编写,编译所用操作系统为ubuntu 14 1.交叉编译环境的安装配置 1)http://www.wiki.xilinx.com/I ...

  6. linux内核裁剪及编译可加载模块

    一:linux内核裁剪: 1:编译内核源码: 今天的重点内容是内核驱动的编写,在编写驱动之前首先的了解linux内核源码,linux主要是由五个子系统组成:进程调度,内存管理,文件系统,网络接口以及进 ...

  7. (二)linux内核准备及编译

    1. 内核下载地址 linux内核网站,可以拿到最新的和最近的稳定版本内核: https://www.kernel.org/ 通过网站下载压缩包后解压或者使用git下载到本地: git clone h ...

  8. linux内核源码编译加制作rpm包

    本章主要讲解实际操作步骤,具体理论知识可以自行百度 linux内核官网下载:https://cdn.kernel.org/pub/linux/kernel/   (如图) 根据官网发布的信息分析,目前 ...

  9. [国嵌攻略][099][Linux内核配置与编译]

    为什么要配置内核 基于硬件和软件的需求选出需要的功能,去掉不要的功能. 内核配置的方法 make config:基于文本交互的配置. make menuconfig:基于图形菜单的配置. make m ...

  10. 升级 Linux 内核版本(编译源代码)

    升级内核版本(自己编译源码) 从 linux 官网 https://www.kernel.org/ 下载内核源码 解压 tar -xvf linux-4.16.8.tar.xz cd linux-4. ...

随机推荐

  1. RabbitMQ 3.7.9版本中,Create Channel超时的常见原因及排查方法

    在RabbitMQ 3.7.9版本中,Create Channel超时的常见原因及排查方法如下: 常见原因 网络问题: 网络延迟或不稳定可能导致通信超时. 网络分区(network partition ...

  2. ARM平台实现Docker容器技术

    什么是Docker? (1)Docker的架构   Docker是一个开源的应用容器引擎,让开发者可打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上, ...

  3. 将本地Unity项目上传到GitHub

    标题:如何将本地Unity项目上传到GitHub教程 问题背景: 说来惭愧,玩程序这么多年,一直在领导们手下开发,自己有什么需要记录的都在本地或者博客园随手记记,有什么需要测试或者自己研究的东西,也都 ...

  4. c# 对DataTable数据筛选后进行修改操作

    记录一次对DataTable中的数据筛选去重后,然后对数据进行修改! foreach (DataRow dr in dt.Rows) // 便利dt { if (StringUtil.isNotNul ...

  5. Mac 版本10.15.4 安装 telnel工具

    下载脚本 mac新版本安装telnel发生的变化,进入下面的链接,右键另存为,保存到桌面 https://raw.githubusercontent.com/Homebrew/install/mast ...

  6. [oeasy]python0086_ASCII_出现背景_1963年_DEC_PDP系列主机_VT系列终端

    编码进化 回忆上次内容 上次 回顾了 字符编码的新陈代谢 ibm 曾经的EBCDIC 由于 字符不连续 导致 后续 出现无数问题 随着 网络的发展 数据交换的 需要 原来的小隐患 现在 产生了 巨大问 ...

  7. oeasy教您玩转vim - 76 - # Session会话

    ​ 会话session 回忆组合键映射的细节 上次我们定义了一系列的复合键 主要是和ctrl键一起 快速跳转window窗口 map <c-j> <c-w>j map < ...

  8. JMeter 逻辑控制之IF条件控制器

    逻辑控制之IF条件控制器 测试环境 JMeter-5.4.1 循环控制器介绍 添加While Controller 右键线程组->添加->逻辑控制器->While控制器 控制器面板介 ...

  9. UE5 打不开

    在游戏开发中,出现了UE打不开的情况 初步推测,新增了接口Attacker, 而我们的DefaultPawn可能一下子实现了两个接口造成的 而这两个接口都在一个插件里,一个是c++实现的,一个是蓝图实 ...

  10. Mac端MySQL安装教程

    Mac端: 1.安装 **        首先进入官网:**https://dev.mysql.com/downloads/mysql/ 根据自身情况是M系列芯片(ARM版)还是Intel系列芯片(x ...