在Android中单独编译linux kernel驱动模块

在Android中单独编译linux kernel驱动模块

本文参考了:http://blog.csdn.net/qq1084283172/article/details/56958136

2018-9-8 再次编辑

Makefile

ifneq ($(KERNELRELEASE),)

obj-m += hello.o

else

    KERNELDIR ?= <android源码顶层目录>/out/target/product/<product_name>/obj/KERNEL_OBJ/
    PWD ?= $(shell pwd)
    ARCH = arm64
    CROSS_COMPILE=<android源码顶层目录>/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-

.PHONY: modules clean

modules:
    $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KERNELDIR) M=$(PWD) modules
    #这里还要给签名模块,具体操作见下文链接
clean:
    @rm -rf *.o *.order *.symvers *.mod.* .*.o.cmd .*.mod.o.cmd .*.ko.cmd .tmp_versions *.ko

endif

product_name 是产品的名字

注意事项

1. 关于KERNELDIR的值

如果你的“内核”编译系统生成中间文件不是在out路径下,而是在如下路径:

<aosp_path>/kernel

那么KERNELDIR的值要改为路径,而不是out下面。

2.关于ARCH和CROSS_COMPILE的值

如果你的ARCH是arm不是arm64,那么你的CROSS_COMPILE的值也要改变。具体路径差不多,这里就不列出来了。

3. 签名问题

android的驱动模块都是开启了签名的。这样子直接编译好的,是不能直接用的。具体怎么签名看我的这篇博客Linux kernel模块内核签名问题解决方法

End

最后,使用make命令即可编译生成正确的hello.ko文件。

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值