2012-02-14 73 views
2

我有一個基於intel的SBC,我正在使用嵌入式應用程序。它有一個連接到Fintek Super I/O芯片的數字IO(DIO)端口。我希望能夠設置此端口的輸出線上的位來控制其他一些硬件。如何在linux驅動中切換到實模式

幸運的是,製造商的BIOS自帶的功能來完成這一點:

AX=6F09h 
bl=<bits> 
int 15h 

不幸的是,我在保護模式下運行64位Linux。有什麼辦法可以調用這個bios中斷,無論是從用戶空間程序還是作爲內核驅動程序(如果需要的話)?

我可以選擇直接在Fintek芯片上設置寄存器,但這需要知道芯片上什麼引腳連接到DIO頭上,當然,這會從電路板修訂版改爲電路板版本。

回答

1

首先,您必須確保Linux不會覆蓋中斷所在的內存。

您將無法以任何簡單且不破壞的OS運行時方式進入實模式。您應該在內存中找到中斷函數所在的位置,並使用某種模擬器來解釋該16位機器碼並執行64位長模式過程。您可以搜索OSDev ForumsOSDev Wiki以查找有關此主題的更多信息。

(提示:在保護模式下查看有關使用VESA的問題)。

1

您的配置文件可能包含libx86。 libx86在x86上使用lrmi(與DPMI相反),在x86-64上使用x86模擬器,因爲AFAIK vm86模式不能在64位模式下使用。

+0

確實,vm86模式在長模式代碼中不再可用(注意「長模式」而不是「64位」 - 即使在長模式下運行的32位代碼(它有名字,忘了它)也不能使用vm86 )。 – Griwes 2012-02-15 13:23:27

0

我已經在原型之前將它加載到bootloader中,但它可能無法繼續。您可以根據「他們之前去過的地方」來確定芯片的位置。

相關問題