我想很多初学者其实和我一样。 看完Android×××相关文章后,他们开始热情地下载Android源码android源码编译内核,但是下载源码后,他们是否也像我一样形成了以下疑惑呢?
(1) Android版本有哪些分支? 每个分支的 TAG 是什么?
(2)为什么Android×××写完后没有看到Linux内核代码? Linux内核对应的Android源码可以从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、以及支持的设备。 链接地址如下:
由于官网被屏蔽,这里我还给出了一个保存的离线html文档,大家可以下载下来用浏览器打开,地址如下:
当然,如果你想查看当前可用的Android源码分支和版本,也可以在下载的Android源码根目录下执行以下命令:
$ git --git-dir .repo/manifests/.git/ branch -a 或者 $ cd .repo/manifests $ git branch -a | cut -d / -f 3
得到的结果示例如下(仅截取部分):
然后,如果想切换到其他Android分支,只需要重新执行repo init和reposync即可。 示例如下:
$ 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等
由于版权差异和其他激励因素,这些更改尚未合并到 Linux 主分支中。 因此,我们不能直接从Linux Kernel官网(kernel.org)下载Android源代码的Linux内核代码,而是去Google官网提供的内核URL下载修改后的Linux内核代码。
Google提供了多个版本的Linux Kernel,对应不同的设备或厂商的版本,可以使用git clone命令完成下载,如下图:
如果您只是使用Android模拟器来运行Android内核,那么您可以选择goldfish版本作为您的Linux内核。 如果您有支持上述内核的设备,那么您可以下载相应的内核。
那么android源码编译内核,如果您拥有的设备或开发板不在上述支持列表中怎么办?
放心,一般来说,Android开发板厂商都会在上述Linux Kernel的基础上,为自己的开发板适配一套可用的Linux Kernel。 只需要到厂家官网或者峰会上就可以找到对应的代码。 就是这样。 对于自己设计开发的板子,需要下载相似的内核代码(比如相同的CPU型号),然后进行针对性的修改和移植。
3、Android分支与Linux分支的关系
在Android版本的迭代更新过程中,Linux Kernel也在不断迭代更新。 因此,新的Android版本通常会使用更新的Linux内核分支。 我在Google官网上没有找到具体的分支对应关系,但是在Wikipedia中,在stackoverflow上找到了一个表格如下:
维基百科已经越来越详细了,专门介绍了每个Android分支做了哪些改变。 地址如下:
一般来说,不同的Android分支最好使用对应的Linux内核分支版本,这样才能保证系统的正常编译和运行。 不过,你也可以详细了解某个Android版本对应的Linux内核是做什么的。 改变,并将这种改变移植到其他版本的Linux内核上,也可以实现低版本的Android运行在高版本的Linux内核上。 当然,反过来就比较困难了,因为通常高版本的Android内核都会用到高版本Linux内核的特性,移植起来会很麻烦。
4、厂商提供的Android版本与AOSP的关系
很多厂商都会为这款开发板提供专用的Android×××地址,那么,我们可以直接使用从AOSP官网下载的Android源码吗?
厂家通常会在官网上更改Android源代码,但更改的部分通常是补丁包,因此您只需下载厂家提供的补丁包,并将从官网下载的Android源代码切换到对应的分支,打补丁即可。
5. 总结
Android源码的版本和分支的介绍到此结束。 如有疑问,请留言或写信至lujun.hust@gmail.com进行沟通。 也欢迎您关注我的新浪微博@鲁_俊,获取最新文章和资讯。