【问题标题】:Driver Portability驱动程序便携性
【发布时间】:2011-05-28 19:45:37
【问题描述】:

对于这个网站来说,这可能是一个蹩脚的问题,但这里就是这样。

驱动程序可以便携吗?例如,是否可以为 mac 的键盘背光编写驱动程序,并将其移植到另一个 unix 系统,也许是 Solaris?

或者说驱动程序的可移植性是矛盾的?

任何涵盖该主题的文章将不胜感激。

【问题讨论】:

    标签: unix driver portability


    【解决方案1】:

    设备驱动程序需要提供两层抽象,这使得可移植性至少变得困难:

    1) 当然需要为特定设备编写驱动程序。您现在可以理解的假设是,一旦我根据适当的设备规范(数据表,...)实现了驱动程序,为什么不应该在需要访问该设备的每台计算机上运行它。

    进来点

    2) 编写驱动程序以适应特定操作系统。每个操作系统都有自己的方法

    a) 访问设备,例如,读/写 I/O 端口的函数可能被不同地调用或具有不同的签名。此外 b) 驱动程序的最终目标是让用户可以访问设备——无论是通过文件系统接口、网络套接字还是 X 输入协议。出于这些目的,每个操作系统再次带有自己的一组驱动程序需要适应的抽象。

    这就是移植驱动程序有点困难的原因。尽管如此,还是有一些方法试图实现这一点,大部分时间是通过将原始驱动程序与胶合代码包装起来,将预期的驱动程序/操作系统接口转换为目标接口。

    • NDISWrapper 是一个允许在 Linux 上运行 Windows WiFi 驱动程序的库,
    • 卡尔斯鲁厄的一些人提议使用device-driver virtual machines
    • 据我所知,有几个操作系统框架使用设备驱动程序包装库在其环境中运行 Linux/BSD 设备驱动程序。参见例如GenodeL4ReMinix3

    【讨论】:

      【解决方案2】:

      是的,他们可以。 假设为设备规范编写驱动程序,唯一妨碍驱动程序可移植性的是底层操作系统,因为不同的操作系统具有不同的体系结构和不同的控件来调用和加载设备驱动程序。 但是已经存在已知的实现,其中可以抽象底层操作系统并且可以提供统一的平台。这可以带来驱动程序的可移植性。

      【讨论】: