![Linux 的整体性(部分)是 ARM 驱动程序的问题吗?](https://linux22.com/image/104986/Linux%20%E7%9A%84%E6%95%B4%E4%BD%93%E6%80%A7%EF%BC%88%E9%83%A8%E5%88%86%EF%BC%89%E6%98%AF%20ARM%20%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E9%97%AE%E9%A2%98%E5%90%97%EF%BC%9F%20.png)
我对内核的了解相当有限,所以如果这个问题的出发点是错误的,请原谅。
在像我的笔记本电脑这样的基于 x86 的计算机上,我可以安装我想要的每个 Linux 发行版。 WLAN 卡或显卡可能存在一些小问题,但总而言之,我可以安装 Linux 内核的每个版本。
Android 手机和带有 ARM 处理器的 Raspberry Pi 等系统无法真正做到这一点,必须获得特殊的内核。而且芯片制造商似乎只提供带有特定版本 Linux 内核的驱动程序的编译版本。安卓手机很少获得更新,而且软件似乎像车载娱乐系统一样粘在硬件上。
制造商表示,为不同版本的内核维护驱动程序的工作量太大,将其移植到新版本也太困难。但为什么他们必须将其如此紧密地捆绑到特定版本,以至于 Android 用户无法通过合理的努力明智地获得更新?它可以在 x86 上运行,对吗?
我想知道驱动程序是否集成到内核中太紧密,也许分解为独立模块会有所帮助。然后,设备制造商仍然可以发布编译后的代码(这样竞争对手就无法推断其设备的设计),但它适用于不同的 Linux 版本。由于 Android 和桌面 Linux 发行版使用较新的内核来发布较新的版本,因此如果没有该内核版本的驱动程序,则无法升级整个系统。
Android设备仍然停留在旧版本的根本原因在哪里?
答案1
版权、专利和其他知识产权问题确实是根本原因。硬件制造商不会发布完整的细节,但他们会提供二进制 blob。不幸的是,内核的内部工作并不完全稳定,因此对于每个版本,二进制 blob 都必须更新。提供更新不会为制造商带来额外收入,那么为什么要花钱请软件工程师一直进行更改呢?旧的 VMWare 内核模块(至少它们是开放的并且可以修补)和 NVidia 为其显卡提供的驱动程序也存在同样的问题。
Linus 说过他并不关心稳定的内部接口。如果硬件制造商希望他们的东西始终工作,他们应该打开他们的代码并将其集成到主内核树中......这是 Greg Kroah-Hartman 的一篇不错的(旧)帖子 kroah.com/log/linux /stable_api_nonsense.html