您的位置:首页 > 移动开发 > Android开发

Android HAL实践(一):Mini6410…

2013-12-19 20:39 204 查看

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

分类:
Android
2011-01-10 21:40 606人阅读 评论(0) 收藏 举报

网上有很多人讲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) {

status = load(id, path, module);

}

关于path的产生还需要分析。

7)在界面上点击按钮,在adb
shell上通过logcat查看HAL打印出来的log,如果出现下面的Log就证明你的mokoid已经ok了,上面一部分log是启动程序打印的,下面一部分是点击的时候打印的


HAL实践(一):Mini6410开发板上的mokoid" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: