|
前些日子買了塊飛凌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)
2011-10-13 14:47 上傳
點擊文件名下載附件
下載積分: 積分 -1
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
目標機和宿主機相連后,通過超級終端來執行以上命令后的結果:
|
|