共计 2735 个字符,预计需要花费 7 分钟才能阅读完成。
从 0——1 的内核编译
当你接触到内核,你在真正的开始意识计算机
每次萌生入手玩内核的想法,但总是因为各式各样的花式借口放弃了,遂打算一点一点的记录下学习内核的过程,并将遇到的问题和大家分享。
如果你也想退出进来!欢送私信我,大家一起玩转内核 !
为防止出错,我是从最开始的虚拟机开始部署,用的是 Linux Ubuntu 20.04.2(最新出炉~~~)。但其实这并不障碍咱们,在任何的 Linux 零碎上都能够通用的解决内核编译的从 0 到1。
开整
- 下载内核源码
- 装置依赖
- 解压源码
- 配置内核
- 编译和装置
- 启用内核为疏导
Let’s Do It
下载内核源码
官网副品
内核源码下载条传送门:[kernel.org](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/refs/).
命令行下载:
wget https://git.kernel.org/torval…*.tar.gz
(*** 代表的是你抉择 Linux 的版本号)
正版尽管好,然而国内的下载速度的确是真的慢,换一下清华的源,速度会快很多!
==换源应该在下载源码前口头==
vim /etc/apt/sources.list
vim 关上软件源,将原文件做个备份,而后将文件替换为上面内容,应用 TUNA 的软件源镜像。
# 默认正文了源码镜像以进步 apt update 速度,如有须要可自行勾销正文
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
清华的 kernel 源码 shell 下载据点:
wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v4.x/linux-4.5.tar.gz
装置依赖
当你有了内核压缩包后,请将它视为一个软件,如果想让这个软件在你的机器上运行起来,那么先移步装置依赖。
须要的依赖命令:
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
解压源码
解压内核源码包
依据本人的版本解压哦!!!
tar xvzf linux-*.tar.gz
配置内核
重头戏
解压后进入解压后的文件 cd linux-*
为了避免配置过程有纰漏,往往先备份一份.config 配置文件
cp /boot/config-$(uname -r) .config
就这样,你能够在 .config 上 Do it you want to do!
当你有目标的配置内核时,勾销和开启内核中的性能是你的一个外围诉求,所以利用配置工具 menuconfig 将拷贝好的配置文件来可视化的抉择你的更改。
(如果你是刚动手,我给你的意见是默认的看一下抉择退出。这一步不可疏忽!!!)
shell 下的 menuconfig 配置。
命令行
make menuconfig
最初,记得退出!!!退出找 Exit 选项喽!
编译和装置
编译内核的命令很简略,当你在命令行上敲下 make 时,它就开始编译内核了。
但这太慢了,要想加快速度,多线程编译必然进步编译效率
make -j8
搞定编译,你除了发现一大堆的二进制.o 文件,有两个文件分外关注一点。
./vmLinux
./arch/x86/boot/bzImage
vmLinux 为 gdb 调试所需的,bzImage 为大内核文件映像。
这对内核编译没有什么帮忙,只在调试内核时有用。
这块当你遇到了相干问题,请来找找看。
但编译过程中并不是一帆风顺,你可能会遇到一些问题。
我在过程中遇到的:
- Makefile 执行过程中出错:make: * No rule to make target `‘, needed by xxx. Stop.
这阐明 makefile 在编译过程中找不到相干的文件。
遇到这个问题,你能够间接关上 .config 配置文件。对,就是下面你拷贝的那个!找到相关联的指定依赖,而后残暴的把它删除掉,因为配置过程中 makefile 找不到相干的文件,那就让它消失掉吧。
如我遇到的是:
CONFIG_SYSTEM_TRUSTED_KEYS=”certs/rhel.pem”
- staging: wilc1000: remove wilc1000_spi_ops as it is not used
这个问题,会导致报错!
寓意是它定义了构造体,但齐全没有应用!
既然它通不过,那只能挥泪自刀了。
找到出处,这是我的报错代码文件。
/drivers/staging/wilc1000/wilc_spi.c
找到文件,正文~ or 删除~
//static const struct wilc1000_ops wilc1000_spi_ops;
往往内核编译,大多是为了装置零碎。那么持续将编译后的零碎支棱起来。
命令行
make modules_install
make install
完结,重启,抉择,新零碎诞生。
内核编译整体顺下来,其实一点都不简单,感激 kernel 的开发者们帮忙简化内核编译,源码装置也乐趣颇多。