我的主要问题是开源社区如何对 Windows 驱动程序(例如视频卡)进行逆向工程以在 Linux 下重新编写它们。
我是一名电子工程专业的毕业生,所以我学习了微处理器设计等课程、汇编、嵌入式系统 C 语言,并且从事过嵌入式 Linux 方面的工作。但我觉得在尝试了解如何在没有硬件制造商的 API 的情况下为 Linux 编写驱动程序时,我错过了一些东西。
我的问题是,在一些新笔记本电脑上,它们配备了双显卡。分为集成式和分立式两种。 Windows 中有允许在两者之间切换的驱动程序软件,但据我所知,没有开源或专有驱动程序。显然我不是在问一些愚蠢的问题,比如“天哪,我该怎么写那个msyelf”。但这确实让我意识到我一直想知道过程在 Linux 上获取硬件支持。
答案1
当然有很多可能性。
例如,如果它是 USB 设备,您可以在具有驱动程序支持的系统上监视设备/计算之间的 USB 流量(类似于网络的 tcpdump)。例如,对于 Windows,有多种可用的 USB 监视工具(例如 IIRC usbsnoop)。
对于 USB 扫描仪,您可以使用默认设置生成一条跟踪,然后更改一个设置,生成另一条跟踪,比较它们并找出更改的内容,等等。
与此类似,您可以跟踪 SCSI、Firewire 等设备的内容。
然后您可以尝试反汇编/调试专有驱动程序(例如使用IDA专业版)。
或者,您可以在虚拟机或模拟器(例如 qemu)中执行 Windows,并使用断点并在驱动程序调用之前/之后检查硬件状态。与此类似,您可以观察驱动程序写入/读取的寄存器或类似内容。