乐趣区

关于linux-kernel:内核编译指南

从 0——1 的内核编译

当你接触到内核,你在真正的开始意识计算机

每次萌生入手玩内核的想法,但总是因为各式各样的花式借口放弃了,遂打算一点一点的记录下学习内核的过程,并将遇到的问题和大家分享。

如果你也想退出进来!欢送私信我,大家一起玩转内核 !

为防止出错,我是从最开始的虚拟机开始部署,用的是 Linux Ubuntu 20.04.2(最新出炉~~~)。但其实这并不障碍咱们,在任何的 Linux 零碎上都能够通用的解决内核编译的从 01

开整

  1. 下载内核源码
  2. 装置依赖
  3. 解压源码
  4. 配置内核
  5. 编译和装置
  6. 启用内核为疏导

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 为大内核文件映像。

这对内核编译没有什么帮忙,只在调试内核时有用。


这块当你遇到了相干问题,请来找找看。

但编译过程中并不是一帆风顺,你可能会遇到一些问题。

我在过程中遇到的:

  1. Makefile 执行过程中出错:make: * No rule to make target `‘, needed by xxx. Stop.

这阐明 makefile 在编译过程中找不到相干的文件。
遇到这个问题,你能够间接关上 .config 配置文件。对,就是下面你拷贝的那个!找到相关联的指定依赖,而后残暴的把它删除掉,因为配置过程中 makefile 找不到相干的文件,那就让它消失掉吧。

如我遇到的是:
CONFIG_SYSTEM_TRUSTED_KEYS=”certs/rhel.pem”

  1. 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 的开发者们帮忙简化内核编译,源码装置也乐趣颇多。

退出移动版