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

来源:互联网 发布:搜房帮经纪人登录端口 编辑:程序博客网 时间:2024/06/11 07:49

实际上此篇才是适配旅程真正的起点,读者务必掌握此篇内容才能真正开始编译适配。

在第一篇基础知识里讲过,内核代码由厂商发布,系统代码网上可以同步得到。
内核与系统这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-stablerepo 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等本文重点不在这里也就不再提了。

2 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电缝纫机扎快了上线有套那是怎么办 老式缝纫机底线总夹梭子上怎么办 两个月宝宝脸一边大一边小怎么办 炒股入金10万亏3万怎么办 如果一支股票有好几个庄家怎么办 浦发信用卡查询密码被锁定怎么办 浦发信用卡输错密码被锁定怎么办 浦发手机银行查询密码锁定怎么办 宝宝吃母乳没吃饱就睡着了怎么办 量柱画线不是方屏电脑怎么办 夏天卧室开空调太干了怎么办 健身房锻炼手臂抻的肌肉疼怎么办 人累了可以休息 心累了怎么办 上来两天班感觉不想做了怎么办 休产假的时候公司解散了怎么办 上三天班老板不给结工资怎么办 老师说孩子上课纪律不好我该怎么办 大班的孩子记不住拼音怎么办呢 家长跟孩子沟通出现问题该怎么办? 如果孩子入学分配出现问题该怎么办 2岁多的宝宝喜欢动手打人怎么办 儿童新长出的大门牙像两边撇怎么办 被烫伤了怎么办的活动反思怎么写 生完孩子脸上起蝴蝶斑了怎么办 鼻子部位突然长了晒斑怎么办 我脸上长有日晒斑.该怎么办 做为小领导同事不听你的怎么办 二年级的小孩叫写作业不听怎么办 苹果手机微信出现黑框怎么办 百度网盘下载原画视频会闪退怎么办 已发布的公众号推文段落重复怎么办 谷歌商店找不到方舟手游怎么办 染头发的颜色弄到衣服上怎么办 橡皮把桌面油漆弄掉了怎么办 手机被调成静音不知道放哪了怎么办 金丝熊吃大米吃撑了怎么办 部落有可疑记录被暂时禁封怎么办 鼻子通向嘴那里痒得难受怎么办 小孩上嘴唇中间的连线碰掉了怎么办 秋田犬夏天退毛严重么 怎么办 初中数学基本没学过高中怎么办