欢迎来到天天文库
浏览记录
ID:37637220
大小:654.62 KB
页数:17页
时间:2019-05-27
《android底层开发流程_从linux驱动到APK调用_图文详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第一步:在Linux下编写驱动程序1,在Linux3.0/driver/->mkdirhello_me2,在hello_me目录下,新建编写makefiel和Kconfigmakefile如下:[csharp]viewplaincopyprint?1.#2.#MakefileforHELLO_ME_LEDS3.#4.5.#SPItestingonlyfor(usingspidevdriver)6.#file->spi_test.c7.8.#version1.0.09.10.#date201
2、4年04月23日11.12.#authorjiangdou13.14.#Copyright(c)2014jiangdou.AllRightsReserved.15.16.obj-$(CONFIG_HELLO_ME_LEDS)+=leds.oKconfig如下:[cpp]viewplaincopyprint?1.#2.#HSIdriverconfiguration3.#4.5.6.7.configHELLO_ME_LEDS8.tristate"HELLO
3、_MELEDSDriver"9.10.help11.SayYhereifyouwanttosupporttheLEDSdeviceleds.c如下:[cpp]viewplaincopyprint?1.#include2.#include3.#include4.#include5.#include6.#include7.#i
4、nclude8.#include9.#include10.#include11.12.13.#if114.#defineGPIO_BASE0x01C2080015.#defineGPE_CFG0(GPIO_BASE+0x90)//PECFG016.#defineGPE06_CFG(1<<24)//配置PE06为输出模式17.#defineGPE_DATA(GPIO_BASE+0xA0)18.#
5、endif19.20./*自动创建设备节点结构体*/21.staticstructclass*leddrv_class;22./*cfg0里面有PE06*/23.volatileunsignedlong*gpe_cfg0=NULL;24.volatileunsignedlong*gpe_date=NULL;25.26.27./*设备打开函数,当你在应用程序里面对led执行open函数这个函数就会被执行*/28.staticintled_drv_open(structinode*inode,str
6、uctfile*file)29.{30.31./*将PE06_CFG位清零*/32.*gpe_cfg0&=~(GPE06_CFG);33./*将PE06_CFG位置1,即设置为输出模式*/34.*gpe_cfg0
7、=GPE06_CFG;35.36./*在内核里面打印要用printk*/37.//printk(KERN_ALERT"ledopeni");38.printk("ledopeni");39.return0;40.}41./*设备写函数,当你在应用程序里面对led执行write函
8、数这个函数就会被执行*/42.staticssize_tled_drv_write(structfile*file,constchar__user*buf,size_tcount,loff_t*ppos)43.{44.//printk(KERN_ALERT"ledwrite");45.intval;46./*内核空间和用户空间相互独立,两者之间数据交换要用这个函数*/47.copy_from_user(&val,buf,count);48.if(val==1)49.{50./*置0,相当pi
9、n_write写0*/51.//*gph_date&=~(0×03<<15);//写PH15,PH1652.*gpe_date&=~(0x01<<6);//写PE0653.}54.else55.{56./*置1,相当pin_write写1*/57.//*gph_date
10、=(0×03<<15);58.*gpe_date
11、=(0x01<<6);59.}60.return0;61.}62./*linux设备驱动里面每个设备都得要一个设备描述符,其实就可以结构体,有兴趣的可以看看他的原型*/63.st
此文档下载收益归作者所有