linux device driver Makfile

在PC机上编译适合本PC机kernel的单个模块的Makefile很容易写,在PC机上编译android内核的某个模块却有些不同:主要是指定内核和交叉编译工具的路径。具体如下:

Makefile 内容

ifneq ($(KERNELRELEASE), )
    mymodule-objs := helloworld.o
    obj-m := helloworld.o
else
    PWD:=$(shell pwd)
    KERNEL_DIR ?=$(ANDROID_PRODUCT_OUT)/obj/KERNEL_OBJ/    
    CROSS_COMPILE=$(ARM_EABI_TOOLCHAIN)
    PWD:=$(shell pwd)
all:
    make ARCH=arm $(CROSS_COMPILE) -C $(KERNEL_DIR) M=$(PWD) modules
clean:
    rm -rf *.o modules.order *.ko Module.symvers
endif

对应的helloworld.c 如下

helloworld.c

#include <linux/module.h>

#include <linux/kernel.h>
#include <linux/init.h>

static int __init hellokernel_init(void)
{
    printk(KERN_INFO "Hello, kernel!\n");
    return 0;
}

static void __exit hellokernel_exit(void)
{
    printk(KERN_INFO "Goodbye, kernel!\n");
}

module_init(hellokernel_init);
module_exit(hellokernel_exit);

MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("XXX");
MODULE_DESCRIPTION("Test only");

运行时先在项目文件目录下运行

$ source build/envsetup.sh

$ lunch

选择编译项目选项 导入一些符号定义,最后即可运行mak执行本Makefile

$ make

生成的helloworld.ko 即是适合android 内核的文件,即可用insmod rmmod 将模块加入目标板的内核或从内去除。

另:如果将Makefile中的符号替换成对应的内容,即直接指定KERNEL_DIR和CROSS_COMPILE在android代码中的路径,则无需执行source 和lunch命令即可在任意标签页直接运行make 命令生成目标文件,对应的Makfile文件如下:

Makefile 内容:

mymodule-objs := helloworld.o
obj-m := helloworld.o
PWD:=$(shell pwd)
KERNEL_DIR=android_src_path/out/target/product/T37lchaudi/obj/KERNEL_OBJ/
CROSS_COMPILE=android_src_path/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin
PWD:=$(shell pwd)
all:
    make ARCH=arm $(CROSS_COMPILE) -C $(KERNEL_DIR) M=$(PWD) modules
clean:
    rm -rf *.o modules.order *.ko Module.symvers

其中android_src_path为anroid项目所在的目录。


PC OS verison:Ubuntu 12.04.2 LTS, kernel version:3.5.0-27-generic

目标板kernel version:3.0.50

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值