IO埠 IO記憶體 IO空間 記憶體空間的含義和聯絡

2022-05-10 19:22:20 字數 1709 閱讀 2747

1,io空間:x86乙個特有的空間,與記憶體空間獨立的空間,同樣利用io空間可以運算元據,只不過是利用對應的io埠操作函式,例如inb(), inbw(), inl(); outb(), outw(), outl()等。

2,記憶體空間:記憶體位址的定址範圍,例如32位作業系統記憶體空間為2的32次冪,即4g。

3,io埠:當外部暫存器或記憶體對映到io空間時,即只能用io埠操作函式進行資料讀寫,稱為io埠。

4,io記憶體:當外部暫存器或記憶體對映到記憶體空間時,即使用訪問記憶體的方式對外部暫存器或者記憶體進行讀寫操作。

從上面定義可以看出,外部裝置只能通過裝置上的暫存器或者記憶體(sram?dram?)與cpu進行通訊,外部裝置的暫存器可以是io埠(對映到io空 間),也可以是io記憶體(對映到位址空間)。當對映到io空間時,必須使用對應的io操作函式;對映到記憶體空間時就要注意要使用特定的io記憶體操作函式, 最好不要直接使用指標操作,io記憶體操作函式有如下:

io記憶體讀函式:

unsigned int ioread8(void *addr);

unsigned int ioread16(void *addr);

unsigned int ioread32(void *addr);

io記憶體寫函式:

unsigned int iowrite8(u8 value, void *addr);

unsigned int iowrite16(u8 value, void *addr);

unsigned int iowrite32(u8 value, void *addr);

以下這些函式讀和寫一系列值到給定的i/o記憶體區域,從給定的buf讀或寫count個值到addr,引數count表示要讀寫的資料個數,而不是位元組數

void ioread8_rep(void *addr, void *buf, unsigned long count);

void ioread16_rep(void *addr, void *buf, unsigned long count);

void ioread32_rep(void *addr, void *buf, unsigned long count);

void iowrite8_rep(void *addr, const void *buf, unsigned long count);

void iowrite16_rep(void *addr, const void *buf, unsigned long count);

void iowrite32_rep(void *addr, const void *buf, unsigned long count);

需要操作一塊io位址時,使用下列函式(這些函式的行為類似於它們的c庫類似函式)

void memcpy_io(void *addr, u8 value, unsigned int count);

void memcpy_fromio(void *dest, void *source, unsigned int count);

void memcpy_fromio(void *dest, void *source, unsigned int count);

由於邊際效應的緣故,不管是否需要 ioremap,都不鼓勵直接使用i/o記憶體指標,而應使用專門的i/o記憶體操作函式。這些i/o記憶體操作函式不僅在所有平台上是安全,而且對直接使用指標操作 i/o 記憶體的情況進行了優化。 --->《ldd》chapter

9, page 249

I O埠和I O記憶體

每種外設都通過讀寫暫存器進行控制,大部分外設都有幾個暫存器,不管在記憶體位址空間還是在i o位址空間,這些暫存器的訪問位址是連續的。在硬體層,記憶體區域和io區域沒有概念上的區別 他們都通過向位址匯流排和控制匯流排傳送電平訊號進行訪問,再通過資料匯流排讀寫資料。儘管硬體暫存器和記憶體非常相似,但程式...

I O埠與I O記憶體

埠的概念 裝置通過系統匯流排上的介面與cpu相連,介面電路中含有多種暫存器,cpu向裝置讀寫資料實際上是向介面上的暫存器讀寫資料,這些暫存器稱為i o埠。乙個介面通常包含控制埠,資料埠,狀態埠。對於x86平台,實體地址就是匯流排位址。linux中,程序中的4gb虛擬記憶體分為使用者空間和核心空間,使...

IO埠與記憶體空間

1 關於io與記憶體空間 在x86處理器中存在著i o空間的概念,i o空間是相對於記憶體空間而言的,它通過特定的指令in out來訪問。埠號標識了外設的暫存器位址。intel語法的in out指令格式為 in 累加器,out 累加器 目前,大多數嵌入式微控制器如arm powerpc等中並不提供i...