您的位置:首页 > 编程语言

Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(3):寻找正确的代码版本

2015-02-22 00:27 423 查看
实际上此篇才是适配旅程真正的起点,读者务必掌握此篇内容才能真正开始编译适配。

在第一篇基础知识里讲过,内核代码由厂商发布,系统代码网上可以同步得到。

内核与系统这2者的代码版本必须相互配合,这就意味着只有2条路:

方法一:内核版本不变,找对应的系统代码(可能不是最新的代码);

方法二:系统代码固定(取最新的),手工升级厂商提供的内核代码以配合最新的系统代码(当然没有降级这种做法)。

基础知识里也讲过,如果能看懂、修改、编写内核代码,适配系统当然得心应手,也就无需遵循什么条条框框,可惜这个方法并不适用于大众。

本系列文章面向的是一般文化水平,可能无编程基础的普通人,所以只能选方法一,当然掌握了方法一,有一定基础的读者也可以更进一步,尝试升级内核的方法,此点会在此篇文章里稍微介绍。

注意:虽然本文面向一般大众,但笔者认为至少有代码插桩经验的rommer来尝试比较合适

一、找官方内核版本的技巧

MS8960平台找版本十分容易,但以下介绍的方法估计不能用于msm8974平台

方法1:log法

用官方系统即可,取从开机到进系统这段时间的log,并搜索“AU_LINUX_ANDROID”关键字

方法2:grep法

把官方rom解压到linux里,然后在system文件夹下打开终端,用命令搜索

grep –r “AU_LINUX_ANDROID”

如果是4.4系统,至少会搜索到2个lib,用ultraedit打开,然后仍然搜索关键字就能找到

二、依据内核版本找到对应的release tag

注意事项:高通的开源站点在国内(北京)设有分站,所以访问速度理应很快;但同一个域名在国外也有站点,如果你使用了google的dns服务器,那么会解析成国外地址,造成访问速度很慢;这里有一个方法来判断,先在linux下ping codeaurora.org,并记下ip地址,然后到这里查询此ip http://ip.chinaz.com/,如果显示地址为美国,那么读者需要修改真实电脑的网卡ip设置,不要使用google的dns解析服务器。

1.举例

假设我们上一步找到的版本为:

AU_LINUX_ANDROID_KK_2.7_RB1.04.04.02.007.050

2.同步manifests

在linux下,创建一个文件夹例如/opt/msm-aosp

在这个新建的文件夹中打开终端,并输入命令

repo init -u git://codeaurora.org/platform/manifest.git -b release –repo-url=git://codeaurora.org/tools/repo.git –repo-branch=caf-stable

20M的宽带的话,同步速度至少有1MB/s

如果是首次使用git,则需要用命令设置一下用户名和邮箱,按照提示设置即可,下为例子

git config –global user.name “benjaminwan”

git config –global user.email “benjaminwan@home.com”

同步完成后,启用”查看”->”显示隐藏文件”

可以看到当前目录下有个.repo文件夹,进入会发现有个manifests文件夹,这个就是存放tag的地方了

3.搜索xml

在manifests文件夹下用文件浏览器的搜索功能,关键字就填入之前找到的内核版本

或用命令
find . -name "*AU_LINUX_ANDROID_KK_2.7_RB1.04.04.02.007.050*"


可以找到caf_AU_LINUX_ANDROID_KK_2.7_RB1.04.04.02.007.050.xml这个文件,如果仅仅是找到正确的版本,其实到这里就已经结束了,但为了更深入地解释,就有了接下来的内容。

现在我们打开它,解释一下这个文件的结构

project代表某个项目,path代表这个项目同步后最终放在哪个目录,revision就是版本了,upstream是分支号



接下来找到kernel/msm这项,并记下它的revision:e1926e0c614b3e352b128dd0c7d3c7a914cfbe28

然后以此revision来搜索

grep -r “e1926e0c614b3e352b128dd0c7d3c7a914cfbe28”

接下来可以找到以LNX开头的3项:

LNX.LA.2.7.4-00500-8960.0.xml

LNX.LA.2.7-05010-8064.0.xml

LNX.LA.2.7-05010-8960.0.xml

通过观察文件名,可以排除第一项,因为2.7.4这个分支号不对,前面我们看到的分支号是2.7

剩下的2项其实内容一样,读者自己用文件对比工具打开对比一下便知。

那么最终正确的tag就是LNX.LA.2.7-05010-8960.0

4.高通的release页面

https://www.codeaurora.org/xwiki/bin/QAEP/release

搜索一下是否存在这个tag,以验证信息对不对



至此就完成了找版本的步骤

三、同步系统代码

repo init -u git://codeaurora.org/platform/manifest.git -b release -m LNX.LA.2.7-05010-8960.0.xml --repo-url=git://codeaurora.org/tools/repo.git --repo-branch=caf-stable

repo sync


checkout出来后的代码就是这个版本的官方内核所需要的对应版本的msm-aosp系统代码了

同步完成后,.repo这个隐藏文件夹的内容将会达到20G多的大小,而且在后续的适配中已经不再需要这个文件夹了。这个是全仓库代码,当你下次还想同步的时候,可以仍然用这个.repo同步出其它任意tag版本的代码。

既然如此,读者可以把这个.repo文件夹用压缩工具压缩保存,压缩率就选无压缩即可,以节省linux的磁盘空间。

而同步出来的代码,建议读者建立一个新的文件夹保存,文件夹的命名就以版本号为名,以免以后时间久了忘记自己同步的代码版本,例如在本例里笔者就以msm-aosp_LNX.LA.2.7-05010-8960.0这个名字来命名文件夹

然后即可删除每个文件夹下的.git文件,这个文件是git用来管理的,编译无需这些文件,读者可参考第2篇文章用命令find -name ‘.git*’ |xargs rm –rf来删除这些多余的文件

最后,建议读者再把现在这个代码文件夹再用压缩工具压缩备份一次,因为后面还要更改多处代码,备份以免万一。

请不要觉得麻烦,因为咱们后面做的适配比这麻烦百倍,如果读者在这里已经麻烦得受不了,那么就请您到这放弃吧。

四、延伸知识

1.相近的版本

通过上面的范例可以知道,高通的release tag有一定的命名规范

LNX.LA.2.7-xxxxx-8960.0.xml

中间5个xxxxx为数字

那么我们试着查找一下类似的文件

find . -name "LNX.LA.2.7-*-8960.0.xml"


./LNX.LA.2.7-02710-8960.0.xml

./LNX.LA.2.7-01210-8960.0.xml

./LNX.LA.2.7-03110-8960.0.xml

./LNX.LA.2.7-02410-8960.0.xml

./LNX.LA.2.7-05210-8960.0.xml

./LNX.LA.2.7-02110-8960.0.xml

./LNX.LA.2.7-04010-8960.0.xml

./LNX.LA.2.7-03910-8960.0.xml

./LNX.LA.2.7-01910-8960.0.xml

./LNX.LA.2.7-06310-8960.0.xml

./LNX.LA.2.7-04310-8960.0.xml

./LNX.LA.2.7-02810-8960.0.xml

./LNX.LA.2.7-02910-8960.0.xml

./LNX.LA.2.7-04410-8960.0.xml

./LNX.LA.2.7-04710-8960.0.xml

./LNX.LA.2.7-01110-8960.0.xml

./LNX.LA.2.7-05010-8960.0.xml

如何知道这些tag具体是哪个android版本呢?

通过review页面来看,例如

https://www.codeaurora.org/cgit/quic/la/platform/build/tag/?id=LNX.LA.2.7-06310-8960.0

id=这边可随意更改为tag名称

然后按download,把这个revision的代码下载回去

打开core/build_id.mk就可以看到export BUILD_ID= KTU84L

打开core/version_defaults.mk就可以看到PLATFORM_VERSION := 4.4.3

2.升级内核代码的原理

前提当然是准确的找到内核当前的版本了。

官方内核肯定是基于某个高通内核版本进行修改的。

如果没安装git图形用户工具,请先安装一下

apt-get install gitk或者apt-get install qgit

假设我们当前的版本是05010,并且已知为android 4.4.2_r1 KOT49H

现在我们知道后面还有06310,并且版本为android 4.4.3 KTU84L

想要把内核升级到适配android 4.4.3 KTU84L版本该怎么做呢?

首先把高通的内核代码仓库同步下来

新建一个文件夹例如/opt/msm-kernel

git clone git://codeaurora.org/quic/la/kernel/msm

等同步完成,进入刚同步好的文件夹,打开终端

这里介绍一个新的命令gitk tagA..tagB或qgit tagA..tagB

解释一下这个命令的意思,以图形方式显示从tagA到tagB之间经历的变化,示范如下

gitk LNX.LA.2.7-05010-8960.0..LNX.LA.2.7-06310-8960.0



qgit LNX.LA.2.7-05010-8960.0..LNX.LA.2.7-06310-8960.0



读者就可以看到从05010到06310,高通标准内核经历了哪些变化。

那么以此为参考,去升级官方内核代码就行了。

至于是否有比手工升级更为方便的方法,当然方法各种各样。

git rebase、git merge、git cherry-pick等本文重点不在这里也就不再提了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐