rock5b · 2023年1月2日 0

(小白向)为Radxa的Rock 5B/4B+通过自己编译内核的方式来增加ZFS和Btrfs文件系统

本文的系统镜像源自https://github.com/radxa-build/rock-5b/releases/download/20221213-1106/rock-5b_debian_bullseye_kde_2022-12-13T1118+0000_gpt.img.xz,还没做过任何更改(是的我在5b上编译它自己的内核哈哈哈哈哈哈哈),以下操作均是进行过

sudo su
cd ~

(也就是切换到 root 用户,文件下载到 /root 中)后才进行的

那么,先浅浅地装些依赖吧!

apt install git build-essential fakeroot libncurses5-dev libssl-dev ccache build-essential autoconf libtool gawk alien fakeroot zlib1g-dev uuid-dev libattr1-dev libblkid-dev libselinux-dev libudev-dev libdevmapper-dev parted lsscsi ksh linux-headers-$(uname -r) linux-libc-dev-$(uname -r) busybox

然后是下载源码环节

git clone -b linux-5.10-gen-rkr3.4 https://github.com/radxa/kernel.git
wget https://github.com/openzfs/zfs/releases/download/zfs-2.1.7/zfs-2.1.7.tar.gz

请注意,随着时间的迁移,上方OpenZFS会有更新的release,还请自己核对哈(因为我不会链接到最新的版本哈哈哈哈哈哈)

因为高版本的OpenZFS已经集成了SPL (Solaris Porting Layer),所以我们不用再去 clone 了

网络环境不好的朋友可以在地址前加上 https://ghproxy.com/ 来加速下载,比如改写成https://ghproxy.com/https://github.com/radxa/kernel.git

*注意:虽然ghproxy是免费提供服务的,但是鉴于国内服务器流量费用极高,请不要恶意抢占他们服务器的资源,也尽可能地不要重复下载。如果你心疼他们,那就给他们点赞助吧!

有方法的朋友可以在终端中分别输入

export http_proxy=http://<IP>:<PORT>
export https_proxy=http://<IP>:<PORT>

两串神秘代码来走捷径

之后我们

cd kernel/
nano .config

然后在nano中使用 Ctrl + W 对 CONFIG_SYSTEM_TRUSTED_KEY 和 CONFIG_MODULE_SIG_KEY 进行搜索,然后把他们注释掉

注释前
注释后

使用 Ctrl + X 进行保存,然后执行

make prepare

此时,系统会询问证书相关问题,直接回车就好,会填上默认值

之后我们要转到OpenZFS的源码之中并将其编译到(?)我们要编译的内核中,完整操作如下

cd ..
cd zfs-2.1.7/
./autogen.sh
./configure --enable-linux-builtin=yes --with-linux=/root/kernel --with-linux-obj=/root/kernel
./copy-builtin /root/kernel

上述操作完成后,我们理论上就能在menuconfig中看到我们想要的ZFS了。打开menuconfig的完整步骤如下

cd ..
cd kernel/
make menuconfig

然后使用键盘上的方向键下移,使光标移动到File systems上,然后回车

再用光标移动到 ZFS filesystem support 上,按下键盘上的 Y 键,出现星号代表成功勾选

往下翻还有Btrfs的选项,想要的话顺手勾上就好了

此时便可用键盘上的方向键右移,选择 Save,回车两次即可

当然,你还可以顺便做点其他设置,make menuconfig的操作方法在其顶部就写得很清楚了,在此不再赘述

*注意:既然是小白向,我就不建议动Device drivers里的设置,因为容易涉及到很多依赖的安装,到时候哭都没有眼泪哭:(

我就是因为开太多了导致东缺西缺最后懒得改了从头再来:(

搞定后选择Exit即可

接下来我们回到zfs的源码目录,进行编译和安装

cd ..
cd zfs-2.1.7/
make -s -j8
make install

接着回到内核源码中

cd ..
cd kernel/
make clean
make modules -j8
make modules_install
make -j 8 bindeb-pkg LOCALVERSION=-custom

编译完成后,安装内核,更新引导

cd ..
dpkg -i linux*
u-boot-update

接下来重启即可!大功告成!

Reference list

编译内核遇到的问题 – CodeAntenna
Building Custom Kernel with ZFS Built In – Software & Operating Systems / Linux – Level1Techs Forums
Building ZFS — OpenZFS documentation
Error in compiling/installing RealTime Kernel on Ubuntu 20.04.2 LTS – Ask Ubuntu