您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 在Android上实现LED灯的驱动控制实例(图文).pdf
  所属分类: 其它
  开发工具:
  文件大小: 1mb
  下载次数: 0
  上传时间: 2019-09-14
  提 供 者: weixin_********
 详细说明:在Android上实现LED灯的驱动控制实例(图文)pdf,在Android上实现LED灯的驱动控制实例(图文)idefire GPMDAT 53C64XX GPMAT defi S3C64Xx GPMPJD 50. defire VIB ON Ox11 define工BFF0x22 static const sruct file_operations GrIo Viberator__ ops- 53 When = THIS MOU二E, 54。 aper GPIO VIB open PTMT3“a 56 write -GPIO VIB write, 57 i。ct1 GPIO IB loct release 一 GPTQ TR e easE ssizet GPIO VIB read(struct file file, char x buf, size t. count, loff t. print k: GPTO VIB read \rin") 63 apio direcion output (53C54XX GPM(3), 0):// return count i 5. ssizet GPIO VIB write (struct file x =iler ccnst char k buf, sizet count, loff t f Opst 67 printk(" GPIO_ VIB write \r\n") 69 gpio_direction_ output (S3C64xx_GPM(3)r 1):// r8 turn coun二 //ssizc t GPIO. ioctl(struct inode inode, s ruct filc filc, unsigned int cmd, lorg data) 74. static int GPIC VIB ioctl(struct inode *inode, struct fil *filc, unsigned int cmd, urigigncd long arz) 75 rintk KERN ERR"VIB: GPIO VIB ioccl--CMD-x n" cmd)i C 78 79 CEsc IB ON: 80 gpio_direction output 33C4XX_GPK(-), C):// 81 gpio direction output S3C64XX_GPM(2) 0)i// 82 io direct主 3C64XXGP(3),5);// 83 gpio_direction_output S3C64xX_GPM(4), 1)i// printk(KERN ERR"VIB: GPIO VIBiDc-1--VIB ON\n"); break 86 case VIB oFE printk(KERN_ ERR"VIB: GP IO_ VIB_ioc-1--VIB_OFF\n",i 89 gpio direction output S3C64XX GDM(-)r 1):// 90 gpio_direction_ output S3C64XX-GPM(2), 1)i// 91 gpio direction_ output S3C64XX_GEM(3), 1);// upio-direction_ output:_ GDM(4),C);// 93 break 94 defanlT: brEak 96 97 Y/ free (S 3C64XX_ SPN(7))i 10 ssizet GPIO VIB open (struct inode inode, sruct file file, 101. 102./??eey //MOD TNC TISF COUNT 104 prir-k(GP IO VIB open() n"Ii 10七 retirn 0; 06,} 107, ssiz9t GPIO VIB release(struct inode t inode, struct file ile 10. 109 / MCD_ DEC_ USE_COUNT;//?S:ccy? printk(GPIO VIB release () \ n"); 111 TCEEUEI 112.} 113. static int GPIC VIB CTL init (void) 114. ⊥⊥5, 1rt rct ENQDEV: 116 int error i 117 prlntki'N -rn"); //32:?22u 119 s3c_pio_cfgpin(S3C64*x_GPM(1) S3C_P-O_SFN (1))://GPMI output s3c gpio cfgpin(S3C61XX_ GPM(2), S3CGP-0 SFN(1))://GPM2 output 121 s3c_gpio-cfgpin(33C64XX_GPM(3), 33C_EPO SIN (1))://GPM3 outrut 122, s3c_ gpio-cfgpin(S3C64XX_GPM(4), S3C_CP=O_SFN(1))://GPM4 output 123.41f1/*?21?·?e?xq2a?y2+/ 124. ret= register chrdev (Viberator MAJOR, viberatoi, &GPIO V:berator ctl ops)i 125.if《ret<0) 126 printk KERN_ERR "VIB: unable to get major d\n", ret) 127 return ret: 129./1?”\uc1c1asa 13 vib_dew class- class_(TIlIS_ MODULE, viberator)i 131. if ( IS ERR; vib dev class))i 132, unregister chrdev (Viberator MAJOR,"cap120) 135 return PTR ERR(vib dev class): 34.} 135,?21?? 136.devi已e_ creaL(⊥b_dev_C1ass,NULL, MKDEV( VibeLdLur MAjOR,3)NULL,”v⊥b”) 137.// create a point under /dev/class/wib 138./11y6????a?2?S??y?26?200??1?/dev/c1ass/2???3\uc1ib?面? 2616231D0?0?221x÷222t:??2x÷?a??21u??1y\ clopen,wrie,read 1eo”y2×÷E????向????1?6??y3iD? 139 reter 0; 14 end⊥f 141.⊥f0/*x2a?-主7*/ 142 if ((error allocchrdev_region (&dev, 0, DEVCOUNT, vibrate"))<0) 14 144 print. k (KERN FRR 14E VIB: Coulan't alloc chrdev red-on, error=od\n 146 error)i 1 14s, 149 int<("de=是dn",dev) 15 cdev_p= cdev_alloc() 151 cdevp->ap3=&GPIO Viberator ctl opsi 152. error cdev add(cdev_ _p, dev, DEVCOUNT); 15 f ( error) i n54 printk (KERN_ERR 155 "工B:Cou1dn" t cdev add; error=号dn", error); ⊥5E rcturn li 157 15忘 15 vibdcvclu3s-clas3 crcatc(THIS MODULE, "vib-dcv")i 16 if (IS_ERR(vib_dev_class)! 161 s- PTR ERR (vib dev class goto out_ unreg_c⊥ass; 164 rC 165 #endif uf rec_c1三s3 167 class destroy(vib dev class 16E turn 171. static int init S3c6410 VIB init (void 172 irt ret --ENODEV: 174, //÷6?0-色 175 printk(KERN_ERR" Auly: S3C6410VIBinit---\n")i 17E re= GPIO VIB CTL init() 177 if(ret 17日 179 print k(KERN_ERR " Auly: S3C6410 VIBinit-Fail .!!\r") return ret. 181 return 185 184. static void exit cleanup_ GPIO VIB(vcid) 185 ⊥86 //xg?ucc±? 187 // devfs unregister chrdav (vibera-cr MA TOR, gpio vib ctl") 189 cdev del(cdev p)i unregister_region(dev, DEVCOUNT) class destroy (vib_dev class: i 192 #endif 19>. device_dest. ray (vih_dev_class, MKDEV (Viberator-MALTOR, 0)F 194. class_destroy (vib_dev_class); unregister_ chrdev(Viberator MAJOR, "viberator") 19E 197. MODULE LICENSE ("GPL)i 19E. MODULE DESCRIPTION ("Peter tirst driver) 9. MODULE ALIAS CHARDEV (Viberator MAJOR, 0)i 20 201. module init(S3C6410VIB init); 202. module_exit(cleanup_G?IO_VIB); driver.h文件 leddriver h文件 ssize_t GPIO VIBread(strust file k file, char bufr size_t countr loff_t 2 3312 t: Io VIB write( struct fl⊥e*土i⊥e, const char*buf,3ize_t count r lofft s f_ops!i atatic int GPIO VIB ioctl (struct inode inode, struct file *file, unsigned int cmd, unsigned long are ssize_t CPIO_VIE_open (struct inode inode, struct file s file): 5 33izct CPIO VIE rclcasc (struc= inode inode, struct filc filc) tatic int GPIO VIB CTL init (veid) Confi文件 Kconfig文件 config LEDTEST tristate LED test for ARMeasy 3 ef两11tn help this is a led driver for ARMEASY with S3C6410 Makefile文件 Makefil|e文件 ch]-S(CUNE IG LEL'TEST)+=leddriverO 3、在内核配置里菜单里加入本驱动的配置项 达到的效果是,可以通过内核配置来选择是否把木驱动编译进大核里,也就是出现在make menuconfig后出来的界面里,可以参考9.8章< Android添加新驱动方法〉 )在 arch/arm/Kconfig文件里men" Device drivers"与 enamel 之间添加 Source "drivers/ledtest/Kconfig" )在 drivers/ Kconfig menu" Device drivers”和 已 nment 之问添加 source " drivers/ledtest/Kconfig" 3)修改/ drivers/ Makefile文件 Ch j-s(CONFIG_LEL TEST)+=ledtes:/ 4、编译驱动 在 kernel目录下,终端输入 frake Inelluconric “ Device drivers”下面会看到“ LED test for ARMeasy”,选择它 体存并退出 make 这样,就会在/ drivers/ detest目录下得到 leddrivr.ko文件,它就是驱动目标文件,已 级编译进了 zImage甲了,只要用这个 kernel烧录到开发板,开机就会自动加载木动, PS,如果发现如上编译,没有在1 edtest日录下生成 leddriver.ko文件,也就是本根没有 去译本驱动,那就扣 Latest目录入到/ drivers/misc目录下,相应的修改misc下面, 然后,在 make file里,不用选育接写成obi-y+= leddriver.0,这样强制的包含进去编译。 、应用程序(测试驱动) 用C语言写一个应用,测试上面写的驱动是否工作正常,这是一殷的驱动开发流程 主要有两个文件: Android.mk和 Latest.c 1 在$( YOUR Android)/ axtorna/ LEDTEST/目录编写 lcdts.c文件, ledtest ledtest.c Include include // contact he open(,, close(,, read(),write( and so +define DEVICE NAME "/dev/vib"//device point 井 define LED_ON 0x11 define LED○FF x22 int main (int argc, char kkargv) fdi 10 int ret Char wi (n start apio_1 ver test\ 13 f:- open (DEVICE_NAVE, O_RDWR,;//Open device get -he handle 14 ("fd s d \n"r fd) 15 if(fd 1)//open fail 17 print f(" sen dev⊥ce号 s error \ n",DEvI~ E NAME) 18 e1se 20 21 whiled ioctl(td, LED_ CEF); //call the output -unction to off LEDS s_eep(1)i//wait 1 second tl(fd, LED_CN eep()i 27 ret= close(fd)i //close device printf ad \ n", reti 30 p:inLr("close grio led Lest \:"I 31 } return 33 2、在$ YOUR Android)/ externa1/ LEDTEST/月录编写 Android. mk文件。这是 Android Makefile的标准命名,不要更改。 Android.lk文件的格式和内容可以参考其他凵有的 Android.mk文件的写法,针对 helloworld程序的 Android.mk文作冈容如下: mk 2. LOCAL PATH:= s(call my-diL 3 include S(CLEAR VARS LOCAL SRC_ FILES: - \\pEr hello LOCAL MOCULE : IedlesLapy include $(BUILD EXECUTABLE) 注意上面 LOCAL SRC FILES用来指定源文件; LOCAL MODULE指定要编译的模块的名字,下一步骤编译时就要用到 include$( BUILD EXECUTABLE)表示要编译成一个可执行文件,如果想编译成动态库则可用 BUILD SHARED LIBRARY,这些可以在 S(YOUR Android)/build/ ig,mk查到 3、回到 Android源代码顶层目录进行绽译 cd $(YOUR Android)&& make ledtestapp 例妇我这里的实际操作是 #cd Android. 1 #make ledtestapp 注意 make ledtestapr中的目标名 ledtestapp就是上面 Android.mk文件中由 LOCAL MODULE 指定的模块名。编译结果如下 make ledtestapp ==三三三三三三=三三=三 PLATFORM VERSION CODENAME=REL PLATFORM VERSION=2. 1-update1 TARGET_PRODUCT=generic TARGET BUILD VARIANT=eng TARGET SIMULATOR= TARGET BUILD TYPE=release TARGET ARCH=arm HOST ARCH=x86 HosT OS=linux HOST BUILD TYPE=release BUILD工D=ECLA工R 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓=〓〓〓〓〓〓〓〓=〓〓〓〓〓〓 /bin/bash: line 0: cd: sdk/layoutopt/app/src/resources: No such file or directory target thumb C: ledtestapp < external/LEDTEST/ledtestc Install: out/host/linux-x86/bin/apriori Install: out/ host/linux-x86/bin/soslim target Executable: ledtestapp (out/target/product/generic/obj/EXECUTABLES/ledtestapp_interme diates/LINKED/ledtestapp) target Non-prelinked: ledtestapp (out/target/product/generic/symbols/system/bin/ledtestapp) target strip: ledtestapp (out/target/product/generic/obj/EXECUTABLES/ledtestapp interme diates/ledtestapp) Install; out/target/product/generic/system/lib/libdl,so Install: out/target/product/generic/system/lib/libc.So Install: out/target/product/generic/system/lib/libstdc++5o Install: out/target/product/generic/system/lib/ibm.So Install: out/target/product/generic/system/bin/ledtestapp 4、如上面的编译结果所示,编译后的可执行文件存放在 out/ target/ product./ generiC/ system/bin/目录可执行文件是 ledtestapp 5、拷贝 ledtestapp可执行文件到T卡,插入开发板 6、开电,在启动进入 Android的过程中,串口终端按回车,进入命令行模式 7、拷贝可执行文件到根目录 #cp /sdcard, ledtestapp 8、执行程序
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 输入关键字,在本站1000多万海量源码库中尽情搜索: