Android HAL实践:Mini6410开发板上的mokoid

网上有很多人讲Android的HAL,都是基于jollen的实验代码的, 讲的都很好,但是缺少在板子上的实际操作。虽然这些实践步骤做过一次就很熟悉了,但是第一次还是挺麻烦的,要到处找资料,故特地在此将我在友善之臂板子上的实验步骤记录在这里,以供大家参考,少走弯路。在此不是为友善的板子打广告,他们也没给我钱,其实这板子的Android只有基本功能,不是很爽,不知后续固件是否有更新。废话说多了,下面开始吧:

1)首先mokoid下载后解压到友善的Android-2.0目录下面。可以在以下地址下载我使用的mokoid:

免费下载地址在

用户名与密码都是

具体下载目录在 /2012年资料/3月/10日/Android HAL实践:Mini6410开发板上的mokoid/

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是启动程序打印的,下面一部分是点击的时候打印的

Android HAL实践:Mini6410开发板上的mokoid

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wywgjz.html