Android和linux的关系
2天前来源:CSDN博客
Android(6)Linux为什么驱动不开源 Linux Kernel的版本是GPL,在此版本下,硬件厂商都希望自己的硬件能再Linux Kernel下运行,此时就必须使用驱动程序。但是如果把驱动程序的源代码公开,就等于公开硬件规格,这是广大硬件厂商所不能接受的。所以硬件厂商只提供编好的驱动程序,而不提供原始代码。 Google把驱动程序移到“userspace”中,即让驱动程序在LinuxKernel上面运行,而不是一起运行,这样就可以避过GPL规则。然后在Kernel上开一个小门,让本来不能直接控制到硬件的“userspace”程序也可以碰得到,此时只需要公布这个开的“小门”程序的源代码即可。由此可见,Google在Kernel也应用程序之间设计了一个中间层,这样既不违反GPL许可,又能不让外界看到厂商的硬件驱动和应用程序的源代码。 带来的问题但是Google的上述做法随之带来了一个问题,Kernel和Android采取了不同的许可证,Kernel采用GPL许可证,而Android采用Apache Software License(ASL)许可证。在GPL许可证中规定,对源代码的任何修改都必须开源,所以Android需要开源,因为它修改了Kernel。而在ASL许可证中规定,用户可以随意使用源代码而不必开源,所以建立在Android之上的硬件驱动和应用程序都可以保持封闭。这种封闭得到了更多的硬件厂商的支持,Google特意修改了Kernel,使得原本应该包括在Kernel中的某些功能都被转移到“userspace”中,所以就避开了开源。
带来的影响所有未Android写的硬件驱动都不能合并到Kernel中,因为它们只在Google的代码里才有效,而在Kernel中根本不能用。正因为所有为Android写的硬件驱动都不能合并到Kernel中,这些驱动程序只能在Google的代码中才有效,而在Kernel中根本没法用,所以Google从不向Kernel提交大量的硬件驱动程序和平台源代码。硬件厂商都不开源驱动代码,为生存在Android底层的开发人员,特别是从事驱动开发的成员,带来了巨大的就业机会。开发人员可以为硬件厂商开发不开源的驱动程序从而获得报酬。