驱动程序如何在 x86 中开箱即用,而不是在 Android phone 这样的嵌入式计算机中

How drivers work out of the box in x86 and not in embedded computers like Android phone

我很好奇 x86 主板中的驱动程序是如何开箱即用的,例如显示器、USB 控制器等。

例如: 在 x86 中启动玩具自定义内核无需对驱动程序进行任何额外工作即可显示到屏幕 space,但是对于 Android phone 这是一个嵌入式系统,似乎几乎无法显示使用我自己的玩具自定义内核进行屏幕显示(因为那里有关于设备内存映射以及显示器如何与设备连接的信息)。

为什么 I/O 在 x86 主板上开箱即用,而在嵌入式计算机上却不行?

x86 PC 固件有标准的软件接口(很像系统调用),现代 UEFI 或遗留 BIOS int 0x10 和其他中断。

关键是它 不是 只是裸机 x86,它与 IBM PC 兼容,这意味着软件甚至可以模拟遗留硬件,如 PS/2 端口, VGA,甚至传统的中断控制器。

如果您没有来自固件的所有这些帮助(为了引导加载程序和玩具 OSes 的好处),您的工作就会困难得多,例如至少需要一个基本的 USB-hid 和 USB 主机控制器驱动程序来获取键盘输入。 The lowest level function to handle a user input

Why is that I/O works out of the box in x86 motherboards and doesn't on embedded computers?

这不是您真正要问的问题。嵌入式机器有可用的 I/O 硬件,它们只是没有随附便携式软件 APIs/ABIs 将驱动程序作为固件的一部分。

我认为大多数供应商的 SDK 都带有访问 I/O 硬件的功能(在可能进行一些摆弄以使其进入可用状态之后)。即为它编写自己的驱动程序。


嵌入式在固件中不需要这个,因为预计内核将针对硬件进行定制。

Wouldn't it be better to have a BIOS or UEFI for maximum portability? Does it have any drawbacks to include one?

是:引导 ROM 中的代码大小,有人 必须编写 + 调试该代码。这会花费时间和开发人员工资。

启动几乎 OS(UEFI 环境)只是为了加载一个无论如何都会接管硬件的内核是没有意义的。

启动时间也有一个缺点:任何运行的代码都没有将内核加载到它想要的地方,这会浪费 CPU 时间,从而减慢启动速度。拥有一个非常轻量级的界面,只是让你加载你的内核,并将所有I/O留给它,这很有意义。


与 x86 PC 不同,您并不期望您可以将此硬件与您下载的 OS 安装光盘/映像一起使用,不是 专门为此硬件定制的.

业余爱好者使用 training-wheels API 并不容易。此硬件上的真实 OSes 不会使用此类 API,那么为什么要首先提供它们?