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

Operating system 驱动程序如何在x86中开箱即用,而不是在像Android手机这样的嵌入式计算机中,operating-system,embedded,kernel,driver,boot,Operating System,Embedded,Kernel,Driver,Boot,我很好奇x86主板上的驱动程序是如何开箱即用的,比如显示器、USB控制器等 例如: 在x86中启动玩具定制内核可以在屏幕上显示,而无需在驱动程序空间上做任何额外的工作,但是对于一款嵌入式系统的Android手机来说,使用我自己的玩具定制内核几乎不可能在屏幕上显示(因为有关于设备内存映射以及显示器如何与设备接口的可用信息) 为什么在x86主板上I/O可以开箱即用,而在嵌入式计算机上则不能?x86 PC固件有标准的软件接口(非常类似于系统调用),现代UEFI或传统BIOSint 0x10和其他中断

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

例如: 在x86中启动玩具定制内核可以在屏幕上显示,而无需在驱动程序空间上做任何额外的工作,但是对于一款嵌入式系统的Android手机来说,使用我自己的玩具定制内核几乎不可能在屏幕上显示(因为有关于设备内存映射以及显示器如何与设备接口的可用信息)

为什么在x86主板上I/O可以开箱即用,而在嵌入式计算机上则不能?x86 PC固件有标准的软件接口(非常类似于系统调用),现代UEFI或传统BIOS
int 0x10
和其他中断

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

如果您没有固件提供的所有这些帮助(有助于引导加载程序和玩具操作系统),那么您的工作会困难得多,例如,至少需要一个基本的USB hid和USB主机控制器驱动程序来获取键盘输入

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

这不是你真正的问题。嵌入式机器有工作的I/O硬件,它们只是没有作为固件的一部分包装在驱动程序周围的便携式软件API/ABI

我认为大多数厂商的SDK都提供了访问I/O硬件的功能(在可能做了一些修改使其进入可用状态之后),即为其编写自己的驱动程序


Embedded在固件中不需要此功能,因为预期内核将针对硬件进行定制


拥有BIOS或UEFI以实现最大的可移植性不是更好吗?包含BIOS或UEFI有任何缺点吗

是:启动ROM中的代码大小,必须有人编写并调试该代码。这需要花费时间和开发人员的工资

启动一个操作系统(UEFI环境)来加载一个无论如何都要接管硬件的内核是没有意义的

启动时间的另一个缺点是:除了在需要的地方加载内核之外,任何运行的代码都浪费了CPU时间,从而降低了启动速度。拥有一个非常轻量级的界面,只允许您加载内核,并将所有I/O留给它,这是有意义的


与x86 PC不同,您不希望将此硬件与您下载的操作系统安装光盘/映像一起使用,该光盘/映像不是专门为此硬件定制的


业余爱好者使用training wheels API并不容易。这个硬件上的真正操作系统不会使用这样的API,那么为什么要首先提供它们呢?

但是为什么像android手机这样的嵌入式计算机没有配备类似于x86主板(如BIOS或UEFI)的固件呢?这不是更好吗o是否有BIOS或UEFI以实现最大的可移植性?包含BIOS或UEFI是否有任何缺点?@NithinRao:我扩展了回答的最后一部分以解决缺点。