内核在 kernel-6.1 里,基本与 github 仓库里的差不多,参数有些许差异。
以tablet模式为例,文档给出的编译工作,第一步 echo "ROCKCHIP_DEVICE_DIR := device/rockchip/rk3588/nanopi6" > .rockchip_device.mk对应的配置文件是 kernel-6.1/arch/arm64/configs/nanopi6_android_defconfig 。
修改内核配置重新编译内核之后,会面临问题,硬件驱动全都是预编译好放到 vendor/rockchip 里的,安装就会发现版本不一致,所有设备都用不了。
修改好内核参数,按wiki说明编译一次
. setenv.sh
./build.sh -FMu
如果一切顺利,内核会在 out/target/product/nanopi3/kernel 出现,过程中也能看到内核编译的一些日志。
但是,kernel-6.1 里不会有.ko 文件,out 里除了 vendor_dlkm 里有,其他都没有,而 vendor_dlkm 里的都是从 vendor/rockchip 里安装过来的。而且,out 里也找不到 Module.symvers。
所以下一步任务是重新编译内核模块。
cd kernel-6.1
export CLANG_BIN=$(pwd)/../prebuilts/clang/host/linux-x86/clang-r487747c/bin
export PATH=$CLANG_BIN:$PATH
# 可以不用执行
make ARCH=arm64 LLVM=1 CROSS_COMPILE=aarch64-linux-gnu- nanopi6_android_defconfig
make ARCH=arm64 LLVM=1 CROSS_COMPILE=aarch64-linux-gnu- modules_prepare
make ARCH=arm64 LLVM=1 CROSS_COMPILE=aarch64-linux-gnu- modules -j$(nproc)
其中,clang 的目录,参考 build/soong/cc/config/global.go 里的定义。
下一步,从 github 把网络相关的模块都clone出来,逐个按照 6.1 内核 和 安卓做适配,都在aosp项目外编译。再把ko 文件和 kernel-6.1 里的ko,按照 vendor_dlkm 里已有的,逐个覆盖到 vendor/rockchip 里,再次运行 ./build.sh -FMu 完成编译和打包。
Leave a Reply