國產處理器龍芯地址空間詳解
國產處理器龍芯地址空間詳解
原創程式猿的未來人生2020-06-13 09:04:07
MIPS基本邏輯地址空間
MIPS64架構下包含一個64位地址空間和一個32位地址空間,32位地址空間是64位地址空間的子集。32位地址空間被分成四段,即常說的kuseg,kseg0~2如下圖。其64位地址空間可被分割成更多的段。
kuseg:0x0000 0000-0x7FFF FFFF(低端2G) :使用者太可用地址,必須通過MMU進行地址對映後才能正常訪問。
kseg0:0x8000 0000 - 0x9FFF FFFF(512M):最高位清零就是對應的實體地址,對映到連續的低端512M實體地址。該地址空間通過快取記憶體存取,主要用來存放作業系統核心。
kseg1:0xA000 0000 - 0xBFFF FFFF(512M):高3位清零就是對應的實體地址,對映到連續的低端512M實體地址。該地址空間不通過快取記憶體存取,該區域主要用做I/O暫存器,系統ROM和啟動時入口向量(0xBFC00000)就存於這個地址段內,因為系統啟動時cache還未進行初始化。
kseg1:0xC000 0000 - 0xFFFF FFFF (1G):該地址段只能在核心態使用,並且需要經過MMU轉換。
龍芯實體地址空間規範
龍芯實體地址空間設計的規則約定如下:
- 0x0000_0000~0x0FFF_FFFF 的低 256MB 空間為低端記憶體空間。 其中0x000 0000~0x001F FFFF為相容老版本韌體保留的2M地址空間;0x0F00_0000~0x0FFF_FFFF 是為韌體PMON保留的 16M 地址空間,用於與核心的資訊互動,如韌體傳參、關機和重啟功能、Smbios、 Vbios 等。
- 0x1000_0000~0x1FFF_FFFF 為 PCI 等 IO 裝置空間及部分晶片配置暫存器空間;
- 0x3000_0000~0x3FFF_FFFF 為視窗配置暫存器的空間範圍;
- 0x4000_0000~0x7FFF_FFFF 為 PCI 裝置 memory 空間範圍;
- 0x2000_0000~0x2FFF_FFFF 和 0x8000_0000~高階記憶體基址-0x0000_0001 為保留空洞;
- 高階記憶體基址預設值為 0x9000_0000。
System RAM地址範圍如下圖:
龍芯DMA 地址對映規範
編寫驅動時涉及設定DMA地址,龍芯不同晶片的DMA地址設定不同,需要特別注意,否則驅動可能無法正常執行。其相關DMA地址設定方法如下:
- 7A 作為橋片時 DMA 地址與記憶體實體地址的對應關係為 1:1 對映:即 dmaaddr = phyaddr
- 2H 作為橋片時 DMA 地址與記憶體實體地址的對應關係分為兩種情況: 記憶體地址為低 256M 時與 DMA 地址關係為 1:1 對映; 記憶體地址大於 256M 時與 DMA 的對映關係為 dmaaddr = phyaddr - 0x80000000。
- 780e 作為橋片時 DMA 地址與記憶體實體地址的對應關係分為兩種情況: 記憶體地址在低 256M 對映關係為 dmaaddr=phyaddr | 0x80000000; 記憶體地址大於 256M 的部分為 1:1 對映。
-------------------------------------------------------------------------------------------------------------------------------------------------
總結:龍芯2k實體地址空間為
0-0xFFFFFFF (0-256M)
0x90000000-0xFFFFFFFF(256M-2G)
虛擬地址空間:
kuseg:0x0000 0000-0x7FFF FFFF(低端2G) :使用者太可用地址,必須通過MMU進行地址對映後才能正常訪問。
kseg0:0x8000 0000 - 0x9FFF FFFF(512M):最高位清零就是對應的實體地址,對映到連續的低端512M實體地址。該地址空間通過快取記憶體存取,主要用來存放作業系統核心。由於實體地址不連續所以,虛擬地址(0x80000000~0x80000000+256M)==>對應實體地址0-0xFFFFFFF (0-256M,即低端256M) 虛擬地址(0x90000000~0x90000000+256M)=====>對應實體地址(0x90000000~0x90000000+256M),pmon起來後,只能使用低端256M實體記憶體
kseg1:0xA000 0000 - 0xBFFF FFFF(512M):高3位清零就是對應的實體地址,對映到連續的低端512M實體地址。該地址空間不通過快取記憶體存取,該區域主要用做I/O暫存器,系統ROM和啟動時入口向量(0xBFC00000)就存於這個地址段內,因為系統啟動時cache還未進行初始化。
kseg1:0xC000 0000 - 0xFFFF FFFF (1G):該地址段只能在核心態使用,並且需要經過MMU轉換
相關文章
- 龍芯1D處理器datasheet
- 龍芯2號處理器,龍芯2K1000晶片引數晶片
- 龍芯1B晶片處理器介紹晶片
- 龍芯1A處理器引數介紹
- 龍芯1D晶片處理器介紹晶片
- 龍芯釋出新一代伺服器處理器:龍芯3C5000L伺服器
- 國產核心科技 龍芯機器人控制器首次亮相機器人
- 龍芯2H晶片處理器引數效能介紹晶片
- 最新龍芯2J處理器資料手冊/datasheet
- 伺服器處理器大亂鬥 龍芯攪局2012(圖)伺服器
- 龍芯3A3000和龍芯3B3000晶片處理器引數比較晶片
- python時間處理詳解Python
- 高通驍龍850處理器引數詳細介紹
- undo表空間故障處理
- 銳龍處理器和酷睿處理器哪個好 為什麼都不建議買銳龍處理器
- 伺服器儲存空間不足怎麼處理?伺服器
- 龍芯應用技術合作研討會-龍芯和國產Linux謀求共同發展(轉)Linux
- 程式地址空間
- JAXB名稱空間及名稱空間字首處理
- undo表空間佔用磁碟空間滿案例處理
- Postgresql表空間詳解SQL
- 銳龍處理器和酷睿處理器哪個好 電腦處理器銳龍和酷睿哪個好一點
- 龍芯 & Golang!Golang
- Laravel 處理 MySQL geometry 空間型別LaravelMySql型別
- sysaux 表空間爆滿處理方法UX
- sysaux 表空間不足問題處理UX
- Oracle Temp臨時表空間處理Oracle
- UNDO表空間損壞的處理
- oracle 表空間 不足時如何處理Oracle
- Oracle表空間操作詳解Oracle
- Python時間處理常用模組及用法詳解!Python
- 龍芯2號系列功能及技術特點(龍芯2F,龍芯2H,龍芯2K1000)
- 龍芯 & Golang!Golang
- PCIE配置和地址空間
- 高通驍龍660處理器解析:比驍龍653提升多少?
- MyBatis(九):MyBatis型別處理器(TypeHandler)詳解MyBatis型別
- undo 表空間滿了的處理方法
- 表空間資料檔案故障處理