当前位置:操作系统 > 安卓/Android >>

Android 驱动开发系列一

 
首先,需要搭建Android的开发环境。我这里采用的是Ubuntu 11.04 64bit的系统,里面使用gcc-4.4,Android 4.0.4源码,硬件是S5PV210。
搭建环境这一步就不说了。
其次,编译好u-boot、kernel和ICS。
最后,开始确定要编写什么驱动。
 
由于我这个210板子上没有可控制的GPIO设备,所以这里硬件部分就不涉及了,直接编写一个驱动,实现读写接口。
 
在开始之前,我们先来看看由驱动到接口、应用是怎么一个流程。
从这个图中可以看出我们需要 实现HAL层,实现Framework层,以及编写对应的程序。
 
在这里,有必要提一下:在Android下有以下两种访问HAL的方式:
1、Android 的 app 直接通过service 调用.so格式的JNI :此方法比较简单高效,但是不正规。
2、经过Manager 调用 Service :此方法实现起来比较复杂,但更符合目前的 Android框架。在此方法中 Manager 进程和 Service(JAVA) 进程需要通过进程通信的方式实现通信。
 
下面正式开始:
 
一、HAL层驱动的实现
1、添加 ttt 驱动
首先,打开终端,进入到kernel源码目录下的drivers目录,如:
[plain] 
brantyou@brantyou-ubuntu:~/workspace$ cd samsung_android_kernel_3.0/drivers/  
brantyou@brantyou-ubuntu:~/workspace/samsung_android_kernel_3.0/drivers$ ls  
accessibility  clk          gpio        Kconfig    misc             pcmcia     sfi        usb  
acpi           clocksource  gpu         Kconfig~   mmc              platform   sh         uwb  
amba           connector    hello       leds       modules.builtin  pnp        sn         vhost  
ata            cpufreq      hid         lguest     modules.order    power      spi        video  
atm            cpuidle      hwmon       macintosh  mtd              pps        ssb        virtio  
auxdisplay     crypto       hwspinlock  Makefile   net              ps3        staging    vlynq  
base           dca          i2c         Makefile~  nfc              ptp        switch     w1  
bcma           dio          ide         mca        nubus            rapidio    target     watchdog  
block          dma          idle        md         of               regulator  tc         xen  
bluetooth      edac         ieee802154  media      oprofile         rtc        telephony  zorro  
built-in.o     eisa         infiniband  memstick   parisc           s390       thermal  
cdrom          firewire     input       message    parport          sbus       tty  
char           firmware     isdn        mfd        pci              scsi       uio  
brantyou@brantyou-ubuntu:~/workspace/samsung_android_kernel_3.0/drivers$   
切换成超级用户权限:
[plain] 
brantyou@brantyou-ubuntu:~/workspace/samsung_android_kernel_3.0/drivers$ sudo -s  
[sudo] password for brantyou:   
root@brantyou-ubuntu:~/workspace/samsung_android_kernel_3.0/drivers#   
创建 ttt 驱动目录:
[plain]  
root@brantyou-ubuntu:~/workspace/samsung_android_kernel_3.0/drivers# mkdir ttt  
root@brantyou-ubuntu:~/workspace/samsung_android_kernel_3.0/drivers# ls  
accessibility  clk          gpio        Kconfig    misc             pcmcia     sfi        uio  
acpi           clocksource  gpu         Kconfig~   mmc              platform   sh         usb  
amba           connector    hello       leds       modules.builtin  pnp        sn         uwb  
ata            cpufreq      hid         lguest     modules.order    power      spi        vhost  
atm            cpuidle      hwmon       macintosh  mtd              pps        ssb        video  
auxdisplay     crypto       hwspinlock  Makefile   net              ps3        staging    virtio  
base           dca          i2c         Makefile~  nfc              ptp        switch     vlynq  
bcma           dio          ide         mca        nubus            rapidio    target     w1  
block          dma          idle        md         of               regulator  tc         watchdog  
bluetooth      edac         ieee802154  media      oprofile         rtc        telephony  xen  
built-in.o     eisa         infiniband  memstick   parisc           s390       thermal    zorro  
cdrom          firewire     input       message    parport          sbus       ttt  
char           firmware     isdn        mfd        pci              scsi &n
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,