编译高版本内核——玩客云折腾篇(2)
自己动手,丰衣足食
在我看来,在玩客云有限的硬件资源下,内核主要有两种:
- 低版本内核(无法使用Docker)
- 高版本内核(可以使用Docker)
如果还想开启一些功能(比如无线网卡),可以自己编译一个。我也刚接触编译不久,如有错误还请大佬指出🙏
了解交叉编译
交叉编译是在一个平台上生成另一个平台上的可执行代码。 同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。——百度百科
简单点说,你不会想在性能孱弱的玩客云上跑编译吧?
当然,对于不同的语言或者项目,交叉编译的配置可能略有不同,这里就主要介绍C/C++的交叉编译
内核编译
我的编译环境:WSL下的Ubuntu 20.04,使用root账户在/root
下进行操作
配置交叉编译环境
手动安装。交叉编译工具下载,一般选择最新的版本
![](https://npm.elemecdn.com/zuoye-static@0.0.1/6/gcc.webp)
安装工具
1 | #解压 |
在文件末尾添加PATH=$PATH:"/usr/local/toolchain/gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf/bin"
![添加后如图](https://npm.elemecdn.com/zuoye-static@0.0.1/6/bashrc.webp)
1 | #使环境变量生效 |
![环境变量生效](https://npm.elemecdn.com/zuoye-static@0.0.1/6/ok.webp)
获取源码与config文件
项目地址,选择有meson-mx-integration
的分支,建议下载ZIP到本地再解压到/root
![](https://npm.elemecdn.com/zuoye-static@0.0.1/6/sourse.webp)
接着获取当前运行的Armbian编译配置文件,一般在/boot
下有一个config文件,将其复制下来,重命名为.config
,然后放在源码根目录下
编辑编译配置文件
在玩客云运行check-config.sh
查看缺少运行Docker的模块,下载地址
1 | chmod +x check-config.sh&&./check-config.sh |
然后编辑.config
例如CONFIG_POSIX_MQUEUE: missing
在.config里搜索CONFIG_POSIX_MQUEUE这一项
将#CONFIG_POSIX_MQUEUE is not set
改为 CONFIG_POSIX_MQUEUE=y
如果遇到.config里没有的直接加到末尾即可。末尾的zfs用不到略过,不用管
开始编译
1 | cd /root/linux-meson-mx-integration-5.17-20220131 |
接着会进行各种询问,默认回车键摁到底,然后就是喜闻乐见的报错环节了。处理完错误,再次输入上面的make指令,编译会从上次中断的部分继续。下面是我遇到的一些问题
刚开始可能会提示Permission denied
,只需要给足权限
1 | chmod -R 777 /root/linux-meson-mx-integration-5.17-20220131/ |
后面的报错主要是缺少编译依赖,将报错复制给度娘,然后安装相应依赖即可
如果遇到一些无法解决的报错(我的都是编译小螃蟹的无线网卡报错),可以通过图形界面进行相关设置
1 | apt install libncurses-dev |
安装内核
将整个源码文件夹上传至玩客云
1 | cd /root/ |
然后SSH登录玩客云,输入以下命令,结束后断电重启
1 | cd /root/linux-meson-mx-integration-5.17-20220131 |
这里我没有进行备份操作,因为如果真出了问题起不来,那这备份又有何用呢
一般不会有大问题,但并不是所有系统都能安装内核,你可能需要注意
/boot
分区大小,也可能要注意对高版本内核的支持
参考资料
一次搞定 Arm Linux 交叉编译
Steps to build your own s8xx kernel (armhf) that works with Docker!
在玩客云Armbian上编译S8XX内核并开启docker