赞
踩
AOSP13的内核使用的编译器为Clang,因此搭建AOSP13的ko编译环境,也需要使用Clang。搭建过程记录如下:
- drwxr-xr-x 2 root root 4096 Nov 30 16:58 clang
- drwxr-xr-x 2 root root 4096 Nov 30 16:59 kernel_out
- drwxr-xr-x 2 root root 4096 Nov 30 16:57 ko-codes
clang:为编译器所在目录,可以将AOSP13自带的Clang(目录为prebuilts/clang)拷贝进去。
kernel_out:为kernel编译产物的目录,将 out/android13-gs-pixel-5.10/private/gs-google 拷贝进去即可。
ko-codes为ko的代码目录,包含源码 hello.c 及 Makefile 。
hello.c
- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/kernel.h>
- #include <linux/types.h>
- #include <linux/kmod.h>
-
- static int __init hello_init(void)
- {
- printk("hello world!\n");
-
- return 0;
- }
-
-
- static void __exit hello_exit(void)
- {
- return;
- }
-
-
- module_init(test_init);
- module_exit(test_exit);
- MODULE_LICENSE("GPL");
Makefile
- PWD := $(shell pwd)
- WORK_DIR=$(PWD)/..
-
- ARCH=arm64
- CLANG_TRIPLE=aarch64-linux-gnu-
- CC=$(WORK_DIR)/clang/host/linux-x86/clang-r450784e/bin/clang
- AR=$(WORK_DIR)/clang/host/linux-x86/clang-r450784e/bin/llvm-ar
- NM=$(WORK_DIR)/clang/host/linux-x86/clang-r450784e/bin/llvm-nm
- LD=$(WORK_DIR)/clang/host/linux-x86/clang-r450784e/bin/ld.lld
-
-
- obj-m := hello.o
-
- KERNELDIR := $(WORK_DIR)/kernel_out
-
- all:
- make -j8 CC=$(CC) AR=$(AR) NM=$(LLVM_NM) LD=$(LD) ARCH=$(ARCH) CLANG_TRIPLE=$(CLANG_TRIPLE) -C $(KERNELDIR) M=$(PWD) modules
-
- clean:
- rm -rf *~ *.ko *.o *.mod.c *.order .*.cmd .tmp_versions Module.symvers *.unsigned *.mod *.symversions .*.d
进入ko-codes目录,然后执行 make,会生成 hello.ko
将hello.ko拷贝到手机/data/local目录下,执行 insmod /data/local/hello.ko。
如果要确认是否加载成功,可以执行 lsmod | grep hello,如果打印出来说明加载成功。
如果要卸载ko,执行 rmmod hello 即可。
1)如何确定AOSP使用的clang版本
从 out/android13-gs-pixel-5.10/private/gs-google/include/generated/compile.h 查看LINUX_COMPILER 或者 查看prebuilts/clang/host/linux-x86/README.md
2)对于AOSP的clang版本,需要指定 CLANG_TRIPLE,
而 CROSS_COMPILE
不需要指定。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。