Android内核开发:源码的版本与分支详解

转载 2015年11月19日 19:46:51

我想很多初学者或许跟我一样,看完Android源码下载相关的文章以后,就开始兴致勃勃地去下载Android源码了,但是下载完了源码后,有没有像我一样产生如下几个困惑呢?


(1) Android版本有哪些分支可用?每个分支的TAG是什么?


(2) Android源码下载完了怎么没有看到Linux内核代码?Android源码对应Linux内核是否可以从kernel.org官网去下载?Android对标准的Linux内核做了哪些修改?


(3) Android源码分支与Linux版本分支的对应关系是什么样的?高版本的Android源码能否使用低版本的Linux内核?或者低版本Android源码能否使用高版本的Linux内核?


(4) 开发板厂商提供的Android源码与AOSP官网下载的Android源码是什么关系呢?


作为我的《Android内核开发》系列文章的第三篇,本文主要来解答一下上面提到的几个问题。


1.  Android版本有哪些分支可用?每个分支的TAG是什么?


Android官网详细地介绍了当前Android的各个版本名称、Version、对应的API Level、Branch TAG、以及Supported devices,该链接地址如下:


http://source.android.com/source/build-numbers.html


由于官网被墙,这里我也给出了一份保存下来的离线html文档,你可以下载下来用浏览器打开查看,地址如下:


https://github.com/Jhuster/AOSP/tree/master/documents


当然,想查看当前可用的Android源码分支和版本,也可以在下载好的Android源码根目录下执行如下命令:


$ git --git-dir .repo/manifests/.git/ branch -a

或者

$ cd .repo/manifests
$ git branch -a | cut -d / -f 3


得到的结果示例如下(只截取了部分):


技术分享


那么,如果你想切换到其他Android分支,只需要重新执行 repo init 和 repo sync 即可,示例如下:


$ repo init -b android-4.2.2_r1 
$ repo sync


2.  Android源码与Linux内核代码的关系?


文章开头提到的第二个问题主要涉及到Android源码与Linux内核代码的关系,我们首先要了解一个重要的概念:


Android并没有使用标准的Linux内核,而是做了很多的修改。


Android对标准的Linux内核代码做了大量的剪裁和优化,并且添加了许多特有的代码,主要包括:自定义UI系统,采用Bionic Libc库代替glibc库,添加Gold-Fish平台,编写专有的驱动程序,如Binder、Logger、PowerManager等等。


由于版权分歧等原因,这些修改并没有merge到Linux主分支中去,因此,我们不能直接从Linux Kernel的官网(kernel.org)去下载适用于Android源码的Linux内核代码,而是要到Google官网提供的kernel网址去下载经过修改后的Linux内核代码。


Google提供了多个版本的Linux Kernel,分别对应不同的设备或者厂商版本,你可以通过 git clone 命令来完成下载,如下所示:


技术分享   

如果你只是使用Android模拟器来跑Android内核,那么就可以选择goldfish版本作为你的Linux Kernel,如果你手头有上述内核支持的设备,那么,你就下载对应的kernel即可。


那么,如果你手头的设备或者开发板不在上述支持的列表中怎么办呢?


放心,一般而言,Android开发板的厂商会在上述Linux Kernel的基础上针对自己的开发板修改适配出一套可用的Linux Kernel的,你只需要到厂商的官网或者论坛查找对应的代码即可。对于自己设计开发的板子,则需要下载相近的kernel代码(如CPU型号相同),然后针对性的修改和移植即可。


3.  Android分支与Linux分支的关系


Android版本迭代更新的过程中,Linux Kernel也在不断的迭代更新,因此,往往新的Android版本会使用较新的Linux内核分支,具体的分支对应关系我在Google官网上没有找到,但是在维基百科和stackoverflow上找到了一份表格,如下所示:


技术分享    


维基百科讲的更加详细,具体介绍了每一个Android分支到底有哪些修改,地址如下:


http://en.wikipedia.org/wiki/Android_version_history


一般情况下,不同的Android分支最好能使用对应的Linux内核分支版本,这样才能保证系统的正常编译通过和运行无误,但是,也可以详细了解某个Android版本对应的Linux内核到底做了哪些修改,并且把这些修改移植到其他版本的Linux内核上,也是可以实现低版本的Android运行在高版本的Linux内核上的,当然,反过来难度比较大,因为一般高版本的Android内核会用到高版本的Linux内核特性,移植起来会麻烦很多。


4.  厂商提供的Android版本与AOSP的关系


很多厂商会提供专门的针对该开发板的Android源码下载地址,那么,我们是否可以直接使用从AOSP官网上下载的Android源码呢?


厂商一般会对官网的Android源码进行修改,但是修改的部分一般会打个patch包,因此,你只需要下载厂商提供的patch包,并且将手头的官网上下载的Android源码切换到对应的分支,打上patch补丁即可。

本文出自 “对影成三人” 博客,请务必保留此出处http://ticktick.blog.51cto.com/823160/1654759

AOSP分支切换

有时,我们需要在不同的AOSP的分支之前切换。在Android官网上Google并没有关于不同分支之前如何切换的说明,那么最笨的方法是使用另外一台虚拟机(我习惯使用虚拟机)再同步一遍代码,但是这样耗时...
  • pcsxk
  • pcsxk
  • 2016年09月02日 17:23
  • 2110

Android内核学习笔记

一、init 二、binder 《ANDROID框架揭秘》第六章 - 第十章 以生动的形式讲述了binder,但是不够详细。值得参考。 《Android系统源代码情景分析》第五章 描叙详细,但是不...

第二期 AOSP 环境搭建、下载和编译 《手机就是开发板》

Android最初是由Andy Rubin基于linux内核开发出来用于数码相机的操作系统,Android名字的原型是Andy Rubin小时候最喜欢的一个游戏人物,logo的原型是UI设计师在看到卫...

Android源代码 之 源代码分支、版本号、支持设备列表

Android内核开发:在源码树中添加新的app应用

本文是《Android内核开发》系列的第十二篇文章,上一篇文章介绍了如何从源码中删除出厂的app应用,本文则在此基础上,详细介绍一下如何在Android内核源码树中添加一个新的app应用。 ...

在Ubuntu上为Android系统编写Linux内核驱动程序

在智能手机时代,每个品牌的手机都有自己的个性特点。正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了。据统计,截止2011年5月,AppStore的应用软...

Android的环境搭建、内核和源码build

Android源代码下载和编译: http://source.android.com/source/initializing.html 按照官方指导,成功Build! Android开发环境...

Android 内核开发初步

Android 的内核是 Linux ,自从 linux 内核版本 3.3 开始,Android 对 Linux 的修改已经整合进入 Linux 内核树 . 但是从 kernel.org 获取的代码...

android源码查看所有分支切换分支

cd .repo/manifests git branch -a

Android源码编译整理总结

原文地址:http://www.cnblogs.com/hoji-real/articles/2144892.html 新工作,要求了解Android源码的编译过程,故誊抄以备查看: 1.必要...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android内核开发:源码的版本与分支详解
举报原因:
原因补充:

(最多只允许输入30个字)