Android 操作系统的设计与实现--框架

转自:http://hi.baidu.com/jxd_jxdong/blog/item/7fb09c83a6c5a3ab6d811945.html

Android 操作系统的设计与实现--框架

Android 是由操作系统、中间件、用户界面和应用软件组成的一个嵌入式移动开发平台。她包含的内容太多,以至于我们不可能一一学习理解。在做了一年的 Android 系统移植之后,总结一下我理解的 Android 操作系统的的设计实现。

这里说的操作系统不是一个宽泛的概念,而是很狭隘的定义,就是指 Android 操作系统--我们拿得到源代码的,基于 Linux 内核的操作系统。

一个嵌入式系统要能够正常的运行起来一般会经过以下代码的执行:

1.平台的固化的启动代码,这里的代码是固定的,一般是严格的芯片和板级相关的代码,没有什么可定制性。功能就是加载 bootloader,也被称为一级引导。

2.操作系统引导代码,这就是我们的 bootloader ,具有一定的相关性但是定制性较高,可以添加或者裁减相应的功能。主要作用是加载并引导内核。也被称为二级引导。常见的如:u-boot、blob、vivi等。

3.操作系统内核,内核的定制性很强,可以随意的修改添加自己想要的功能,主要的实现方式是驱动程序的添加修改。内核阶段会检查设备并初始化设备,加载驱动,这时设备已经可以工作,但是不能被控制,典型的是看到显示了 Logo ,屏幕亮了,但是不能更改 Logo,不能改变屏幕的亮度,其实这些工作是应用程序来完成的。操作系统内核比较多,用的多的却没多少,典型的 linux 、Vxworks、WinCE、sysbian 等。

4.应用程序。用户和设备真正交互就是通过应用程序了。这个太熟悉不过。

Android 作为一个嵌入式的操作系统,要运行起来也要执行上面的一系列代码。设计和实现 Android ,就是要完成上面各部分的代码。下面分别介绍下:

 

一、对于一级引导程序,Android 并没有做什么工作,也不需要做这个工作,这部分工作属于芯片厂商和板级硬件厂商的内容。我们也不用详细探讨。

二、bootloader 部分。Android 对 bootloader 的贡献在于 fastboot ,前提是必须自己先在 bootloader 中实现 Nandflash 的烧写、分区以及 USB 通信。然后结合 fastboot 可以在 PC 端通过 USB 操作设备实现系统的烧写和 recovery。在 Android 的源代码中 bootable 目录就是实现 fastboot 的功能代码。

三、Android 使用的是基于开源 Linux 的内核。为什么说是基于呢?因为 Android 对 Linux 做了太多的手脚,以至于 Linux 小组直接将 Android 的内核从标准 Linux 中剔除出去。关于 Android 所做的修改和增加的内容,可以通过将 Android 的内核与标准的 Linux 内核比较得到。如果你已经在自己的平台上正常运行 Linux 那么你要做的就是将标准内核和 Android 的内核比较,然后将比较得到的 patch 打到你自己的内核上去。 几个重要的修改必须引起注意,因为它们可能导致 Android 无法正常启动。

1.比较配置文件注意定义 ANDROID 的地方

CONFIG_ANDROID=y

     如果出现 init 挂掉,基本上是由于内核中关于 Android 的部分没有加上或者缺少 Android 必须的驱动。

2.kernel power ,Android 与标准 Linux 的电源管理有很大的差别,如果 Power Management 没有启用,可能造成无法解锁界面进不了主屏幕的情况。

3.电源管理和休眠机制是个很复杂的过程,需要所有的驱动支持,如果你的驱动达不到要求还是不要休眠吧。

如果内核很流畅的运行到了加载完了所有驱动并开始执行 init 进程,恭喜你,你的内核已经可以工作了。

四、Android 中代码量最大,最复杂的部分就是自己那套图形界面和应用程序了。这个部分可不是三言两语说的清的。但是 Google 却希望设备厂商尽量不要动他的这部分代码,因为他一直在像硬件无关性努力。按照 Google 的意思,希望我们添加代码就可以完成 Android 的移植。在老版本中有个 vendor 目录就是放置我们的移植代码的。现在最新的 2.3 这个目录位于 device 目录下。

   我们看到 2.3 里面已经有 samsung 和 HTC 移植成功的代码。仔细研究会发现他们真的很少修改 Google 提供的源代码。那这个文件夹里面他们都做了些什么工作呢?

 

    我们按功能一个个分析:

以三星的为例,代号 crespo 基于 herring 平台。

    音频:实现音乐的播放,音频的录制,相关代码目录:alsa-lib、alsa-utils、libaudio、libaudio2

录像和摄像:libcamera、liboverlay、libs3cjpeg 他的视频预览是基于 overlay 的。当然 libs3cjpeg 不仅仅用于这里

传感器:libsensors

视频编解码和高清支持:libstagefrighthw、sec_mm,同时可用于图形界面的 3D 加速。

    recovery 是个系统恢复处理的模式支持。

虽然只是简单的就列出了这几个功能,但是要实现其中的功能,代码量还是惊人的。有兴趣的话可以看看他们的硬件编解码支持,估计光是理清执行头绪,就得从新查看最新的 stagefright 硬件编解码框架,以及 openMax 集成。

总而言之,Android 操作系统的代码部分就实现了所有从一级引导到上层应用程序以及自动化测试的一切。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值