ARM位址空間

2022-07-30 08:15:12 字數 1176 閱讀 1709

摘編: 

在嵌入式系統中,核心映像與根檔案系統映像儲存在 rom 或 flash 等固態儲存裝置中,並且可以直接執行。但這樣做是執行速度太慢,所以要把他們載入到ram中.實現主要有以下過程

以嵌入式linux為例) 

******************************************* 

1.檢測記憶體對映. 

記憶體對映就是指在整個 4gb(cpu) 實體地址空間中有哪些位址範圍被分配用來定址系統的 ram 單元。比如,在 samsung s3c44b0x cpu 中,從 0x0c00,0000 到0x1000,0000 之間的 64m 位址空間被用作系統的 ram 位址空間。雖然 cpu 通常預留出一大段足夠的位址空間給系統 ram,但是在搭建具體的嵌入式系統時卻不一定會實現 cpu 預留預留的全部 ram 地的全部 ram 位址空間。也就是說,具體的嵌入式系統往往只把 cpu 址空間中的一部分對映到 ram 單元上,而讓剩下的那部分預留 ram 位址空間處於未使用狀態。 

2.規劃記憶體占用布局 

這裡包括兩個方面:(1)核心映像所占用的記憶體範圍;(2)根檔案系統所占用的記憶體範圍。在規劃記憶體占用的布局時,主要考慮基位址和映像的大小兩個方面。  

對於核心映像,一般將其拷貝到從(mem_start+0x8000) 這個基位址開始的大約1mb大小的記憶體範圍內(嵌入式 linux 的核心一般都不操過 1mb)。為什麼要把從 mem_start 到 mem_start+0x8000 這段 32kb 大小的記憶體空出來呢?這是因為 linux 核心要在這段記憶體中放置一些全域性資料結構,如:啟動引數和核心頁表等資訊。  

而對於根檔案系統映像,則一般將其拷貝到 mem_start+0x0010,0000 開始的地方。如果用 ramdisk 作為根檔案系統映像,則其解壓後的大小一般是1mb。  

32k     +0x8000             +0x0100 0000

mem_start           kernel                         rootfs (1mb)

3.從 flash 上拷貝  

由於像 arm 這樣的嵌入式 cpu 通常都是在統一的記憶體位址空間中定址 flash 等固態儲存裝置的,因此從 flash 上讀取資料與從 ram 單元中讀取資料並沒有什麼不同。用乙個簡單的迴圈就可以完成從 flash 裝置上拷貝映像的工作:  

while(count) ;

ARM位址對映

重對映之後,一般原來的位址依然有效。也就是說,可能兩個位址,對應乙個儲存單元。arm晶元的位址重對映 對映就是一一對應的意思。重對映就是重新分配這種一一對應的關係。我們可以把儲存器看成乙個具有輸出和輸入口的黑盒子,如下圖所示,輸入量是位址,輸出的是對應位址上儲存的資料。當然這個黑盒子是由很複雜的半導...

系統位址空間,PCI位址空間

1 系統位址空間與 pci 位址空間 1.1 pci 位址空間 pci 匯流排具有 32 位資料 位址復用匯流排,所以其儲存位址空間為 2的32次方 4gb 也就是 pci 上的所有裝置共同對映到這 4gb 上,每個 pci 裝置占用唯一的一段 pci 位址,以便於 pci 匯流排統一定址。每個 p...

位址空間 位址生成

位址空間定義 邏輯位址生成 1 生成過程 1 編譯 高階語言 組合語言 2 彙編 組合語言 機器語言 5 例,乙個 c 程式中的函式位置 變數名是一種邏輯位址,將 c 語言編譯成組合語言,組合語言中依然使用變數和函式名等來進行編寫,將組合語言進行彙編形成 o 程式,o 程式的起始位址都是從 0 開始...