Android准备往OpenWrt上移植
Android准备往OpenWrt上移植
这两天全力编译android,cpu 4个线程全开,磁盘大吞吐的存取,导致温度过高,编译中间笔记本保护性质的自动休眠关机。
不说废话,进入正题。
友善的mini6410自带的是android-2.3.4,而tiny210自带android-2.3.1(以及Android-4.0.3),我想把他们统一到android-2.3.7_r1,然后放到OpenWrt框架下。
之前nbd维护的android-1.6 for OpenWrt早就因为google android服务器的更换而不能够正常运行了。而nbd现在维护的是android 4.0,但是据他自己说只有dalvik可能能够运行,但是我没有编译成功。
总之,在openwrt下的qpe已经完成的情况下,我想把android拉到openwrt下。
目前进展:
[cpp]
ok 0 安易做图eyond compare,或使用diff脚本,测试、对比,得到files-patches;
ok 1 编译tiny210自带的android-2.3.1源代码;
ok 2 编译原始android-2.3.1的goldfish;
ok 3 编译原始android-2.3.1 + tiny210的files-patches补丁;
4 精简2.3.1补丁,去除不需要的补丁,再往2.3.7上移植;
5 分析android和nbd的源代码,把2.3.7移植到openwrt框架上;
升级路线:
[cpp]
|--------------------------------------------------------
| (低原始) --\
| =>得到 (低差异) --\
| (低已好) --/ =>结合 得到 (高版本)
| (高原始) --/
|--------------------------------------------------------
原则只添不减(除非不可共存,相冲突)!
android的移植按如下流程:
1 android linux内核的普通驱动移植,让内核可以在目标平台上运行起来。
2 正确挂载文件系统:确保内核启动参数,和android源代码system/core/rootdir目录下的init.rc中的文件系统挂载正确。
3 调试控制台,让内核启动参数中的console参数,和android源代码system/core/init/init.c中的console_name设置和硬件保持一致。
4 打开android相关的驱动(logger,binder等),串口输入logcat看logger驱动起来,没有的话调试logger驱动。
Android源代码结构分析:
[cpp]
----------------
├── Makefile 全局的Makefile
├── build 系统编译规则和配置所需要的脚本和工具
----------------
├── prebuilt 各种平台编译工具链
├── bionic 基础C库源代码
----------------
├── frameworks * Android应用程序的核心框架层(java及C++语言)
├── system * 底层文件系统/库/应用及组件(C语言)
├── dalvik JAVA虚拟机
├── external android使用的一些额外开源库
├── libcore 与媒体播放框架代码相关
----------------
├── packages 各种应用程序实例
├── development 程序开发所需要的实例/模板/工具
----------------
├── ndk
├── sdk
├── cts Android CTS兼容性规范测试用例
----------------
├── vendor * 厂商定制代码
├── device * 厂商定制代码
├── hardware * 一些与硬件相关的库,部分厂家开源的硬解适配层HAL代码
├── kernel * Linux源代码
├── bootable 引导加载器
├── recovery 与目标的恢复功能相关
----------------
Android移植主次顺序:
[cpp]
----------------
├── kernel * (自带,完成) Linux源代码
----------------
├── build (1稍变化)(针对64 JDK) (变化要改) 系统编译规则和配置所需要的脚本和工具
----------------
├── vendor * (2最主要)(完成,相同) (变化要改) 厂商定制代码
├── device * (2最主要)(完成,相同) (变化要改) 厂商定制代码
├──+frameworks *x (2最主要)(完成,不同,未改动docs,core/tests) (变化要改) 和硬件有关的核心框架中C/C++语言要根据情况修改
----------------
├── system * (3主要)(完成,相同) (变化要改) 底层文件系统/库/应用及组件(C语言)
├── hardware * (3主要)(完成,相同) (变化要改) 一些与硬件相关的库,部分厂家开源的硬解适配层HAL代码
├── external x (3主要)(完成,只添加libusb未删除tcpdump) (变化要改) 依赖的额外开源库
├── libcore x (3次要)(变化,但未改,不同) (变化可不改) 与媒体播放框架代码相关
----------------
├── packages (4次要)(完成,相同) (变化要改) 各种应用程序实例
├──+frameworks x (4次要)和图像界面有关的java程序根据需要修改
----------------
├── development (4次要,变化)(完成,相同) (变化可不改) 程序开发所需要的实例/模板/工具
├── cts (0变化,不改) Android CTS兼容性规范测试用例
├── ndk (0变化,不改)
├── prebuilt &nbs
补充:移动开发 , Android ,