内核编译指南

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

你可能感兴趣的:(linux-kernel)