一、orangepi-build 编译
针对香橙派5Plus的内核源码编译,我尝试过第六章的 orangepi-build 一次性脚本构建,但是可能由于PC设备的问题,编译时一直报错编译器崩溃,报错的地方都与浮点数的计算有关。将浮点运算改为整数运算,就能编译通过,但始终不是长久的解决办法。
详见另一篇文章:
香橙派orangepi-build编译报错,internal compiler error:Illegal instruction_香橙派5b 编译 uboot 下载失败-CSDN博客https://blog.csdn.net/plmm__/article/details/143874327?spm=1001.2014.3001.5501我目前没装虚拟机,只有WSL,但是执行后提示不支持wsl。
更换较新的硬件设备后,一切正常了,deb 包也正常生成了,看来还是不要用太旧的 cpu 啊。
二、源码单独编译
根据手册第七章,单独编译内核源码。
1、交叉编译
我尝试过在pc端交叉编译内核源码,过程都正常,可以成功编译。但是香橙派3588的启动结构不像基础的MPU那样使用,在uboot中指定内核和设备树就行,还需要其他文件:
手册也没有提到交叉编译的方法,只更新内核和设备树放到/boot目录下,无法启动。
其他文件手册没有详细描述,不过可以在内核源码下执行 make install 来安装所需文件,内核源码的Makefile文件已经写好了安装的目录:
方法一:
这里我认为可以在开发板端使用nfs网络挂载内核文件夹,在板端直接执行安装内核和设备树,以及模块,这里我没有实际操作,不过理论上是没问题的。
方法二:
可以将编译好的整个源码使用 tar 打包传到开发板,解包后执行 make install 安装。但是源码非常大,并且可能会存在不同架构的报错,读者有精力可以尝试。
方法三:
使用 deb 打包的方式,将内核和设备树封装为 deb 安装包,同时也可以方便 apt 和 dpkg 工具的管理。目前的内核源码都集成了 bindeb-pkg 打包工具,用于将内核编译和打包成 Debian 格式的软件包。它是内核源码树的一部分,属于内核构建系统(Kbuild)的功能之一。
首先安装相关依赖:
sudo apt install build-essential dpkg-dev fakeroot
在源码目录下做好相关的配置(可忽略):
make menuconfig
执行编译,打包:
make
make bindeb-pkg
这里可以省去make,因为 make bindeb-pkg 本身会执行编译。
生成的 deb 包会放在内核源码目录的上一级目录中。此时根据手册板端编译的安装方式,安装对应的 deb 即可。
2、板端编译
这部分的方法是在开发板端下载对应版本的源码,使用开发板来编译。
此时又有新的问题,根据手册提示,内核 config 配置使用 rockchip_linux_defconfig:
但是我编译后的内核无法启动,在启动内核时卡死。
在第六章编译内核部分有这样一段描述:
两个编译方式使用的配置文件不同,并且使用 orangepi-build 中的 config 配置文件编译后,内核可以正常启动了,不知道是不是官方的小 bug。
编译好后根据手册的步骤,执行:
重启即可。
三、总结
orangepi-build 方式编译的内核,是通过打包 deb 来进行内核升级。第二种方式编译的内核,是通过源码 make install 的方式更新。
问题都是相对的,可能只有我遇到。在此进行记录,如果读者有和我一样的问题,希望能够帮到你。