Linux学习之内核编译
前言
本次学习Linux系统内核编译,任选4.x系列稳定版或长期版本Linux内核源码,进行源码获取、解压与编译、安装等过程的学习。
注意:一定要保证虚拟硬盘足够大,大概需要30G空闲虚拟硬盘!!!如果不足,请首先扩容虚拟机硬盘大小!!!
本博客原创,转载请注明。
完成本次学习参考博文:
https://blog.csdn.net/qq_36290650/article/details/83052315
本文原创,创作不易,转载请注明!!!
本文链接
个人博客:https://ronglin.fun/?p=167
PDF链接:见博客网站
CSDN: https://blog.csdn.net/RongLin02/article/details/114759485
准备工作
本地配置
主机:联想Y7000P;64位windows10;CPU:i7-9750H;显卡:GTX 1660 Ti;内存:16G
虚拟机:Ubuntu 18.04 LTS;硬盘100G;内存4G;64位
Linux内核:Linux version 5.4.0-66-generic
查看系统版本命令:sudo lsb_release -a
查看Linux内核版本:cat /proc/version
Linux内核下载
Linux内核下载版本:longterm: 4.4.261 2021-03-11
Linux内核网站:Linux内核
从官网踩好点之后,进入Ubuntu下载Linux内核。
将Linux内核文件下载到/code/kernel文件夹下,下载的路径可以随意
创建并进入kernel文件夹,输入wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.261.tar.xz
下载Linux-4.4.261内核
wget是Linux中的一个下载文件的工具, 用法是 wget [选项]… [URL]… ,直接在wget后边接一个下载链接就可以把文件下载到当前文件夹,更多关于wget用法可以查看wget --help
。
关于下载网站的获取,在官网对应Linux内核后面的[tarball],鼠标右键,复制链接,得到的链接就是下载该内核的链接。
然后输入tar -xavf linux-4.4.261.tar.xz
解压文件,至此,Linux-4.4.261内核下载完毕。
Linux内核编译安装
安装所需的工具
一共需要11个依赖工具,分别是:
gcc make libncurses5-dev openssl libssl-dev build-essential pkg-config libc6-dev install bison install flex install libelf-dev
我们用sudo apt-get install
分别安装它们,输入:
sudo apt-get install gcc make libncurses5-dev openssl libssl-dev build-essential
sudo apt-get install pkg-config libc6-dev bison flex libelf-dev
等待Ubuntu安装完成。
配置与编译内核
配置文件的获取
配置获取之前,不论是否编译过内核,都推荐先在Linux-4.4.261内核目录下执行一次sudo make mrproper
命令清理一次。
若之前有编译过内核源码,则需要先执行 make mrproper 命令,对之前的相关操作进行清理工作,以便重新开始编译内核
有关 make mrproper 和 make clean 命令
make mrproper
命令会删除所有的编译生成文件、内核配置文件(.config文件)和各种备份文件,所以几乎只在第一次执行内核编译前才用这条命令。
make clean
命令则是用于删除大多数的编译生成文件,但是会保留内核的配置文件.config,还有足够的编译支持来建立扩展模块。所以你若只想删除前一次编译过程的残留数据,只需执行make clean命令。
总而言之,make mrproper删除的范围比make clean大。
有关更多信息,可以在Makefile
中查看,在Linux-4.4.261内核目录下,输入less Makefile
即可查看。*
现在搞配置文件:
将系统Kernel的配置文件转移到当前内核目录下。
进入/boot文件下,找到配置文件并将其复制到Linux-4.4.261内核目录下:
cd /boot
ls
sudo cp config-5.4.0-66-generic ~/code/kernel/linux-4.4.261/.config
简单解释一下cp指令,cp指令的用法基本格式是cp [options] source dest
,source是想要复制的目标文件(夹),dest是目标文件夹,更多有关cp的用法,请见cp --help
,"~“表示用户主目录,所以上条指令意思为:把当前目录下的一个叫"config-5.4.0-66-generic"的文件复制到用户主目录下的/code/kernel/linux-4.4.261文件夹下,并改名为.config。
然后 在Linux-4.4.261内核目录下,输入sudo make menuconfig
,直接左右键,跳转至"Exit”,即所有都为默认选项。
除了这些获取配置文件之外,配置内核的时候还有很多配置方法,比如说make config(基于文本的为传统的配置界面)、make oldconfig(如何只想在原来内核配置的基础上修改一部分,则会省去很多麻烦)、make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)、make menuconfig(基于文本选择的配置界面,字符终端下推荐使用),以上4种配置方式的目的都是在源码的顶层目录下面生成一个.config文件
编译内核
*在配置好所需内核功能之后 ,即可执行 make 命令进行内核编译
在Linux-4.4.261内核目录下,直接执行 sudo make
编译内核。
sudo make
Two Thousand Years Later
大概一个半小时,make完毕,完毕之后还要进行一些操作
安装缺省配置的内核模块
在Linux-4.4.261内核目录下,输入
sudo make modules_install
make modules是编译模块,很多驱动还有功能在选的时候选成M的都是modules,不过直接make,不加任何参数,就是make all,包含make modules。不用额外加此make,但是在安装的时候make install只是安装bzimage,Systemmap。没有把modules安装好,还要额外的make modules_install,把模块放到/lib/modules文件夹一个和内核名一样的文件夹下,并且运行depmod生成模块依赖关系文件,系统启动时加载模块就是从dep里面读取信息加载模块。
安装内核
我们要安装编译好的内核,在Linux-4.4.261内核目录下,输入
sudo make install
不一会儿,安装好了,接下来,启用内核作为引导:
sudo update-initramfs -c -k 4.4.261
注意后边的 4.4.261
要改为对应自己上边安装好的Linux内核版本
initramfs ,一个新的 initial RAM disks 模型
更多详细请看: http://linuxdevices.com/articles/AT4017834659.html
更新 grub
输入 sudo update-grub
,更新一下grub
有关grub的原理请见博客:
https://blog.csdn.net/weijitao/article/details/52914559
见证成功
完成以上繁琐且耗时的操作之后,我们来看Linux-4.4.261内核是否安装成功
输入reboot
,重启Ubuntu并且选择新内核。.
重启,狂摁 Esc ,进入GRUB,选Ubuntu高级选项。然后我们就能看见安装的内核了哇!!!
回车进入,开机需要一段时间,登录用户后,在终端输入uname -r
查看内核。
同时安装完内核之后,虚拟机的增强模式就没法用了,需要重新安装,点击桌面的光盘,找到右上方的 运行软件,点击,重启就OK了
emmmmmm,终于成功了 =w=
Linux学习之内核编译相关推荐
- Linux 2.6内核编译与配置安装升级
Linux系统更新了很多版本更新,我本人认为Linux 2.6内核在Linux系统系列里很好使的文件系统,在此向大家推荐.如今技术不断更新,各种使用文件都已经淘汰.我认为还是有很不错的如Linux 2 ...
- 【linux系列】内核编译最新教程+常见问题总结
[linux系列]内核编译最新教程+常见问题总结 编译环境 环境准备 编译准备 修改配置 linux 提供的三种配置命令 使用 gconfig 配置 编译内核 安装内核 载入新内核 检查内核 常见问题 ...
- linux 2.6内核编译_03_配置选项注解
linux 2.6.15.6内核配置(unfinished) http://www.builder.com.cn/2007/1011/545597.shtml 注意: 不同的内核版本配置选项(或组织) ...
- Linux驱动(8)--内核编译与配置
内核编译与配置 1. Menuconfig 2. Kconfig 3. Makefile 4. 内核配置与编译的流程 5. 注意 1. Menuconfig Linux编译器是通过.config文件确 ...
- 【imx6ull-alientek-emmc】linux交叉编译环境 + 内核编译
开发板:imx6ull-alientek-emmc,正点原子的min板子 困惑了好久,第一次搞通,记录一下,希望之后能知其所以然 目录 一.交叉编译环境 1.选择交叉编译器 2.解压 3.配置环境变量 ...
- linux 2.4内核编译,linux 2.4内核编译详解
2.4内核编译详解 内核简介 内核,是一个操作系统的核心.它负责管理系统的进程.内存.设备驱动程序.文件和网络系统,决定着系统的性能和稳定性. Linux的一个重要的特点就是其源代码的公开性,所有的内 ...
- Linux+RTAI实时内核编译
如今Linux系统正被广泛用于各种嵌入式实时系统中,但由于Linux系统本身不支持硬实时扩展,故限制了其发展.由于Linux + RTAI的双内核方式构成的实时系统方案具有良好性能,本文将简述如何构建 ...
- Linux学习笔记---初次编译Uboot系统
在初次编译Uboot系统时,是按照正点原子开发指南操作的,但是开发指南上讲得不是很详细,又看了一遍视频教程才搞清楚完整步骤,为了方便学习,就将详细步骤记录下来,以便以后参考. Uboot初次编译 1. ...
- Linux学习:gcc 编译其他常用参数
(1)-v 查看版本号 (2)-o 指定可执行程序的名字 (3)-I 指定头文件路径 (4)-L 指定库的路径 (5)-l 指定库名字(掐头去尾) (6)-g gdb 调试的时候需要加 (7)-D 在 ...
最新文章
- 什么是防火墙,真正意义上的防火墙
- Crash常见异常总结
- 灵活而又可怕的params参数数组
- 2016-05-12 SAP UI5事件注册的问题研究
- 升级android 6.0系统
- 小程序 bindtouchmove 使用拖动按钮 页面跟着滑动并拖动卡顿感 问题
- Linux源码安装pgadmin4,Linux 服务器部署 PgAdmin 4 Server
- 搭建linux环境的tomcat服务器
- 是时候该了解一波Protocol Buffers了[Java]
- 浅谈Object Pascal的指针
- 双向链表基本实现简单贪吃蛇
- 循序渐进之Spring AOP(5) - 创建切面
- excel设置行高和列宽_Excel使用小技巧-Excel里设置列宽和行高
- OpenGL Mathematics (GLM)
- 企业征信(尽职调查):采集数据网站一览表
- 【CicadaPlayer】初始化ffmpeg及设置ffmpeg日志
- 16位汇编语言第二讲系统调用原理,以及各个寄存器详解
- Android各版本特性
- 计算机 英语 文献翻译,计算机类外文文献翻译_1.doc
- 中职计算机应用专业课堂教学,谈谈中职计算机应用基础课程教学中翻转课堂研究...
热门文章
- 【打卡】糖尿病遗传风险检测挑战赛
- f分布表完整图a=0.01_SQL Server从入门到精通——学习笔记01(数据库基础知识篇)...
- 车路协同到底要协同什么?
- vulnhub之hacksudo FOG
- linux下eclipse基本使用教程,linux eclipse 使用教程
- python短时傅里叶变换_python中的短时傅里叶变换
- 思否 CEO 高阳受邀出席中国区块链产业高峰论坛
- Vmware Tools安装出错的解决方法
- Android设置应用程序默认语言
- 【android11】设置-应用-默认应用相关修改