Android在新平台上的移植

时间:2023-02-04 11:19:13

最近公司退出了新一代的arm芯片,硬件有改变的还有PMU,Audio,Graphic, TouchPanel。

 

由于大部分硬件都没有改变,所以我们的思路很简单,就是在原来的软件版本上进行修改。另外两个同事忙活了一个月左右的时间,先后跑起来了XLoader,Uboot和Linux Kernel。但是Android死活都起不来,看了几次启动的log,最后一句都是I/ActivityManager(***): Memory class: 16。我又重复启动了十几遍,发现并不是每次都挂在这句log之后。肯定是logcat不能及时将log设备文件中的log读出来的原因,开始想办法。试过直接向tty,console写都不行,被系统重定向了。向写文件同步写(O_SYNC)可以解决这个问题。

 

 

一. Graphic

 

一番追查后发现是graphic出问题了,问了硬件人员得知新芯片的graphic有改变还不能用,晕。没办法,leader说硬件没实现,用软件也要进android桌面。

SurfaceFlinger是system_server在system_init.cpp里面最早启动的service:

 

Android在新平台上的移植

 

1. 去掉硬件实现的graphic库,最简单的方法:

删除/system/lib/egl/libGLES_PlatformName.so

      /system/lib/hw/gralloc_PlatformName.so

也可以修改配置文件

 

2. 修改copybit的makefile:

framework/base/opengl/libagl/Android.mk

#LIBAGL_USE_GALLOC_COPYBIT := 1

LIBAGL_USE_GALLOC_COPYBIT := 0

 

 

3. 启动还会有问题。软件实现默认每个surface两块buffer,申请第三块时会出错

base/FramebufferNativeWindow.cpp:

在LOGD("triple bufferring");后面加上

 

还需要把gralloc.h中相关的的数据结构定义加进来。

 

经过这么一番折腾之后android可以显示最上面的状态栏,但是桌面还是出不来.

 

 

2. PMU

还是死机,仔细看log发现有ShutdownActiviy不知不觉就运行起来了。查下去,原来是PMU驱动出问题了。

 

3. Other

最后是:能注掉的启动脚本,能关的驱动,能关的service,能删的apk。apk最后删的只剩下Launcher2.apk, SettingsProvider.apk。再启动,终于进了Android桌面,看到久违了的大海和蓝天。虽然不能进行任何操作,但是可以让driver的同事调touchpanel了。下一步从Launcher开始,自上而下把其他的功能也加进去。