Hardware
擷取作業系統/硬體通信/逆向工程驅動程序
我的主要問題是開源社區如何對 Windows 驅動程序(例如顯卡)進行逆向工程以在 linux 下重新編寫它們。
我是一名電子工程專業的畢業生,所以我參加了微處理器設計等課程,包括嵌入式系統的彙編、C 語言,並且從事過嵌入式 linux 方面的工作。但是當我試圖了解沒有硬體製造商提供的 API 的情況下如何為 linux 編寫驅動程序時,我覺得我錯過了一些東西。
導致我的問題是,在一些新的筆記型電腦上,它們配備了雙顯卡。既是集成的,也是離散的。有驅動程序軟體允許在 Windows 中的 2 之間切換,但據我所知,沒有開源或專有驅動程序。顯然,我不是在問像“天哪,我怎麼寫那個 msyelf”這樣的愚蠢問題。但這確實讓我意識到我一直想知道在 linux 上獲得硬體支持的過程。
當然有很多可能性。
例如,如果它是一個 USB 設備,您可以在具有驅動程序支持的系統上監控設備/計算之間的 USB 流量(類似於網路的 tcpdump)。例如對於 Windows,有幾個可用的 USB 監控工具(例如 IIRC usbsnoop)。
對於 USB 掃描器,您可以例如使用預設設置生成跟踪,然後更改一個設置,生成另一個跟踪,比較它們並找出更改的內容等等。
與此類似,您可以跟踪 SCSI、Firewire 等設備的內容。
然後您可以嘗試反彙編/調試專有驅動程序(例如使用IDA pro)。
或者您可以在虛擬機或模擬器(例如 qemu)中執行 Windows 並使用斷點並在驅動程序呼叫之前/之後檢查硬體狀態。與此類似,您可以觀察驅動程序寫入/讀取的寄存器或類似內容。