核心中有兩套虛擬位址對映方法:動態和靜態
靜態對映:核心移植時以**的形式硬編碼,如果需要改變需要更改源**後重新編譯核心,核心啟動時建立靜態對映表, 內 核關機時銷毀,中間一直有效。
動態對映:驅動程式根據需要隨時動態建立對映,使用、銷毀對映,對映的短期的
動態對映和靜態對映是可以同時使用的。
靜態對映好處是效率高,壞處是始終占用虛擬位址空間;
動態對映好處是按需使用位址空間,壞處是需要用**建立對映和銷毀對映。
關於靜態對映
1、不同版本核心的靜態對映表位置和名字可能不同
2、不同soc的靜態對映表和名字也可能不同
3、所有靜態對映表其實就是標頭檔案中的巨集定義
三星版本的linux核心為例:
虛擬位址基位址定義在:arch/arm/plat-samsung/include/plat/map-base.h
#define s3c_addr_base (0xfd000000) // 三星移植時確定的靜態對映表的基位址,表中的所有虛擬位址都是以這個位址+偏移量來指定的
一般在palt*資料夾中的map***.h中,靜態位址是根據基位址和偏移位址計算出來。
如何建立動態對映
(1)request_mem_region,向核心申請(報告)需要對映的記憶體資源。
(2)ioremap,真正用來實現對映,傳給他實體地址他給你對映返回乙個虛擬位址
如何銷毀動態對映
(1)iounmap
(2)release_mem_region
注意:對映建立時,是要先申請再對映;然後使用;使用完要解除對映時要先解除對映再釋放申請。
字元裝置驅動2 虛擬位址對映
前言 驅動程式和應用程式一樣,在系統啟動之後都是執行在虛擬位址之中,每乙個程序單獨的享用4g的位址空間,那麼虛擬位址到底是怎麼建立的呢,在使用它進行硬體驅動的操作前有必要對其進行了解,下面將對靜態 動態虛擬位址的對映原理和使用方法做乙個分析和介紹。1.靜態對映方法的特點 1 核心移植時以 的形式硬編...
Linux虛擬位址對映
我們定義乙個區域性變數,然後列印出這個區域性變數的位址,那麼這個區域性變數的位址是線性位址?實體地址?還是邏輯位址?要明白這些,先來看看以下的知識吧。x86體系 指的是特定微cpu執行的有些 計算機語言 指令集,定義了 晶元的基本用規則 cpu的位數 alu一次性最多能處理的整數的位元組數,也即al...
HPS 虛擬位址對映
hps 如何對fpga外設進行操作?hardware 在qsys中將外設連線到axi bridge上 software 對映外設實體地址到到應用程式可以操作的虛擬位址,應用程式通過得到的虛擬位址入口控制外設。也就是說hps訪問fpga中的外設時,可以使用mpu來進行虛擬位址的分配 mpu將以有的外設...