查看: 4947|回复: 2

详述Android照相功能的实现(基于飞凌S3C6410开发板+OV9650摄像头驱动层分析)

[复制链接]
发表于 2011-10-13 14:47:18 | 显示全部楼层 |阅读模式
前些日子买了块飞凌OK6410的开发板+OV9650摄像头模块准备做Android应用开发。自己手里虽有现成的Android手机,但考虑到日后裁减硬件,不得不从最原始的开发板着手。之前没有写过Android的驱动,这算是一次尝试。本文涉及到以下几个方面的内容:
1. Android 模块编译
2. Android 模块的板上加载及调试
3. Android Camera 模块的改写
Android 模块编译
每次为了一个模块而编译整个Android系统是一个灾难(4个小时一次),这里会展示如何仅仅编译一个模块而节省大量的宝贵时间。网上多数的方法是通过执行envsetup.sh,接着运行mmm 命令来编译一个文件夹下的模块,但在编译libcamera这个模块时一直没能成功,显示编译依赖于其他几个模块。这里介绍另一种方法,每个模块的文件夹下都必须有一个Android.mk文件,在其中有一项LOCAL_MODULE用于定义模块名称,以照相模块为例,即被定义为LOCAL_MODULE:=libcamera,记下这个模块名称,跳转到Android源码的根目录下,执行以下操作:
Step 1.  进入宿主机linux终端,输入以下命令:
  
@:#source ./build/envsetup.sh  
@:#choosecombo
  
执行效果如图:


Step 2.  选择Device->Release->键入OK6410->eng
Step 3.  输入make 编译特定模块,如摄像头模块:  
  
@:#make libcamera  
  
执行效果如图:


编译完成效果图:



Step 4. 经过以上几个步骤后,摄像头模块就开始编译了,生成后的动态连接库文件(*.so)会存放在out/target/product/OK6410/system/lib/下,本文我们仅需要libcamera.so
我把上述步骤做成了一个shell脚本,每次修改照相模块的HAL后会自动编译,并将更新后的libcamera.so拷贝到Android源码根目录下,如果愿意,也可以自行修改脚本将libcamera.so拷贝到SD中。  
附件下载:
makelibcamera.zip 点击此处下载 makelibcamera.zip (373 Bytes)

Android 模块的板上加载及调试  
libcamera.so已经生成了,那怎么调试呢?一种办法是加载到模拟的Android系统中,但这种方法对于硬件调试往往行不通,那剩下的方法就是板上调试了。如果板子已经能够和PC进行adb连接,那就用adb push把libcamera.so推到目标机/system/lib/中。但可能是OK6410 USB接口设计的问题,与MacOSX总是无法建立起连接,于是每次我只能通过SD卡进行中转...手动从SD卡上把照相模块cp到lib目录下,然后reboot。
嵌入式开发比起应用开发,其开发环境往往要恶劣许多。就拿调试而言,往往要通过代码中插入类printf的语句来查看运行状态。android中提供了一个很好的工具logcat,在用户空间中,通过LOGV(Verbose),LOGE(Error),LOGD(Debug)等提供类似printf的功能。假定在程序中#define LOG_TAG "CameraHardware",那通过如LOGE("%s, Hello World!", LOG_TAG)就可以记录在系统日志中。系统日志杂乱繁多,要查看特定的日志就要限定范围,在目标机上定义ANDROID_LOG_TAGS环境变量就可以通过logcat -d来查看CameraHardware的“错误”日志了:
  
export ANDROID_LOG_TAGS="CameraHardware:E *:S"
logcat -d  
  
目标机和宿主机相连后,通过超级终端来执行以上命令后的结果:

发表于 2011-10-25 15:31:24 | 显示全部楼层
没有硬件呀。。。。
发表于 2012-5-29 16:39:43 | 显示全部楼层
有硬件,但是不知道怎么在linux下面操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表