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底层的开发人员,特别是从事驱动开发的成员,带来了巨大的就业机会。开发人员可以为硬件厂商开发不开源的驱动程序从而获得报酬。
- Android和Linux的关系
- Android和Linux的关系
- Android和Linux的关系
- 理解android和linux内核的关系
- Android系统和linux内核的关系详解
- Android系统和linux内核的关系详解
- Android系统和linux内核的关系详解
- Android版本信息及与Linux和Java的关系
- Android系统和linux内核的关系详解
- Android与Linux的关系
- Linux与Android的关系
- Ubuntu 和linux的关系
- Linux和Unix的关系
- linux和unix的关系
- Linux和Unix的关系
- Linux和unix的关系
- Unity和Android的关系
- linux应用领域-----移动客户端====Android系统和linux内核的关系详解
- 【六】朴素贝叶斯算法
- python爬虫:处理POST请求(获取有道翻译翻译结果)学习笔记
- final关键字
- ubuntu 安装Apache cgi在自己的服务器上网页上只显示内容
- 数据结构--还原二叉树
- Android和Linux的关系
- 在js中变量为空判断
- ConcurrentHashMap总结
- 为什么php获取ip显示::1?
- mean开发之六:在windows上安装mongodb
- Some Questions of Process API(2)
- (面试)析构函数可以为虚函数吗?
- js中使用数组
- Windows远程控制Linux服务器及资源共享工具