阅读更多

    对于android的开发者来说,最初学习android的时候一定有一个疑问,就是androidjava到底有什么不同,这个问题不是今天讨论的范围,咱们暂且不表。待逐渐深入,尤其是了解了android的内核后会有另外一个疑问,它的内核跟linux有什么区别?

 

Greg Kroah-Hartman用最简单的话这样总结“它只用了kernel,别的东西没用”,这句话的意思是,跟传统linux相比,android只有系统底层结构是一样的,其他东西都不一样,尤其是程序员的编程接口。因此,现存的Linux程序无法移植到android上去。所以,从某种意义上说,Android是一种全新的系统。恐怕这也是2010年,Android 代码被从 Linux kernel 代码库中删除的原因之一,而且是很重要的原因。

 

上面所说的这个区别,也就是《Android系统源代码情景分析》试读章节中所提到的android对硬件支持划分为两层,在具体说之前,我们先来看看它是如何划分的。


                     android与linux内核对比--《Android系统源代码情景分析》试读_第1张图片

图中的HAL就是android特有的硬件抽象层,简单说,它就是对linux驱动程序的封装,向上提供接口,屏蔽底层的实现细节。也就是说,把其对硬件的支持分为User Space(用户空间)和Kernel Space(内核空间)两层,其中硬件抽象层运行在用户空间,内核驱动程序运行在内核空间。

 

那么为什么要这么安排?整合起来都放在内核空间里不行么?从技术实现当然没问题,毕竟linux就是这样的。但是android不是linux,他需要有自己商业化的一部分。我们都知道,linux内核源代码是要遵循GPL的。其在发布时,必须要公开源代码。那么如果你是硬件商,想要你的硬件能在kernel下运作,就必须要有驱动,如果你将驱动程序放在内核空间里开源,那么就跟公开你的所有硬件配置一样了,所有厂商都不愿意这么做。所以android实现的等方式是把大部分的商业秘密都放到硬件抽象层里,不进行公开,而在内核驱动层只提供简单的访问逻辑和接口。

 

尽管存在着如此的争议,但是android解决了长期令手机制造商头痛不已的问题:业界缺乏一个开源的Java虚拟机,以及统一的应用程序接口。现在,程序员只要写一次程序,就能在各种手机硬件平台之上使用。对于android内核,我也只了解了一点点,也希望能通读《Android系统源代码情景分析》,了解更多更深的内容。

  • android与linux内核对比--《Android系统源代码情景分析》试读_第2张图片
  • 大小: 144 KB
  • 查看图片附件

更多相关文章

  1. Android内核开发:源码的版本与分支详解
  2. pandaboard ES学习之旅——5 Android Linux内核源代码下载与编译
  3. windows下载android源代码
  4. android4.0 开启硬件加速后应用运行出错
  5. android中eclipse查看源代码
  6. Android开发之android_apk 在线安装(源代码分享)
  7. 关于Android多项目依赖在Eclipse中无法关联源代码的问题解决 (an
  8. android微博客户端源代码
  9. 编译Android内核模块

随机推荐

  1. Drawable Mutations(Android(安卓)Drawab
  2. 【建议收藏】2020年中高级Android大厂面
  3. android学习资料
  4. Android 自动滚动的GridView
  5. android studio 报编码 GBK 的不可映射字
  6. Android APK安装失败,共享用户不兼容 INST
  7. android 状态栏透明,源码修改教程
  8. Android控件基本属性介绍
  9. Android:Debug certificate expired on D
  10. android 获取设备型号