(已歇菜)实验1:更换操作系统内核

国庆假期搞了两三天这玩意,还没有搞起来,累了,坑先放着,回头再更新吧。

作为Linux系统管理员,Linux系统爱好者,伟大的勇者是时候该看看内核了,了解一下Linux的强大强大魅力,虽然有亿点点困难,并且就算研究了也不一定有什么结果,emmm问题不大,开始吧。

参考书籍:《奔跑吧Linux内核·入门篇(第二版)》笨叔 陈悦·著

实验环境:Raspberry Pi 400

操作系统:Raspberry Pi OS (64-bit) Debian Bullseye

这本书,是被一开始教Linux的老师忽悠买的,也没有指名道姓买这本书,只是忽悠我们一波愣头青去看内核,于是我就买了这本入门版书籍,书的版本很新2021年3月的版本,讲的都是很新的东西,都很入门,可惜当时我才没学多久,压根看不懂,现在一年后翻来看看有些许熟悉了,所以开始着手做实验学习。(还有一个原因就是书是完全适配树莓派的开发环境的,天造地和我买了块派,虽然不是4B,疫情期间4B已然成为一种理财产品,某宝一千多的价格8G和去年四百多8G甚至吃人,于是我就退而求其次选择了Pi 400,好歹也能稍微折腾折腾,比不上开发板的可玩性搞,还有一点就是本书增加了arm架构的内容,与现在的趋势很是符合,毕竟果子已经开始搞arm架构的桌面端,性能还很香,只能说是一种趋势吧。)

书上第一个实验是安装优麒麟系统,一个国防科技大学搞的Ubuntu的派生发行版Linux,在虚拟机里安装,过于简单就不做了,都来看内核了,安装虚拟机这种东西就不必看了。

同样是Deian系的系统,自信满满的我决定不使用优麒麟系统,,,

我们直接开始第二个实验,换个内核玩玩。

1.安装必备环境

1
sudo apt install libncurses5-dev libssl-dev build-essential openssl

书上也没写这些包是用来干嘛的,俺也没搜,但是逻辑上应该是编译内核所需要的东西吧(猜测)。

2.下载解压Linux内核源码

1
2
3
4
5
6
7
8
uname -a     #看了一下内核版本是5.15.61很新
cd ~/Downloads #我喜欢下载到家目录里面的Downloads里面
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.0.tar.xz

#官网下载下不动可以用魔法下载然后复制过来,或者有镜像站
wget https://mirrors.ustc.edu.cn/kernel.org/linux/kernel/v6.x/linux-6.0.tar.xz

tar -Jxf linux-6.0.tar.xz

3.下面是配置内核模块,进入目录可以使用make menuconfig进行内核配置,但是实际我敲的时候爆了个错。

/bin/sh: 1: flex: not found

看样子是flex这个东西没有,百度一下也是这么说的,先来安装试试看。

1
sudo apt install flex

再次运行时提示

/bin/sh: 1: bison: not found

1
sudo apt install bison

再次运行成功进入配置界面。

3.1这边改一下Linux提供了三种配置内核参数的配置命令。

1
2
3
4
5
6
7
8
#不建议使用
sudo make config

#建议使用(图形界面,键盘操作)
sudo make menuconfig

#强烈建议使用(图形界面,鼠标操作)
sudo make gconfig

3.2使用图形化的gconfig需要安装如下软件包

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo apt install make
sudo apt install gcc
sudo apt install libgtk2.0-dev libglib2.0-dev libglade2-dev
sudo apt install flex
sudo apt install bison

#启动命令
sudo make gconfig
#设置中配置文字的含义
N 未选中,即编译时不加入,gconfig中为不选中
M 编译成模块,gconfig中选中时为 - 表示
Y 编译入内核,gconfig中选中时为 √ 表示
#配置好后可以按save保存为.config文件

4.可以把raspberry官方发布的内核源码里面的内核编译配置文件复制过来,省得我们emmmm点点点

1
2
3
4
5
6
7
8
9
10
11
#首先要先下载raspberrypi的内核源码,然后找到里面的linux/arch/arm64/configs/bcm2711_defconfig
git clone https://github.com/raspberrypi/linux.git
or wget https://github.com/raspberrypi/linux/archive/refs/heads/rpi-5.15.y.zip
#但是我拉取半天都没有拉下来,很奇怪,于是我直接复制了那个文件里的所有内容,理论上应该是拉下来的。
#复制到内核目录下改名为.config
#项目里面地址为/arch/arm64/configs/bcm2711_defconfig
cp ~/Downloads/bcm2711_defconfig .config

#在这里我们选择导入这个文件,使用图形化命令均可导入,点击load选择.config文件,会有很多新特性没有做选项,但是问题不大,不理他,毕竟我也看不懂,主要太多了。

#然后选择save写入.config文件

5.接下来就可以编译内核了,使用make -jn命令,其中n表示使用几个核。

1
2
cat /proc/cpuinfo  #看看有几个核
make -j4 #树莓派当然是4核的啦

6.然后就开始漫长的等待时间了,老实讲是比较慢的,我在熬夜等它编译完。熬不住了等了大概50分钟还没好,睡了睡了。

7.早上起来一看,没有问题,开始编译安装内核模块。

1
sudo make modules_install

8.最后就是安装内核,重新启动了。

1
sudo make install

9.执行之后提示缺少固件,下载固件,固件地址,报错为

1
2
3
Possible missinng firmware /lib/firmware/rtl_nic/rtl8156b-2.fw for built-in driver r8152
Possible missinng firmware /lib/firmware/rtl_nic/rtl8156a-2.fw for built-in driver r8152
Possible missinng firmware /lib/firmware/rtl_nic/rtl8153c-1.fw for built-in driver r8152

10.到如上地址下载对应的固件,保存到/lib/firmware/rtl_nic/目录下。

11.然后再运行sudo make install

12.理论上重启就可以看到新的内核了,but不知道是不是树莓派不一样的原因,重启之后啥也没有发生,查看了/boot目录也存在6.0内核的东西,后来上网查阅,很多树莓派升级内核的操作都是通过另一台客户机对sd卡进行读写,仿佛是交叉编译,后来找到一篇本地编译的案例,发现情况与本次实验环境不是很相同,复制了Image到/boot目录并改名为kernel8.img后重启,仿佛是启用了新的内核,因为启动的时候卡住了,,,

此坑后续再填,等我养精蓄锐两天,说起来树莓派本地编译内核是真的慢,感觉要两小时,想要送走我。。。


(已歇菜)实验1:更换操作系统内核
https://steammilk.com/2022/10/02/2022-all/core-1/
作者
蒸奶泡
发布于
2022年10月2日
更新于
2025年1月8日
许可协议