查看: 5315|回復: 2
打印 上一主題 下一主題

詳述Android照相功能的實(shí)現(基于飛凌S3C6410開(kāi)發(fā)板+OV9650攝像頭驅動(dòng)層分析)

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2011-10-13 14:47:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
前些日子買(mǎi)了塊飛凌OK6410的開(kāi)發(fā)板+OV9650攝像頭模塊準備做Android應用開(kāi)發(fā)。自己手里雖有現成的Android手機,但考慮到日后裁減硬件,不得不從最原始的開(kāi)發(fā)板著(zhù)手。之前沒(méi)有寫(xiě)過(guò)Android的驅動(dòng),這算是一次嘗試。本文涉及到以下幾個(gè)方面的內容:
1. Android 模塊編譯
2. Android 模塊的板上加載及調試
3. Android Camera 模塊的改寫(xiě)
Android 模塊編譯
每次為了一個(gè)模塊而編譯整個(gè)Android系統是一個(gè)災難(4個(gè)小時(shí)一次),這里會(huì )展示如何僅僅編譯一個(gè)模塊而節省大量的寶貴時(shí)間。網(wǎng)上多數的方法是通過(guò)執行envsetup.sh,接著(zhù)運行mmm 命令來(lái)編譯一個(gè)文件夾下的模塊,但在編譯libcamera這個(gè)模塊時(shí)一直沒(méi)能成功,顯示編譯依賴(lài)于其他幾個(gè)模塊。這里介紹另一種方法,每個(gè)模塊的文件夾下都必須有一個(gè)Android.mk文件,在其中有一項LOCAL_MODULE用于定義模塊名稱(chēng),以照相模塊為例,即被定義為L(cháng)OCAL_MODULE:=libcamera,記下這個(gè)模塊名稱(chēng),跳轉到Android源碼的根目錄下,執行以下操作:
Step 1.  進(jìn)入宿主機linux終端,輸入以下命令:
  
@:#source ./build/envsetup.sh  
@:#choosecombo
  
執行效果如圖:


Step 2.  選擇Device->Release->鍵入OK6410->eng
Step 3.  輸入make 編譯特定模塊,如攝像頭模塊:  
  
@:#make libcamera  
  
執行效果如圖:


編譯完成效果圖:



Step 4. 經(jīng)過(guò)以上幾個(gè)步驟后,攝像頭模塊就開(kāi)始編譯了,生成后的動(dòng)態(tài)連接庫文件(*.so)會(huì )存放在out/target/product/OK6410/system/lib/下,本文我們僅需要libcamera.so
我把上述步驟做成了一個(gè)shell腳本,每次修改照相模塊的HAL后會(huì )自動(dòng)編譯,并將更新后的libcamera.so拷貝到Android源碼根目錄下,如果愿意,也可以自行修改腳本將libcamera.so拷貝到SD中。  
附件下載:
makelibcamera.zip 點(diǎn)擊此處下載 makelibcamera.zip (373 Bytes)

Android 模塊的板上加載及調試  
libcamera.so已經(jīng)生成了,那怎么調試呢?一種辦法是加載到模擬的Android系統中,但這種方法對于硬件調試往往行不通,那剩下的方法就是板上調試了。如果板子已經(jīng)能夠和PC進(jìn)行adb連接,那就用adb push把libcamera.so推到目標機/system/lib/中。但可能是OK6410 USB接口設計的問(wèn)題,與MacOSX總是無(wú)法建立起連接,于是每次我只能通過(guò)SD卡進(jìn)行中轉...手動(dòng)從SD卡上把照相模塊cp到lib目錄下,然后reboot。
嵌入式開(kāi)發(fā)比起應用開(kāi)發(fā),其開(kāi)發(fā)環(huán)境往往要惡劣許多。就拿調試而言,往往要通過(guò)代碼中插入類(lèi)printf的語(yǔ)句來(lái)查看運行狀態(tài)。android中提供了一個(gè)很好的工具logcat,在用戶(hù)空間中,通過(guò)LOGV(Verbose),LOGE(Error),LOGD(Debug)等提供類(lèi)似printf的功能。假定在程序中#define LOG_TAG "CameraHardware",那通過(guò)如LOGE("%s, Hello World!", LOG_TAG)就可以記錄在系統日志中。系統日志雜亂繁多,要查看特定的日志就要限定范圍,在目標機上定義ANDROID_LOG_TAGS環(huán)境變量就可以通過(guò)logcat -d來(lái)查看CameraHardware的“錯誤”日志了:
  
export ANDROID_LOG_TAGS="CameraHardware:E *:S"
logcat -d  
  
目標機和宿主機相連后,通過(guò)超級終端來(lái)執行以上命令后的結果:

沙發(fā)
發(fā)表于 2011-10-25 15:31:24 | 只看該作者
沒(méi)有硬件呀。。。。
板凳
發(fā)表于 2012-5-29 16:39:43 | 只看該作者
有硬件,但是不知道怎么在linux下面操作
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页