笔者近期做了关于联想新出的一款pad (TAB 4 8 plus)代号tb8704f 的CM 系统的适配和移植工作。其中走了不少弯路,也学习了不少知识,有时候弯路也是一种成长,看到了不一样的风景。
废话不多说,直接进入主题。分为以下几个部分讲解:
1、fastboot 解锁;
2、前期准备工作;
3、源码编译;
4、recovery 适配;
5、zip 包升级;
6、bug 解决;
fastboot 解锁
拿到机器后,第一件事,查找资料解锁bootloader,机器型号不同解锁方式不同。目前三星的机器都可以解锁,华为部分机器可能要付费,联想有些不能解锁。
不能解锁的机器,如果是高通的cpu可以尝试用高通的刷机工具进行刷机。
前期准备
如果能够拿到官方刷机包,包括boot.img、recovery.img、system.img等,那么你已经成功了走了第一步。img 文件的解包就不赘述了,资料很多。
从boot.img中提取 kernel(dt.img)、rc 文件、系统分区表fstab等;recovery.img 同boot.img;从system.img 中提取hardware 层的so包,驱动ko包,系统配置文件etc等。
如果拿不到官方包,那只能走hard 模式了,首先看看能否通过adb 提取一些我们需要的资源文件,比如,hardware 层的so包,驱动ko包,系统配置文件etc,系统分区表等;
如果不行的话,只能刷了recovery 之后通过recovery 进入system分区提取。
有了这些之后,就可以进行源码的组织编译了。
源码编译
下载到Android源码(aosp 或者 CM)之后,在device 和 vendor 目录下建立自己适配机器的目录。
在device/lenovo/tb8704f/ 目录下文件包含以下文件,我们这里可以参考cm 官方编译的产品目录自己组织。
├── Android.mk
├── audio
├── bluetooth
├── BoardConfig.mk
├── configs
├── data-ipa-cfg-mgr
├── device.mk
├── extract-files.sh
├── full_tb8704f.mk
├── gps
├── include
├── init
├── kernel
├── kernel-headers
├── keylayout
├── lineage.dependencies
├── lineage.mk
├── overlay
├── proprietary-files.txt
├── README.md
├── rootdir
├── sepolicy
├── setup-makefiles.sh
├── system.prop
├── system.prop.bak
├── tftp.mk
└── wifi
其中BoardConfig.mk
至为重要,直接关系移植成败。以下为这款设备组织的BoardConfig.mk内容:
文件中设定了cpu、gpu的架构、系统位数、分区信息、kernel启动参数和其它一些系统硬件配置和编译参数。
在vendor 目录下组织结构,在vendor/lenovo/tb8704f目录下建立:
├── Android.mk
├── BoardConfigVendor.mk
├── proprietary
│ ├── app
│ ├── bin
│ ├── etc
│ ├── framework
│ ├── lib
│ ├── lib64
│ ├── media
│ ├── priv-app
│ └── vendor
└── tb8704f-vendor.mk
proprietary 目录下为对应system分区下的各个模块,我们要在这里面放入我们无法编写的so、bin文件或者配置文件等
这些文件即为前期准备的那些文件
recovery 适配
组织好device 和 vendor 目录后,编译recovery.img 通过fastboot 或者官方工具刷入,调试recovery,其中关键点在于kernel
和init.rc、分区表文件的正确性。一般这几个文件正确都能够正确启动。recovery 为我们后面刷入zip 升级包提供入口,也为我们恢复出厂和
跟新升级提供入口。
zip 包升级
通过再recovery 中adb sideload 进行升级。原本加密的设备分区要先进行格式化
bug 解决
bug 解决为分两个部分:1)开机画面之前的bug 2)进入开机画面之后的bug
1) 如果设备刷入boot.img 之后无法进入开机画面,第一步要确保adb 能够启动,至于如何让adb 正确启动,一般和权限相关,不在这里详述。
无法进行开机画面一般为surfacefinger错误,检查gralloc composer 和 gpu 相关;
2) 进入开机画面之后,恭喜你,已经完成一大步。后面多为权限问题和配置文件问题,对应log 一步步解决即可。
以上粗略讲解了一下如何移植Android 系统,详细介绍可以写一本小册子了,具体问题大家可以遇到之后一起讨论