Rockchip Android13平台提取kernel环境编译KO
当需要给第三方提供kernel的ko编译环境时,又不想提供完整的kernel源码,则可以对kernel进行裁剪提取出最小的编译环境和编译器提供给第三方即可。
1. 编译器
Rockchip Android13平台kernel的编译器是clang,可以把android上面clang直接压缩包括,具体路径是:
prebuilts/clang/host/linux-x86/clang-r450784d
2. 下载一份完整的kernel源码,编进行GKI的ko编译
命令如下
export PATH=prebuilts/clang/host/linux-x86/clang-r450784d/bin:$PATH
make CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1 ARCH=arm64 gki_defconfig rockchip_gki.config && make CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1 ARCH=arm64 rk3588-evb1-lp4-v10.img -j32
3. 成功编译后再进行裁剪
find -name *.c | xargs rm
find -name *.ko | xargs rm
find -name *.img | xargs rm
find -name *.o | xargs rm
find -name *.a | xargs rm
rm drivers/ -rf
rm arch/arm64/boot/dts/rockchip/ -rf
rm *.img
rm arch/arm64/boot/dts/ -rf
rm .git -rf
rm Documentation/ -rf
rm vmlinux
rm ./crypto/
rm ./crypto/ -rf
rm ./arch/arm64/boot
rm ./arch/arm64/boot -rf
rm net/ -rf
rm sound/ -rf
rm fs/ -rf
rm tools/ -rf
rm block/ -rf
rm arch/arm/boot/ -rf
rm kernel/ -rf
rm samples/ -rf
rm -rf security/
rm -rf usr/
rm -rf ipc/
4. 编译第三方KO
按以上步骤提取编译后面后,就可以进行第三方的驱动KO编译了。下面以hello.ko为例进行说明
- 在任意目录创建hello目录并创建hello.c和对应的Makefile
hello.c
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
static int driver_all_init(void)
{
printk("hello module\n");
return 0;
}
static void driver_all_exit(void)
{
}
module_init(driver_all_init);
module_exit(driver_all_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("jiazh");
MODULE_DESCRIPTION("a hello module");
Makefile
obj-m := hello.o
KER= ../../kernel-5.10/
all:
@rm -rf *.ko
@make -C $(KER) M=$(PWD) modules
@rm -rf *.mod* *.sym* .*.cmd *.order *.o
clean:
@rm -rf *.ko
@rm -rf *.mod* *.sym* .*.cmd *.order *.o
- 开始编译
先在kernel目录下配置clang的编译器
export PATH=。../prebuilts/clang/host/linux-x86/clang-r450784d/bin:$PATH
- 再进入hello目录下编译hello.ko
make CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1 ARCH=arm64 -C ../../kernel-5.10 M=$PWD -j32
- 编译完成在hello目录下生成hello.ko