转自: https://blog.csdn.net/xyyjxa/article/details/77568625

笔者近期做了关于联想新出的一款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

  • 如果设备刷入boot.img 之后无法进入开机画面,第一步要确保adb 能够启动,至于如何让adb 正确启动,一般和权限相关,不在这里详述。 无法进行开机画面一般为surfacefinger错误,检查gralloc composer 和 gpu 相关;
  • 进入开机画面之后,恭喜你,已经完成一大步。后面多为权限问题和配置文件问题,对应log 一步步解决即可。

以上粗略讲解了一下如何移植Android 系统,详细介绍可以写一本小册子了,具体问题大家可以遇到之后一起讨论

标签: aosp

添加新评论