如何为 Elan smartpad 编写驱动程序使其在 Yosemite 上工作?

How to write a driver for Elan smartpad for it to work on Yosemite?

我最近在我的 Lenovo Y50 系统上安装了 hackintosh Yosemite,并使用提供的 kexts 使大部分功能正常运行。 elan smartpad(触摸板)不工作。我想开发 kexts 或任何其他所需的软件以使其独立运行。我无法在网上找到 elan smartpad 的硬件规格。谁能帮我找到它。另外,阅读规格后我的下一步应该是什么。欢迎有编写内核扩展或设备驱动程序经验的人提出任何建议。

谢谢。

Elan Smartpad webpage

这有很多部分。取决于您已经 know/have 体验过什么,以及您愿意投入多少时间和毅力,当然还有硬件本身的尴尬,至于它是否值得...... .

  1. 确定硬件接口类型。它很可能是 USB HID 设备,但如果不是,工作量会更大,因为您需要将设备发送的消息以某种方式转换为 HID 报告。最简单的查找方法是从 Apple 开发者网站或开源 IOJones 下载 Hardware IO Tools,然后在服务树中查找设备。您可能会发现它连接到 USB 总线,但关键问题是它上面已经匹配了哪些驱动程序。 IOHID* 是一个好兆头。 IOHIDPointing 是一个更好的标志。请注意,它的默认配置可能不是唯一的,如果有多种设备配置,则默认配置可能不是功能最全的配置。 (如果这没有响铃,请阅读 USB 设备配置。)

  2. 如果它没有报告为 HID 设备,您需要详细了解其硬件接口。如果有一个开源 Linux 或 BSD 驱动程序,您可能可以从该源中解决它并将其转换为 OSX 的 IOKit kext。这并不简单,如果它是您的第一个驱动程序,预计这会花费您一些时间。我建议首先尝试编写用户 space USB 驱动程序,然后在您对收到的消息感到满意时将其移植到内核。如果没有 OSS 驱动程序,请对 Windows 驱动程序进行逆向工程。最简单的方法是在 VM 中安装 Windows,将 USB 设备传递给 VM,在那里加载驱动程序,并记录主机上的所有 USB 流量。然后煞费苦心地弄清楚这一切意味着什么。计算出消息后,您可能需要将它们转换为 HID 报告,以及一个报告描述符,告诉 OS 它们是如何格式化的。您需要将其作为 HID 设备发布到 OS。查看 IOHIDFamily 源以获取详细信息,并使用鼠标左右作为工作参考。

  3. 一旦有了 HID 描述符,问题是 OSX 是否可以按原样解释它们。如果您的设备已经显示为 HID,那么要么 OSX 没有将报告描述符正确地解释为指向设备,要么它无法理解生成的报告。您需要修改报告描述符,或者将描述符和每个报告都修改为对 OSX 有意义的内容。最好的方法可能是查看类似设备(例如 Apple 自己的触控板)的报告描述符,并尝试将您的设备变成类似的形式。另一个有用的技术是通过 IOHIDFamily 源进行跟踪以找出哪里出错了。此处是修改 OSX 的 HID 报告描述符(但不是报告)以使其有意义的驱动程序示例:https://github.com/pmj/QemuUSBTablet-OSX/blob/master/QemuUSBTablet/PJQemuUSBTabletDriver.cpp

根据您对这类事情的经验水平,其中可能有很多内容一开始并没有多大意义。如果您还不熟悉这些主题,请期待阅读有关 USB、HID、xnu 内核、kext 开发等的内容。从好的方面来说,这可能不是最难上手的驱动程序项目。祝你好运!