设备附带的内核与 Android 通用内核有何不同?

How does the kernel that ships with a device differ from the Android Common Kernel?

我很想知道在构建设备内核的最终版本之前对 Android 通用内核进行了哪些更改。

其次,我想知道是否有任何设备可以 运行 未修改的通用内核。

1)OEM 需要的任何更改。这可以从什么都没有,到错误修复,再到功能添加。多年前,他们通常会修补 RTL 文本以使其正常工作,但仅限于他们知道要进入这些地区的模型。现代的例子是在 Google 添加之前对分屏的自定义支持,或者折叠设备,或者缺口

简而言之,这个问题无法回答。 OEM 可以添加他们想要的任何内容。

2) 如果你真的想要那个,建立你自己的。这是唯一可以确定的方法。

  1. Android 通用内核在设备上发布之前所做的更改通常由两个组织完成:SoC 制造商(最常见的是 Qualcomm)和设备制造商。 SoC制造商为SoC添加驱动程序,并可能通过其他方式修改内核以使用这些驱动程序。设备制造商修改内核以添加任何额外的驱动程序(例如用于显示器、触摸屏等),并创建设备树源文件来指定设备中的硬件以及设备中的硬件如何连接。此外,制造商可以根据需要修改内核。通常,这样做是为了增加对特殊软件“功能”的支持(三星等某些 OEM 以其闻名),或增加对新型硬件的支持——这可能是 first[=20 所必需的=] Android 配备指纹读取器、显示屏切口或可折叠屏幕等功能的设备。

  2. 是的,有些设备可以 运行 Android 通用内核。 Android 通用内核只是主线 Linux 内核的一个分支。因此,如果一个设备的驱动程序和设备树都在主线Linux,那么Android Common Kernel 应该 运行就可以了。让我们更具体一点。对于高通 SoC,Snapdragon 410、450、625、630、632、636、808、810、820、835、845、850、855 和 865 在 Linux 内核中都有一定程度的支持v5.12(虽然这不是一个决定性的列表)。这意味着任何 Android 具有其中一个 SoC 和主线 Linux 中的设备树的设备理论上都可以启动主线内核,因此 Android 通用内核。那么,在 Linux 5.12 中,哪些 Android 设备实际上具有设备树?太多无法在此列出,但这里有一些:Google Nexus 6P、三星 Galaxy A5、小米 Poco F1、OnePlus 6T、索尼 Xperia Z5。这些设备及其 SoC 的设备树源文件可以在 linux/arch/arm64/boot/dts/qcom/.

    中找到