Android和Linux的关系

来源:互联网 发布:网络基础知识教程 编辑:程序博客网 时间:2024/05/18 16:38

  都说Android的底层是Linux Kernel,但是具体有什么区别我在网上找来找去都没找到。但是有幸在一本介绍Cortex-A8的嵌入式书上面写了这几段话让我理解了一些她们之间的区别。

为什么Android的驱动不开源
  因为Linux Kernel的版本是GPL,在此版本下,硬件厂商都希望自己的硬件能再Linux Kernel下运行,此时就必须使用驱动程序。但是如果把驱动程序的源代码公开,就等于公开硬件规格,这是广大硬件厂商所不能接受的。所以硬件厂商只提供编好的驱动程序,而不提供原始代码。

  Google想了一个办法,它把驱动程序移到一个它自己定义的“userspace”中,就是让驱动程序在Linux Kernel上面运行,而不是和Linux一起运行,这样就可以避过GPL规则。然后Google再在Kernel上开一个小门,让本来不能直接控制到硬件的“userspace”程序也可以碰得到,此时只需要公布这个Google自己开的“小门”程序的源代码即可。由此可见,Google在Kernel和应用程序之间设计了一个中间层,这样既不违反GPL许可,又能不让外界看到厂商的硬件驱动和应用程序的源代码。

带来的问题
  但是Google的上述做法随之带来了一个问题,Kernel和Android采取了不同的许可证,Kernel采用GPL许可证,而Android采用Apache Software License(ASL)许可证。在GPL许可证中规定,对源代码的任何修改都必须开源,所以Android需要开源,因为它修改了Kernel。而在ASL许可证中规定,用户可以随意使用源代码而不必开源,所以建立在Android之上的硬件驱动和应用程序都可以保持封闭。这种封闭得到了更多的硬件厂商的支持,Google特意修改了Kernel,使得原本应该包括在Kernel中的某些功能都被转移到“userspace”中,所以就避开了开源。

带来的影响
  所有为Android写的硬件驱动都不能合并到它底层的Linux Kernel中,因为它们只在Google的代码里才有效,而在这些驱动在Linux Kernel中根本不能用。
  正因为所有为Android写的硬件驱动都不能合并到Kernel中,这些驱动程序只能在Google的代码中才有效,而在Kernel中根本没法用,所以Google从不向Kernel提交大量的硬件驱动程序和平台源代码。硬件厂商都不开源驱动代码,为生存在Android底层的开发人员,特别是从事驱动开发的成员,带来了巨大的就业机会。开发人员可以为硬件厂商开发不开源的驱动程序从而获得报酬。

1 0