07_Linux實體地址到虛擬地址對映

爱吃冰激凌的黄某某發表於2024-04-22

Linux實體地址到虛擬地址對映

1.在微控制器和裸機中我們操作硬體是怎麼操作的?

我們可以這樣來操作我們的暫存器

unsigned int *p = 0x12345678;

*p = 0x87654321;

但是在Linux上不行,在Linux上,如果要想操作硬體,需要先把實體地址轉換成虛擬地址。因為Linux使能了MMU,所以我們在Linux上不能直接操作實體地址。

2.使能了MMU以後有什麼好處呢?

(1)讓虛擬地址成了可能

(2)可以讓系統更加安全,因為有了MMU,我們上層應用看到的記憶體都是虛擬記憶體,我們的應用就不能直接訪問硬體,所以這樣就保證了系統安全。

3.MMU非常複雜,那麼我們如何完成實體地址到虛擬地址的轉換呢?

核心給我們提供了相關的函式,函式定義在核心原始碼目錄 include/linux/io.h

ioremap: 把實體地址轉換成虛擬地址
iounmap: 釋放掉 ioremap 對映的地址

image-20240422144511682

image-20240422170815178

注意: 實體地址只能被對映一次,多次對映會失敗

4. 如何檢視哪些實體地址被對映過了呢?

可以使用命令cat /proc/iomem 來檢視。

相關文章