2013-07-29 15:36:00
分享

ROM之家:Linux 2.x内核与Linux 3.x的区别

标签:Linux 2.x,Linux 3.x

  安卓与Linux的关系:

  安卓是基于Linux内核,但不是Linux操作系统。

  “Android是一种以Linux为基础的开放源码操作系统,主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。Android的主要竞争对手是苹果公司的iOS以及RIM的Blackberry OS。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2012年2月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为68.4%。”

  “Android 是运行于 Linux kernel之上,但并不是GNU/Linux。因为在一般GNU/Linux 里支持的功能,Android 大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic 取代Glibc、以Skia 取代Cairo、再以opencore 取代FFmpeg 等等。Android 为了达到商业应用,必须移除被GNU GPL授权证所约束的部份,例如Android将驱动程序移到 userspace,使得Linux driver 与 Linux kernel彻底分开。bionic/libc/kernel/ 并非标准的kernel header files。Android 的 kernel header 是利用工具由 Linux kernel header 所产生的,这样做是为了保留常数、数据结构与宏。”

  严格的版本号:

  2.6 的分支开发都已经很多年了,即使是 3.0 以后的版本也似乎发布了两年以上了。。最上游内核(即 Linus 维护的源,以下称“主流内核”)最活跃的分支的开发以每天几十个补丁的速度更新。你可以想象一下几年下来的差别,没有人能说得清。之所以 Android 用户感觉不到区别,是因为与 Android 设备相关的部分代码更改并不那么大。但这只是最上游的更新,而 Google 为 Nexus 一众设备维护的内核的更新就与 Android 用户息息相关了。还有硬件提供商(如 OMAP,QCOM,三棒等)维护的平台内核源的更新以及 OEM 商发布的内核与用户就更紧密了。

  好了,切入正题!

  对于 Android 而言,可以说 Google 维护的内核就是除了主流内核外所有与 Android 相关的内核源的风向标,因为它是 Boss。Android 新版本特性都由它决定。而这些特性有很大一部分是需要内核支援的,屁如 2.2.3 引入的各种 Tethering,4.1 引入的 VSYNC 以及 Triple Frame Buffer,4.1.2 为高端设备引入的硬件同步(SYNC 驱动,对 KGSL 有影响),以及黄油计划中的 CPU 调度器的 boostpulse 等等。虽然 Linus 在维护主流内核时非常强调不要改变内核 API ,但 Android 世界中的内核部分接口却一直在变,而且相对主流源非常之频繁。这与 Google 这版本的推进 Android 的速度有关。

  所以你在开发社区经常会见到“backport”,即后向移植。目的就是将高版本内核(Google 或硬件提供商)中的特性移植到低版本中。这低版本的内核即是设备厂商提供的为低版本的 Android 写的内核。因为厂商在不为你的设备提供 Android 高版本更新时,他们也不会发布内核更新。所以民间通常的做法就要后向移植以满足民间移植的高版本 Android 系统所需(这里又要提一下我们可爱的ZTE,您属于民间吗?)。其实这些都是临时的解决方法。

  除了后向移植,另一种民间做法就是全面以新内核(通常是以同一厂商发布的相近平台内核)为基础,添加平台的特有驱动。这就是人人打心里都喜欢的内核更新了,虽然他们嘴上可能会说这个不好那个不好。但这对于民间开发者,是非常难的事,能移植成功多少要靠点运气。因为你得对平台各方面参数都很了解,而且对内核编写以及平台启动很熟悉才行。所以如果厂商发布的新 Android 系统中编进去是旧于 Google 所要求的内核版本的话,它这是在偷懒。典型的有(后面的厂商自己脑补吧!)翔尼,摩狗(尼玛 4.0 系统居然还在跑 2.6.32 内核)。火腿肠 也干过这事(迫于舆论压力发布的 Desire HD 新版 4.0 系统自带 2.6.35 内核)。寨厂无底线(我可没点ZTE的名~),不提!

  那哪些部分是民间内核维护者最难头疼呢?如果讲高通的话,大概是 Android 2.3 到 4.X 升级带来的 MSM FB(与用户空间 qcom/display HAL 驱动效率生死相关)的更新。翔尼 CM 维护者们 FXP 团队对于一砣旧设备至今仍然在 4.X 系统上跑的旧 FB 驱动。而 CM 发起者 Steve(他维护的通常都是最新设备及驱动)有天还因为 FXP 在 HAL 层的旧设备兼容性更改不耐烦地质问他:为什么不使用新的驱动?这让 FXP 情何以堪啊。尼玛翔尼官方都是旧内核,你让我去移植新驱动么?不是不使用,而是移植需要付出太多代价与时间,还无法预知是否值得。

  HTC 也是这样想的!!!一砣 8255/7X30 平台 4.0 系统自带的内核虽然版本是 3.0, FB 驱动仍然是沿用的 2.6 时代的,几乎只字未改。节操掉一地。。为什么都这样,难道是高通没给他们么?借口,代码不都在 gitweb 中挂着的么?说到 FB 驱动,HTC 泄漏版 4.0 RUU 在 Desire S 上居然有字体花屏 bug,一时传为社区佳话。这都是驱动不兼容导致的,需要更新。这个例子说明了内核更新的好处,但也说明了后向移植的价值。二者都有效。但作为开发者,显然更倾向于内核的版本更新,因为版本更新会带来各种各样的小 bug 修复(嗯,你很可能感觉不到,话说你感觉不到的存在多了去了。。。),只不过后向移植更省事。但升级内核也会带来很多不稳定性,各种小 bug,需要维护者慢慢修复。所以调戏内核绝对是件吃力不讨好的事!

  总结:

  当然什么问题都推到内核上,显然不对。内核就这样被小众小白视为黑箱当球踢,我表示很桑心。但你要是与内核无关,似乎也说不过去。你要知道你的 每一个操作(注意是每一个)都要经过内核处理。它不可见,但却无处不在。比如要写数据,要过文件系统;要听歌,要过 ADSP;要申请内存,要过 VM;要滑屏,要过触摸驱动与 CPU 调度;要打游戏,要过 KGSL 驱动;要唤醒,要过 FB;要振动,要过 AKM;要偷拍,要过相机驱动。。

  所以说内核有更新你就用吧,积极帮助社区报告 ,bug 岂能说你看不见就说它不存在?!