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

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

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

  1. 鸿蒙系统研究之五:替换 AOSP 预编译库,关闭 SELinux

    这是我的鸿蒙系统研究系列文章的第五篇,有兴趣还可以看看前面的文章: 鸿蒙系统研究第一步:从源码构建系统镜像 鸿蒙系统研究之二:内核编译 鸿蒙系统研究之三:迈出平台移植第一步 鸿蒙系统研究之四:根文件系 ...

  2. linux+4.4+android,Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法

    Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法跟Ubuntu 12.04 - 13.10 以及jellybean编译环境配置没多大区别, 顺便记录下而已: 64 ...

  3. Freeline - Android平台上的秒级编译方案

    Freeline 技术揭秘 Freeline是什么? Freeline是蚂蚁金服旗下一站式理财平台蚂蚁聚宝团队15年10月在Android平台上的量身定做的一个基于动态替换的编译方案,5月阿里集团内部 ...

  4. 如何编译各平台使用的库-以编译tolua为例

    转载注明出处: https://www.jianshu.com/p/5a35602adef8?appinstall=0 做U3D手机游戏,最热门的技术组合是c#+lua,使用lua是因为可以热更新,而 ...

  5. 在arm64平台kkfileview和LibreOffice的编译使用

    在arm64平台kkfileview和LibreOffice的编译使用 1.手动编译LibreOffice 1.1在arm64的机器上启动一个docker镜像 2.开始编译kkfileview的doc ...

  6. Eclipse使用gradle编译时,使用固定的jdk版本进行编译(修改gradle的jdk编译版本)

    很多时候我们使用多个版本的jdk,比如说,用的是1.7 ,开发环境用1.8 那么经常碰到编译后的包是1.8版本的,虽然设置了1.7的,因为很多时候我们使用打包工具了. 1.7和1.8有个问题就是1.8 ...

  7. gradle 指定java版本_Eclipse使用gradle编译时,使用固定的jdk版本进行编译(修改gradle的jdk编译版本)...

    很多时候我们使用多个版本的jdk,比如说,用的是1.7 ,开发环境用1.8 那么经常碰到编译后的包是1.8版本的,虽然设置了1.7的,因为很多时候我们使用打包工具了. 1.7和1.8有个问题就是1.8 ...

  8. 预编译头文件来自编译器的早期版本_Debug

    1.报错形式 用Visual Studio2010 编写C++程序,编译出现错误: 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反) 2.解决方法 3.原因分析 ...

  9. php编译优化,浅析使用Turck-mmcache编译来加速、优化PHP代码

    php_screw确实很不错,但是只能起到加密的作用,并没有加速和优化的作用. 下面我们来看看:Turck MMCache它的作用是通过对php代码的编译来加速.优化php代码,我们如果发布的php代 ...

  10. VS2003编译后的网站如何修改代码

    VS2003编译后的网站,如果没有源代码,而要修改里面的代码时,可以以以下方式解决: 反编译dll,把找出cs代码文件,然后重新建一个类项目,把此文件中的代码修改后重新生成dll,放在编译的网站中的b ...

最新文章

  1. re.match()用法详解
  2. 微软企业库4.1学习笔记(六)创建对象
  3. NET MVC3 中的枚举多语言实现,DescriptionPairAttribute
  4. 从 WordCount 到 MapReduce 计算模型
  5. c语言流程图char,求救!各位大神,用程序流程图怎么描述下面这个???
  6. 2021年的最后7天,和我的伙伴们合个影吧
  7. Orleans 知多少 | Orleans 中文文档上线
  8. JAVASE阶段流程图
  9. Java前端笔记-后端Springboot,前端vue,Nginx使前后端分离
  10. elementUI多选框组件:多选数组,取值问题
  11. JavaScript-关于变量
  12. albian开发笔记四
  13. 使用Sqlloader处理数据
  14. 英语词性的分类及用法详述
  15. 思科路由器和交换机的硬件结构
  16. 苹果计算机符号怎么打开,Mac电脑如何输入command(⌘)、option(⌥)、shift(⇧)等特殊符号...
  17. 019--python内置函数
  18. 朗月孤舟一尺半,天堂地狱八十年。
  19. 教你标准音标发音的网站
  20. html加css做成的简易木马轮播图

热门文章

  1. 【转】Steam 开发者收入计算
  2. 推荐《现在,发现你的优势》
  3. 阿里电话面试被虐经历
  4. 《计算机操作系统》| 第一章 操作系统引论 知识梳理
  5. 【论文翻译】从零开始PointNet论文分析与代码复现
  6. 常用电压电流转换原理图
  7. 人生中第一次在优品拍拍买二手手机的经历
  8. 刷题——必备十二大网站
  9. 重庆计算机一级跟全国计算机一级都考什么,全国计算机等级考试一级都考什么内容?...
  10. Qt软件的发展历史及优势特点