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 對映的地址
注意: 實體地址只能被對映一次,多次對映會失敗
4. 如何檢視哪些實體地址被對映過了呢?
可以使用命令cat /proc/iomem 來檢視。