【超详细】Linux内核树的构建
本文档因为过于繁琐,现已弃用。最新教程请见【Linux内核树】五步构建。
目录
- 前言
- 检查是否已有构建好的内核树
- 下载内核源码
- 开始构建
- 1. 安装必须的包
- 2. 生成配置文件
- 3. 开始make
- 附录:可能的错误
- 错误一:No rule to make target
- 错误二
- 错误三
- 参考链接
前言
想要编写自己的Linux
驱动(driver),第一步是要先构建Linux内核进程树
。
检查是否已有构建好的内核树
Ubuntu
默认是不配备 建议先确认电脑上是否已经有构建好的内核树(别在花费了几个小时之后才发现…)。内核树通常所在的具体目录为/lib/modules/<系统版本>
。
可以使用uname
查询系统版本:
uname -r
那么如果我的电脑上已经有构建好的内核树的话,所在目录就应该是/lib/modules/5.11.0-40-generic
。
目录下的具体样子大概是下图这样
下载内核源码
1. 内核版本的选择
如何选择将要构建的内核进程树的版本,要看编写的驱动想要运行在哪个版本的Linux内核
上。
比如,我想编写一个能运行在我的内核上的驱动(driver),首先要做的是查看自己的内核版本。
方法是运行uname
命令
uname -r
这里显示的5.11.0-40-generic
可能有点让人感到模糊不清。
更精确的方法是去查看/usr/src/<uname -r显示的版本>/Makefile
文件里开头的版本号。比如我这里是
所对应的版本就是5.11.22
。
如果/usr/src
里有多个文件,随意打开一个就行,其中的Makefile
开头的版本号一般情况下是一致的。
2. 下载源码
在这里的官网下载源文件,将解压的文件移到/usr/src/
目录下,这是后续操作的所在目录。
https://mirrors.edge.kernel.org/pub/linux/kernel/
(注意,要下载linux
开头的,而不是ChangeLog
开头的)
其他方法
运行下面的命令自动下载
sudo apt-get install dpkg-dev<pre name="code" class="cpp">$ apt-get source linux-image-$(uname -r)
开始构建
1. 安装必须的包
首先,确保已经安装这些包(这是为了下一步的menuconfig
所准备的,如果使用不同的config
方法,需要的包可能有所不同;dwarves
是为了make bzImage
准备的)。
ncurses-dev
,flex
,bison
,libelf-dev
,libssl-dev
sudo apt-get install ncurses-dev flex bison libelf-dev libssl-dev dwarves
(注意:这里列出的是Ubuntu系统中包的名字。在其它系统中,这些包可能有不同的名字,请各位自行检索。)
2. 生成配置文件
正式构建前,需要先生成配置文件,来指定构建出的系统的各项属性。
这里使用menuconfig
。
make menuconfig
(还有很多其他的生成配置文件的方法,如oldconfig
,menuconfig
,xconfig
。每种需要另外安装的包可能有所不同。)
如果出现任何报错,安装对应的包即可。
如果没有任何问题,将显示下面的UI
。
不用做改变,按两下Esc
退出即可。(如果弹出提示框选择Yes
即可。)
(如果想了解每种选项的作用,可以参照这篇文章:Make Menuconfig详解 (配置内核选择)- CSDN)
3. 开始make
!!!注意:开始make
前请先查看附录:错误二,保证系统内存等资源足够,防止花费了很长的时间结果因为内存不够而出错,导致从头重来。
运行make
命令(-j
命令可开启并发)
(并发能够提速不少。并发数通常最多可以是CPU
数量的两倍。在-j
后面添加数字可以指定并发的数量上限,不指定的话默认是无上限,但是亲测容易死机…)
make -j 12
等待构建完成(不开启并发的情况下过程可能持续1到多小时,因此建议使用-j
命令并发提速)。
编译完成后再ls
会有一点不同。
(编译前)
(编译后)
然后运行
make bzImage
如果出错提示说
make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'. Stop.
运行这行命令就行。(具体见附录:错误一)
scripts/config --set-str SYSTEM_TRUSTED_KEYS ""
成功后会显示如下信息
之后再运行
make modules
结束时呈现如下结果
最后运行
make modules_install
结束时情况如下图
成功后,在系统根目录下的/lib/modules
里,会出现一个新的目录/lib/modules/5.11.0-41-generic/
。
之后要编译模块文件时,就需要进入/lib/modules/5.11.0-41-generic/
目录下的build
目录中。(然后我就发现自己电脑上本来已经有一个generic文件夹了。。。)
至此,就大功告成了。重启系统即可。
附录:可能的错误
错误一:No rule to make target
报错信息:
make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'. Stop.
解决方法
打开
.config
文件vim .config
把
CONFIG_SYSTEM_TRUSTED_KEYS
的值改为空字符串""
。(感谢@王小多在这篇文章下的评论:如果文件中这一行被注释了:
# CONFIG_SYSTEM_TRUSTED_KEYS not set
,也需要解除注释,手动设为空字符串才行。否则sysnconfig
仍会问你要不要设置。)CONFIG_SYSTEM_TRUSTED_KEYS=""
设置的结果如下
(有的小伙伴问我这里的vim是怎么设置的,具体的配置我放在了这篇文章里【vim】个性化配置vim(.vimrc))然后重新运行
make
命令即可。
解决方法二
也可在终端中运行下面的命令来达到相同的效果。
scripts/config --set-str SYSTEM_TRUSTED_KEYS ""
错误二
错误信息
内存不够
解决方法
解除一些资源使用限制。
使用ulimit
命令可以查看当前的资源使用限制。
ulimit -a
通过运行下面的命令来解除限制
# -s 对应 stack size, -m 对应 max memory size, ..(更多内容在图里倒数第二列中查找)
ulimit -s unlimited -m unlimited -v unlimited
解除后的结果
仍然不行的话可以尝试扩展内存大小。
错误三
报错信息:
BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
解决方法
下载dwarves
sudo apt install dwarves
参考链接
Linux内核剖析
内核错误: No rule to make target ‘debian/canonical-certs.pem‘, needed by ‘certs/x509_certificate_list‘ - CSDN
Compiling the kernel 5.11.11 - askubuntu
linux 内核源码树的建立
linux内核树的建立
https://blog.csdn.net/liuer2004_82/article/details/50650943
https://os.51cto.com/art/202105/663841.htm
https://blog.csdn.net/u010629326/article/details/73196311
Linux模块详解 - iteye
BuildYourOwnKernel - Ubuntu
【超详细】Linux内核树的构建相关推荐
- 超详细Linux 安装Mysql
超详细 Linux 安装Mysql 1.下载方式 1.1 Linux 内部下载(不推荐,比较慢) 1.2 本地下载,上传到linux 2.解压 3.创建MYSQL⽤户和⽤户组 4.配置my.cnf 5 ...
- Linux 内核树编译
前言 其实我现在还不懂内核树是个什么东西? 为什么写驱动要编译内核树,不是只用头文件就好了吗? 反正昨天是搭建好了驱动开发环境(仅仅是安装了对应的操作系统和一些工具),现在记录一下编译内核的过程. 编 ...
- linux内核编译最详细,Linux内核编译详细教程,linux内核编译
Linux内核编译详细教程,linux内核编译 尝试编译下Linux-kernel 4.14.14,使用Ubuntu 16.04 64位 系统. kernel-4.14.14 内核文件约96MB,解压 ...
- linux内核使用scons构建,scons安装和使用
scons安装和使用 1. scons是神马? scons是linux下的自动构建工具,类似cmake. 2. 安装 wget http://prdownloads.sourceforge.net/s ...
- linux系统发育树的构建步骤,手把手教你用 Fast Tree 快速构建序列进化树
常见的建树方法有:贝叶斯法(Bayesian),最大似然法(Maximum likelihood,ML),最大简约法(Maximum parsimony,MP),邻接法(Neighbor-Joinin ...
- linux内核使用scons构建,如何使用scons进行交叉构建
我正在尝试创建最简单的可想象的SConstruct文件,用于交叉编译程序. 我尝试了不同的设置,最新的SConstruct文件在这里: env_options = { "CC" : ...
- linux教程超详细,linux搭建node超详细教程
linux 环境搭建详细步骤 1.访问官方网址:https://nodejs.org/en/download/ 2.选择和你服务器版本相关的压缩包,复制下载链接 3.服务器登录ssh,(这里我用的服务 ...
- linux系统发育树的构建步骤,megacc构建进化树.mao文件生成方法
基于linux版megacc构建系统进化树命令如下: /biosoft/MEGA/megacc -a .mao -d fasta -o ./ -a输入的是构建进化树的参数 .mao文件 -d输入的是多 ...
- linux系统发育树的构建步骤,分子进化树构建的简要步骤(以蛋白为例)
PhyML利用氨基酸序列建树步骤 (核酸建树也可以作为参考) 前言:本文阅读对象适合建树新手,生物信息学高手请勿嘲笑,其中有什么错误还恳请指点.为什么要建树及其你要解决什么问题这里不做讨论,只是一个纯 ...
最新文章
- arduino下载库出错_【arduino】DIY音乐播放器,arduino播放wav音乐,TRMpcm库测试及使用...
- JavaScript学习杂记--对象和数组
- 【数据库的备份与还原】 .
- 微软私有云解决方案_微软发布电信云平台 ,互联网巨头争夺5G网络商机
- dao层和service层和control_最受欢迎Java数据库访问框架(DAO层)
- vue学习日志-过滤器
- QQ文件上传不了:什么年代了,还使用简单的关键词过滤,智能一点可好
- 企业微信API群机器人配置
- 如何解决切换双系统导致windows没声音的问题
- 【实操】下载在线m3u8视频为本地mp4
- windows 打印机管理机制(任务后台等待机制)
- 相当全的JS及.NET正则表达式语法
- BIOS硬盘模式更改为AHCI模式,及更改后win10蓝屏的解决办法
- 泛型在Android中的应用
- Vert.x(vertx) 实现TCP服务
- 六、cocos2dx-效果(Effect)
- 鸿蒙掉不掉凤羽符,装备各部件灌注符的获取方式(和肝燕面基成功,给萌新的福利)...
- constraint PK_LDBACKUPTEXTINFO primary key (xx) using index tablespace lisi
- ACM2019春季训练- How Many Tables HDU - 1213(初识并查集+转倚天屠龙记故事)
- B1019(数字黑洞)
热门文章
- 跟驰理论 matlab,[经济学]第5章 跟驰理论.ppt
- 企业APP联盟,抢占企业移动互联网时代营销制高点
- 微信抢红包的方案_微信抢红包方法图文详解
- Vue点击选中(多选)选中右上角有三角形
- 摩拜单车拉勾网php,Python拉勾网数据采集与可视化
- doom主程序员相关文章
- Android Studio项目打包:3、Android Studio生成的apk究竟在哪里?(非正式打包)
- java 代码生成nc 格式的文件,并且读取出nc格式里面的数据(已提供代码)
- 升级后清理Ubuntu Grub引导菜单
- 转载—左耳朵耗子《程序员如何把控自己的职业》