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

原创 2011年01月10日 21:40:00

网上有很多人讲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是启动程序打印的,下面一部分是点击的时候打印的

 

 

厂商HAL层库文件 xxx.xxx.so添加到源码中编译到系统镜像中

以mini6410 中的背光库文件为例: 首先将库文件放入Android-2.3.4/vendor/friendly-arm/mini6410/prebuilt中, 修改Android-2.3.4...
  • zlcchina
  • zlcchina
  • 2014年02月14日 11:29
  • 995

Android架构实例分析之编写hello驱动的HAL层代码

Android架构实例分析之编写hello驱动的HAL层代码摘要:HAL层中文名称又叫硬件抽象层,可以理解我Linux驱动的应用层。本文实现了一个简单的hello HAL的代码,衔接hello驱动和h...
  • seek_0380
  • seek_0380
  • 2016年07月08日 16:20
  • 3013

Android4.0之显示部分HAL

一、原理分析   Android中显示屏设备被抽象成一个帧缓冲区;Linux内核创建的"/dev/graphics/fb0"设备、就是用来描述系统中的一个帧缓冲区(也就是一个显示屏),Adnroid系...
  • tankai19880619
  • tankai19880619
  • 2013年12月17日 16:44
  • 2239

Android系统HAL层原理及编程注意事项

HAL层起到承上启下的作用,即上面为JNI服务,下面为driver服务
  • lizekun2010
  • lizekun2010
  • 2016年08月18日 20:28
  • 1859

Android Hal层简要分析

Android Hal层简要分析     Android Hal层(即 Hardware Abstraction Layer)是Google开发的Android系统里上层应用对底层硬件操作屏蔽的...
  • LoongEmbedded
  • LoongEmbedded
  • 2015年04月11日 11:05
  • 6630

Android O 学习(一)之HAL类型

备注:这里已Camera模块为例,如问题,欢迎讨论。   以往的hal和framwork的代码紧密联系起来的,为此google为了framework 升级的方便在Android 8.0 上对 An...
  • armwind
  • armwind
  • 2017年11月03日 15:06
  • 562

android关于GPS hal层的分析

转载自:http://blog.chinaunix.net/uid-26215986-id-3743534.html 主控: Samsung   Cortex  ARM A8  smdkc110...
  • YanLai20
  • YanLai20
  • 2015年07月03日 20:21
  • 1116

Android HAL接口实现

如何实现HAL对native层的接口
  • qq_21198071
  • qq_21198071
  • 2016年08月09日 13:59
  • 297

关于Android的HAL的一些理解

之前一直在学习基于Linux内核的一些字符型驱动的编程,对Linux内核驱动也算有了一些基本的了解吧,后来也做过一些基于Linux内核的驱动开发,像基于Android的CC1101高频模块的驱动开发,...
  • JansonZhe
  • JansonZhe
  • 2015年08月04日 09:56
  • 2259

Android中HAL如何向上层提供接口总结

转自:http://blog.csdn.net/flydream0/article/details/7086273 参考文献: http://blog.csdn.net/luo...
  • mcgrady_tracy
  • mcgrady_tracy
  • 2015年03月12日 17:11
  • 996
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android HAL实践(一):Mini6410开发板上的mokoid
举报原因:
原因补充:

(最多只允许输入30个字)