在Ubuntu上为Android系统编写Linux内核驱动程序


在智能手机时代,每个品牌的手机都有自己的个性特点。正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了。据统计,截止2011年5月,AppStore的应用软件数量达381062个,位居第一,而Android Market的应用软件数量达294738,紧随AppStore后面,并有望在8月份越过AppStore。随着Android系统逐步扩大市场占有率,终端设备的多样性亟需更多的移动开发人员的参与。据业内统计,Android研发人才缺口至少30万。目前,对Android人才需求一类是偏向硬件驱动的Android人才需求,一类是偏向软件应用的Android人才需求。总的来说,对有志于从事Android硬件驱动的开发工程师来说,现在是一个大展拳脚的机会。那么,就让我们一起来看看如何为Android系统编写内核驱动程序吧。

这里,我们不会为真实的硬件设备编写内核驱动程序。为了方便描述为Android系统编写内核驱动程序的过程,我们使用一个虚拟的硬件设备,这个设备只有一个4字节的寄存器,它可读可写。想起我们第一次学习程序语言时,都喜欢用“Hello, World”作为例子,这里,我们就把这个虚拟的设备命名为“hello”,而这个内核驱动程序也命名为hello驱动程序。其实,Android内核驱动程序和一般Linux内核驱动程序的编写方法是一样的,都是以Linux模块的形式实现的,具体可参考前面Android学习启动篇一文中提到的Linux Device Drivers一书。不过,这里我们还是从Android系统的角度来描述Android内核驱动程序的编写和编译过程。

一. 参照这两篇文章在Ubuntu上下载、编译和安装Android最新源代码和在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)准备好Android内核驱动程序开发环境。

二. 进入到kernel/common/drivers目录,新建hello目录:

bkjia@www.bkjia.com:~/Android$ cd kernel/common/drivers

bkjia@www.bkjia.com:~/Android/kernel/common/drivers$ mkdir hello

三. 在hello目录中增加hello.h文件:

  1. #ifndef _HELLO_ANDROID_H_   
  2. #define _HELLO_ANDROID_H_   
  3.   
  4. #include <linux/cdev.h>   
  5. #include <linux/semaphore.h>   
  6.   
  7. #define HELLO_DEVICE_NODE_NAME  "hello"   
  8. #define HELLO_DEVICE_FILE_NAME  "hello"   
  9. #define HELLO_DEVICE_PROC_NAME  "hello"   
  10. #define HELLO_DEVICE_CLASS_NAME "hello"   
  11.   
  12. struct hello_android_dev {  
  13.     int val;  
  14.     struct semaphore sem;  
  15.     struct cdev dev;  
  16. };  
  17.   
  18. #endif  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 下一页

相关内容