Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(3):寻找正确的代码版本
2015-02-22 00:27
423 查看
实际上此篇才是适配旅程真正的起点,读者务必掌握此篇内容才能真正开始编译适配。
在第一篇基础知识里讲过,内核代码由厂商发布,系统代码网上可以同步得到。
内核与系统这2者的代码版本必须相互配合,这就意味着只有2条路:
方法一:内核版本不变,找对应的系统代码(可能不是最新的代码);
方法二:系统代码固定(取最新的),手工升级厂商提供的内核代码以配合最新的系统代码(当然没有降级这种做法)。
基础知识里也讲过,如果能看懂、修改、编写内核代码,适配系统当然得心应手,也就无需遵循什么条条框框,可惜这个方法并不适用于大众。
本系列文章面向的是一般文化水平,可能无编程基础的普通人,所以只能选方法一,当然掌握了方法一,有一定基础的读者也可以更进一步,尝试升级内核的方法,此点会在此篇文章里稍微介绍。
注意:虽然本文面向一般大众,但笔者认为至少有代码插桩经验的rommer来尝试比较合适
grep –r “AU_LINUX_ANDROID”
如果是4.4系统,至少会搜索到2个lib,用ultraedit打开,然后仍然搜索关键字就能找到
AU_LINUX_ANDROID_KK_2.7_RB1.04.04.02.007.050
在这个新建的文件夹中打开终端,并输入命令
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的地方了
或用命令
可以找到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
搜索一下是否存在这个tag,以验证信息对不对
至此就完成了找版本的步骤
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来删除这些多余的文件
最后,建议读者再把现在这个代码文件夹再用压缩工具压缩备份一次,因为后面还要更改多处代码,备份以免万一。
请不要觉得麻烦,因为咱们后面做的适配比这麻烦百倍,如果读者在这里已经麻烦得受不了,那么就请您到这放弃吧。
LNX.LA.2.7-xxxxx-8960.0.xml
中间5个xxxxx为数字
那么我们试着查找一下类似的文件
./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
官方内核肯定是基于某个高通内核版本进行修改的。
如果没安装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等本文重点不在这里也就不再提了。
在第一篇基础知识里讲过,内核代码由厂商发布,系统代码网上可以同步得到。
内核与系统这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等本文重点不在这里也就不再提了。
相关文章推荐
- Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(4):验证代码并编写自己的device
- Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(8):wifi与蓝牙
- Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(9):摄像头GPS传感器
- Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(6):音频
- Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(7):信号通讯
- Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(11):一些图片
- Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(1):基础知识
- Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(5):显示、NFC、overlay
- Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(10):其它
- Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(2):开发环境及相关的使用技巧
- Visual Studio 实现 编写一套.net代码,同时编译到 多个平台,多版本的操作笔记
- 求助:windows平台下怎么正确编译及使用faac源代码
- 警告: 无法调试脚本代码。未注册正确的 pdm.dll 版本。
- Android 平台编译 C/C++ 代码!
- 对libtasn1-2.9中windows平台下的代码的编译~
- win tc的一个完整代码,编译正确,但黑屏,请高手帮忙指导你一下!!!
- 编译时出现:请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如 Page 或 UserControl)是正确的
- 编译时出现:请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的。
- Sonar 1.11版本发布,Java代码质量管理平台
- 在Linux和UNIX平台上升级IBM Rational ClearQuest的补丁造成在ClearQuest Web 7.0.x上显示不正确的产品的版本信息