AOSP13搭建基于Clang的ko交叉编译环境

AOSP13的内核使用的编译器为Clang,因此搭建AOSP13的ko编译环境,也需要使用Clang。搭建过程记录如下:

1、创建工程目录

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 。

2、ko源码及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

3、编译和加载

进入ko-codes目录,然后执行 make,会生成 hello.ko

将hello.ko拷贝到手机/data/local目录下,执行 insmod /data/local/hello.ko。

如果要确认是否加载成功,可以执行 lsmod | grep hello,如果打印出来说明加载成功。

如果要卸载ko,执行 rmmod hello 即可。

4、说明

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 不需要指定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值