當發送命令並從某個芯片讀取數據時,比如說RTC,不同的文檔說我們應該等待一段時間再從設備讀取數據以確保數據可用。很多代碼都會從端口0x80
中進行虛擬讀取。我想知道這個地址位置連接了什麼設備,如果有的話。我正在談論IA-32 PC架構。0x80端口地址連接到什麼地方?
回答
I/O端口0x80的傳統上用於POST代碼。 (POST =加電自檢)
當系統啓動時,BIOS將輸出一系列的調試代碼到I/O端口0x80的。這些是爲了調試非引導系統而設計的。
在大多數臺式電腦中,您可以安裝POST代碼調試板,該板基本上是一個小型PCI(或ISA)插槽板,可將I/O寫入I/O端口0x80並通過7段顯示值LED指示燈。
通常情況下,通過非常迅速POST代碼閃存。但是,如果您的系統在啓動時掛起,您可以查看最新的POST代碼是什麼,並使用此信息來排除系統故障。
This site包含了大多數BIOS標準的POST代碼列表。但是,計算機/主板製造商可能會插入自己的POST代碼,因此該列表不是100%全面的。
後的系統已開始啓動操作系統,POST代碼不是很相關。但是,有些操作系統供應商可能會使用POST代碼板作爲調試工具,特別是在代碼中printf()可能不實用的地方(例如中斷服務程序)。
一些操作系統將使用的讀取和寫入I/O端口0x80的作爲拖延機制。如果您需要等待幾微秒才能完成某些操作,則使用完整的sleep()或delay()定時器可能不切實際,因此對「安全」I/O地址執行「虛擬」讀/寫操作是輕量級的解決方案。對0x80進行讀寫操作基本上可以保證不會對系統的運行產生不利影響,所以對於這種虛擬操作來說,這是一個不錯的選擇。
你會發現,有許多舊/較慢的外圍設備(如您的RTC芯片),有時需要等待幾微秒的I/O寫操作「生效」。對0x80的虛擬訪問是一種方便的方法。
您也可以找到代碼,不會虛寫0x80到「刷新」任何電器「回聲」的公交車。在某些碼平臺,可以將值寫入到未使用/無效I/O地址,讀取該地址回來了,看你剛剛編寫的值,即使沒有硬件實際上是在該地址。但是,如果你在中間寫入另一個地址(比如I/O端口0x80),你可以防止這種情況發生。
它應該是一個延遲;例如讀
> The inb_p(), outb_p(), inw_p(), and outw_p() macros work otherwise
> identically to the ones above, but they do an additional short (about
> one microsecond) delay after the port access; you can make the delay
> about four microseconds with #define REALLY_SLOW_IO before you
> #include <asm/io.h>. These macros normally (unless you #define
> SLOW_IO_BY_JUMPING, which is probably less accurate) use a port output
> to port 0x80 for their delay, so you need to give access to port 0x80
> with ioperm() first (outputs to port 0x80 should not affect any part
> of the system). For more versatile methods of delaying, read on.
從here
- 1. ActiveMQ連接到地址/端口上的現有隊列
- 2. SNMP獲取連接到交換機端口的mac地址
- 3. Windows:無法連接到sysname:地址(無法連接到主機/端口)epmd(端口4369)
- 4. Java連接到IP地址
- 5. 端口轉發Devstack嘗試連接到本地IP而不是Swift中的端口轉發IP地址
- 6. Sql連接地址
- 7. num1> = 0x80 - 什麼是0x80?
- 8. dns到directadmin ip地址:端口
- 9. SignalR連接的綁定本地端口
- 10. 什麼是IP地址和端口號碼的組合?
- 11. 如何使用GnuTLS連接到特定的IP地址和端口
- 12. 如何測試到IP地址以及特定端口的出站連接?
- 13. android應用通過ip地址和端口號連接到機器人
- 14. SSDP和接口IP地址
- 15. 將虛擬接口的IP地址綁定到ftp客戶端
- 16. 獲取不帶端口.net的地址,並將地址+端口構造到端點
- 17. 將套接字連接到設備上的本地地址
- 18. 連接到廣播IP地址
- 19. 無法連接到Rails開發地址
- 20. 使用IP地址連接到mysql
- 21. Hazelcast連接到外部地址
- 22. TCP客戶端未連接到IRC地址
- 23. 使用IP地址連接到客戶端系統
- 24. Java RMI連接使用什麼端口?
- 25. 無法使用互聯網IP地址連接到本地機IP地址
- 26. Sendto或連接是否將任意地址和端口分配給套接字?
- 27. 什麼IP地址不接受退貨
- 28. Sudo-apt無法連接到本地主機:端口
- 29. 將Silverlight連接到本地計算機COM端口
- 30. EasyPHP無法連接到本地主機(端口8080)
在Linux內核4.2上的使用:https://github.com/torvalds/linux/blob/v4.2/arch/x86/boot/boot.h#L78 –
每個端口映射到的內容:http:// stackoverflow .com/questions/14194798/is-there-a-specification-of-x86-io-port-assignment –