Android 的 Linux内核(2)

Google对 2.6.25 内核里做了什么改动呢?

有家公司专门比较了标准内核和Android 内核,发现 google 修改了 75 个文件,增加了 88 个文件。改公司还对这些被修改的和新增的文件做了注解。

Goldfish -- 44 Files

Android模拟器运行了一个被 google  叫做 “ 金鱼 " 的虚拟 CPU. 金鱼运行 arm926t 指令集( arm926t 是属于 armv5 架构);并且仿真了输入输出:比如键盘输入和 LCD  输出。这个模拟器其实是在 qemu 之上开发的,输入输出基于 libSDL.

内核里这个Goldfish 接口实现了这个虚拟 “ 金鱼 ”CPU 的一些接口,如果想在真实设备上运行 android, 这些接口肯定要去掉的。

arm926ej的介绍见

YAFFS2 -- 35 Files

不同于PC 机,文件是存储在硬盘上的;手机使用 FLASH 作为存储介质。 HTC 的 G1 使用 NANDFLASH—— 这中存储目前已经相当普及了 , 而且种类也颇多, (SLC,MLC 等等),存储密度也越来越高(已经出现几十 G 大小的 NANDFLASH) ,价格也越来越低。

YAFFS2是专门用在 FLASH 上的文件系统, “YAFFS2” 是 "Yet Another Flash File System, 2nd edition" 的缩写。 YAFFS2 为 Linux 内核提供了一个高效访问 NANDFLASH 的接口。但是 NANDFLASH 的支持并不包含在标准的 2.6.25 内核中,所以 Google 在其中添加了对 NANDFLASH 的支持。

蓝牙 -- 10 files

在蓝牙通讯协议栈里Google 修改了 10 个文件。这些改动解决了一些跟蓝牙耳机相关的明显的 bug ,以及一些蓝牙调试和访问控制相关的函数。

调度器 -- 5 files

Android内核还修改了进程调度和时钟相关策略,这个改动就比较深入了。其目的和效果估计在一段时间后才能找到。

为android 新增的功能  -- 28 files

除了修正一些bug 以及其他的改动, android 还增加了一些新的 “ 子系统 ” ,这些系统都比较重要。

IPC Binder

IPC Binder是一种 IPC( 进程间通信)机制。它是的进程能够为其他进程提供服务 —— 还是通过标准的 linux 系统调用 api 。 IPC Binder 的概念起源于一家叫做 “Be.Inc" 的公司,在 Google 之前就已经被然后被用到 Palm 软件里去了。

Low Memory Killer

其实内核里已经有一个类似的功能, 叫做"oom killer", 就是 out of memory killer, 当内存不够的时候,改策略会试图结束一个进程。不知道为什么 Google 重新实现了这个策略。

Ashmem

Ashmem,全程 Anonymous SHared MEMory, 翻译成中文就是匿名共享内存。这个功能使得进程间能够共享大块的内存。比如说,系统可以使用 Ashmem 保存一些图标,多个应用程序可以访问这个共享内存来获取图标。 Ashmem 为内核提供了一种回收这些使用完的共享内存块的办法 , 如果一个进程试图访问这些已经被回收的内存块,它将会得到错误的返回值,以便它重新进行内存块分配和数据初始化。

RAM Console and Log Device

为了调试方便,Android 添加了一个功能,使得调试信息可以输入到一个内存块中。此外, Android 添加了一个独立的日志模块,这样用户空间的进程能够读写日志消息,调试打印信息等。

Android Debug Bridge

嵌入式设备的调试的确比较麻烦。为了便于调试,google 设计了这个调试工具,可以叫做 "ADB" ,使用 USB 作为连接方式 ,ADB 可以看作是链接 android 的设备和 PC 机的一套协议。

Android 还添加了其他的东西,比如  real-time clock, switch , timed GPIO 。

Power Management -- 5 files

电源管理对于移动设备来说相当重要,也是最复杂,开发难度最高的一个功能。Google 添加了一个新的电源管理系统,并没有原先 apm,dpm 等。

其他修改 -- 36 files

除了上述改动之外,还有一些小改动,比如新增的额外的调试功能, 键盘背光控制,TCP  网络管理等等,共涉及 36 个文件。

根据上述,google 对标准的内核做了很大的改动。相比其他的项目,比如 Nokia N810,Openmoko 等项目中,内核的改动仅仅是增加了某个平台的支持。所以移植最快也是最可能的办法是在 google 使用的 kernel 上增加平台支持。

也有一些开发人员将google 对 2.6.25 内核的改动做成补丁,直接打在自己开发的内核上 —— 当然,自己的内核也应该是 2.6.25 ,否则会出问题

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxxjg.html