Android平台驱动编写实例

       Android平台的驱动编译跟普通的linux驱动编写有一点区别,主要区别在Makefile文件(需要交叉工具连DBG_CROSS_COMPILE)),这里以hello.c文件为例

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

static int __init hello_init(void)]
{ 
	printk(KERN_ALERT"Initializing hello device.\n");        
	return 0;
}

static void __exit hello_exit(void)
{	
	printk(KERN_ALERT"hello_exit.\n");        
}


MODULE_DESCRIPTION("First Android Driver");
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

 
 

Makefile的内容为

ifeq ($(KERNELRELEASE),)  
  
KERNELDIR_OUT ?= Android源码路径/kernel
DBG_CROSS_COMPILE ?= Android源码路径/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-
PWD :=$(shell pwd)  
  
modules:  
	$(MAKE) -C $(KERNELDIR_OUT) M=$(PWD) ARCH=arm CROSS_COMPILE=$(DBG_CROSS_COMPILE) modules 
modules_install:  
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install  
clear:  
	rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions modules.order  Module.symvers 
.PHONY: modules modules_install clean  
else  
	obj-m:= hello.o  
endif


        由于高通平台的源码做的比较规范,所有的生成文件都放在了Android源码的out目录下,所有内核源码路径下要改成( Android源码路径/out/target/product/msm8909/obj/KERNEL_OBJ)


你可能感兴趣的:(linux,驱动)