Android HAL實踐(一):Mini6410開發板上的mokoid

網上有很多人講Android的HAL,都是基於jollen的實驗代碼的, 講的都很好,但是缺少在板子上的實際操作。雖然這些實踐步驟做過一次就很熟悉了,但是第一次還是挺麻煩的,要到處找資料,故特地在此將我在友善之臂板子上的實驗步驟記錄在這裏,以供大家參考,少走彎路。在此不是爲友善的板子打廣告,他們也沒給我錢,其實這板子的Android只有基本功能,不是很爽,不知後續固件是否有更新。廢話說多了,下面開始吧:

1)首先mokoid下載後解壓到友善的Android-2.0目錄下面。可以在以下地址下載我使用的mokoid:

http://download.csdn.net/source/2974854

Android的編譯一般都是通過搜索Android.mk來進行的,如果單獨編譯一部分代碼,比如我們這裏的mokoid。可以採取兩種方式,第一種當然是直接運行Android的編譯命令,比如友善文檔裏面的build-android命令編譯整個項目,這種編譯要搜索整個目錄樹,當然是很慢的了。第二種就是隻編譯這個模塊,比如我們的mokoid. 使用以下命令:

mmm mokoid/

運行這條命令的時候可能出錯:

-bash: mmm: command not found

其實mmm是一組函數,需要通過以下命令來讓其生效:

.  build/envsetup          注意:點和build之間記住有空格

2)現在就可以開始編譯了,由於mokoid裏面的led.h不在搜索路徑中,需要進行一下修改,我這種全局改法應該不是很好,不過就將就看吧,

Android 編譯會首先使用build/core/config.mk文件,所以可以在此修改全局的頭文件搜索路徑:

SRC_HEADERS := /
        $(TOPDIR)system/core/include /

        ............................................
        $(TOPDIR)vendor/generic/hardware/led_stub/include
3)要運行mokoid的測試程序,需要增加permission,不然測試程序不會出現在菜單中,即將相應的xml拷貝到/system/etc/permissions下面。

cp ../mokoid/frameworks/base/service/com.mokoid.server.xml system/etc/permissions/

4)使用genrootfs.sh更新新編譯出來的mokoid到rootfs_dir目錄中,使用mkyaffs2image-128M將rootfs_dir生成單個的Image文件,燒入開發板。

5)在開發板運行測試程序時會加載.so文件,編譯生成的so文件是led.goldfish.so.這樣就會出現一個錯誤:

LedService JNI: Get Stub operations failed.

從而導致在LedOn的時候出現新的錯誤:

LedService JNI: sLedDevice was not fetched correctly.

解決的辦法就是在做文件系統的時候把led.goldfish.so直接改成led.default.so, 或者直接到開發板system/lib/hw下面去改。這樣就OK了。這也是個湊合的方法,呵呵。

6)如果不確定系統load的到底是什麼so文件可以在hardware/libhardware的hw_get_module函數裏面利用LOGE打印path的值來確定

    LOGE("++Path:%s",path);
    status = -ENOENT;
    if (i < HAL_VARIANT_KEYS_COUNT+1) {
        /* load the module, if this fails, we're doomed, and we should not try
         * to load a different variant. */
        status = load(id, path, module);
    }

關於path的產生還需要分析。

7)在界面上點擊按鈕,在adb shell上通過logcat查看HAL打印出來的log,如果出現下面的Log就證明你的mokoid已經ok了,上面一部分log是啓動程序打印的,下面一部分是點擊的時候打印的

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章