Pokyux's Blog
Pokyux's Blog

Linux 启动时添加文字

这是嵌入式 Linux 系统的课后作业。要求:自己编译一个 Linux 内核,更新到当前系统,并在启动时输出自己的姓名和学号。

0. 准备工作

由于 Linux DE 实在太过难用,我一直用 WSL 提供 Linux 环境,故实验的第一步是复制 WSL(我可不想把 WSL 搞炸了)。

但是复制 WSL 太麻烦了,所以直接装个 Debian 作为实验专用环境,坏了直接重装(

/home/username 目录中新建 exp0 文件夹以存放本次实验所需要的文件。

最后,用 uname -a 记录编译前 Linux 内核版本。替换内核后,应当输出不同的内容。

Linux PokyuxLaptop 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 x86_64 GNU/Linux

1. 拉取&解压 Kernel 源码

Linux 官网上可以找到内核源码。

使用 wget 命令拉取源码:

wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.132.tar.xz

使用 WSL 的好处就是可以在 Windows 直接下载,然后用 cp 命令挪到 Linux 环境下。这个操作可以很好地解决 Linux 网络环境不够科学的问题。

在 Windows 中下载完源码,先将 tar.xz 解压为 tar 文件,然后使用 cp 命令复制到 WSL exp0 目录下。

Linux 官网还给出了内核源码包的 PGP 校验码以检查传输过程带来的错误。生产环境中检查签名是一个必不可少的步骤,但做实验的话那就无所谓了。

使用 tar 命令解压源码:

pokyux@PokyuxLaptop:~/exp0$ tar -xf linux-5.15.132.tar
pokyux@PokyuxLaptop:~/exp0$ ls
linux-5.15.132 linux-5.15.132.tar linux-5.15.132.tar.xz

2. 安装编译内核所需要的工具链

安装前推荐使用 USTC 镜像 ^_^

sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev bc dwarves python3

3. 准备配置文件

手搓配置文件对新手来说就是噩梦 🙁

使用真实的 Linux 编译时,可以使用 /boot 目录下的配置文件。

由于我使用的是 WSL,我在这里找到了 MS 给 WSL 写的配置文件。把这个文件重命名为 .config 再放在解压后的源码根目录中,就可以开始编译了。

要使 uname -a 显示自己的名字,我们还要更改 Makefile 文件:

EXTRAVERSION = built by Pokyux

4. 编译

之后就是编译了:

make -j 8

8 线程可能会快点

编译是最简单的一步了:输入命令后,让电脑自己编译几十分钟,这期间随意摸鱼 🙂

5. 替换内核

如果是用真实 Linux,那么使用 make install 就可以替换内核。重启就可以引导新的内核。

在 WSL 情况就变得比较复杂:

WSL 并不使用 /boot 目录下的内核,因此 /boot 目录是完全空置的。(准备配置文件时,我发现这里是空的。当时就猜测 WSL 并不使用 Linux 文件系统中的内核来引导。

查阅资料发现,WSL 使用 C:\Windows\System32\lxss\tools\kernel 这个文件来引导,故将编译出来的 arch\x86\boot\bzImage 重命名为 kernel 再将引导文件换成这个即可(替换前记得备份原 kernel 文件)。

6. 验证

For Linux (not WSL): reboot 即可。

For WSL: wsl --shutdown 然后再启动即可。

使用 uname -a 查看内核信息:

Linux PokyuxLaptop 5.15.132built by Pokyux-microsoft-standard-WSL2 #6 SMP Fri Sep 22 00:30:01 CST 2023 x86_64 GNU/Linux

We made it!

References

明天再整理引用…

发表回复

textsms
account_circle
email

Pokyux's Blog

Linux 启动时添加文字
这是嵌入式 Linux 系统的课后作业。要求:自己编译一个 Linux 内核,更新到当前系统,并在启动时输出自己的姓名和学号。 0. 准备工作 由于 Linux DE 实在太过难用,我一直用 WSL …
扫描二维码继续阅读
2023-09-21