當前位置:首頁 > 公眾號精選 > Linux閱碼場
[導讀]作者簡介于浩進,linux內(nèi)核愛好者,現(xiàn)就職于北京靈汐科技有限公司,任職BSP工程師,主要負責IP驗證、多媒體驅(qū)動開發(fā)及一些bringup等工作。文章大綱1.背景介紹2.環(huán)境說明2.1?硬件環(huán)境2.2Kernel?版本2.3kernel?相關(guān)配置介紹3.fixmap?機制介紹3....

作者簡介

于浩進,linux內(nèi)核愛好者,現(xiàn)就職于北京靈汐科技有限公司,任職BSP工程師,主要負責IP驗證、多媒體驅(qū)動開發(fā)及一些bring up等工作。


文章大綱

1.背景介紹

2.環(huán)境說明


2.1?硬件環(huán)境


2.2 Kernel?版本


2.3 kernel?相關(guān)配置介紹

3.fixmap?機制介紹


3.1?虛擬空間拓撲

3.1.1 VA=39bit?下?kernel?虛擬地址空間拓撲
3.1.2 FIXMAP?地址空間拓撲
3.1.3 FIXMAP?初始化

3.2 fixmap?在?early ioremap?應用介紹

3.2.1 early_ioremap_setup()
3.2.2?__early_ioremap()


3.3 fixmap?在?early console?應用介紹


3.4 fixmap?在?device-tree?應用介紹

3.4.1?映射過程分析

3.5 fixmap?在?paging_init?中頁表切換介紹

3.5.1 paging_init?函數(shù)簡單分析
3.5.2 paging_init?中的?fixmap

4.小結(jié)

5.參考文章


01

背景介紹

Fixmap機制是kernel在啟動過程中(start_kernel)臨時的映射機制,目的是在真正頁表建立之前用于完成對io設(shè)備的訪問、device-tree的解析以及paging_init中的頁表切換等。本文將對該機制做一個深入的分析。


02

環(huán)境說明

2.1硬件環(huán)境

SOC芯片,CPU8cortex-A53,其DDR物理地址為0x800000000,device-tree存放的物理地址為0x843000000

2.2kernel版本4.19.83版本。

2.3kernel相關(guān)配置介紹
  • 相關(guān)Config配置

  • 相關(guān)宏配置

????????以下宏的值,只給出結(jié)果了:


03

虛擬空間拓撲??

3.1虛擬空間拓撲3.1.1 VA=39bitkernel虛擬地址空間拓撲

1詳細展示了VA=39bitkernel虛擬地址空間拓撲,里面展示了FIXMAP區(qū)域在整個虛擬地址空間所處的位置。


3.1.2 FIXMAP地址空間拓撲

KernelFixmap區(qū)域做了進一步的劃分,各區(qū)間是在enum fixed_addresses 枚舉類型定義的(/arch/arm64/include/asm/fixmap.h)。


其各個區(qū)間的virtual address通過fix_to_virt(const unsigned int idx)函數(shù)獲得,其定義是在/include/asm-generic/fixmap.h里面,這個函數(shù)后面會用到。


下圖2詳細展示了各個區(qū)間的base address。

Fix_to_virt的定義如下:


3.1.3 FIXMAP初始化

Bm_pte、bm_pmdBm_pte為三個全局數(shù)組,用于暫存pud、pmd、

pte的頁表。


early_fixmap_init()函數(shù)完成了fixmap映射的基礎(chǔ)框架,如下圖3所示,bm_pte數(shù)組并沒有填值,因為當前還不知道哪些物理地址需要映射,等需要映射時候再去填寫bm_pteentry。

?

經(jīng)過分析代碼,整理了fixmap各段虛擬地址與bm_pmd entry的關(guān)系,如下圖4所示:

需要說明的是FIX_PGD~FIX_FDTbm_pmd是屬于同一個entry,即可以用bm_ptepte映射。


FIX_FDT~FIX_HOLE不屬于該entry,即不可以用bm_ptepte映射,也為后面device-tree的映射做了一個鋪墊。


3.2fixmap在early ioremap應用介紹3.2.1 early_ioremap_setup()

該函數(shù)的比較簡單,主要是依靠__fix_to_virt()slot_virt[i]填入虛擬地址,其布局如下圖5所示。

slot[i]fix_map區(qū)域已經(jīng)規(guī)劃好的虛擬地址范圍,任何I/O地址空間都可以向這7slot空間做映射。


其中:slot_virt[i] = __fix_to_virt(FIX_BTMAP_BEGIN - NR_FIX_BTMAPS*i)__fix_to_virt()在之前已經(jīng)介紹過。Slot_virt每個區(qū)間size256K。


3.2.2?__early_ioremap()

有三個數(shù)組需要說明:

slot_virt[slot]BTMAP區(qū)域各個區(qū)間虛擬地址;

prev_map[slot]__early_ioremap()映射后的虛擬地址;

prev_size[slot]__early_ioremap()要映射的size;


映射流程如下圖6所示:

Figure 6 early ioremap映射流程圖


圖7展示了early ioremap頁表轉(zhuǎn)換過程,還是比較簡單的。


3.3fixmap在early console應用介紹
Early console的映射與early ioremap的映射類似,通過__fix_to_vit(FIX_EARLYCON_MEM_BASE)獲取虛擬地址,物理地址為UARTSOC的實際分配的地址(該物理地址來自于command lineearlycon=XXX),然后通過向bm_pte寫入頁表,即可以完成映射。


8是函數(shù)調(diào)用關(guān)系。圖9是頁表的建立和轉(zhuǎn)換過程。


3.4?fixmap在device-tree應用介紹
3.4.1 射過程分析

Device-tree的映射和early-console、early-ioremap的映射原理有所不同,主要區(qū)別在于FIX_FDT空間對應的虛擬地址的pmd entryFIXADDR_START對應的pmd entry是不同的。


通過分析kernel代碼可知對于device-tree的映射需要建立一個2Mblock entry即可,即在bm_pmd建立一個block entry。


如下圖10所示,只需要找到pmdp,寫入block entry的頁表項即可。


那問題來了,pmdp的虛擬地址我們是知道的,對應的bm_pmdentry的物理地址也能知道,但是兩者之間的頁表還未建立。


因此在用pmdp指針向bm_pmd寫入block entry之前,必須要先建立pmdp的頁表,這個頁表建立過程就與early console的頁表建立過程相同了。見下圖11所示。

設(shè)備樹頁表的建立會調(diào)用到init_pmd()建立block entry,也就是下圖122對應的代碼,圈1的代碼就是對應上圖11pmdp建立頁表的過程。


在寫入block entry之后,pmdp也就無用了,圈3代碼把剛才的pmdp的頁表清除了,即把bm_pte對應的表項清除了。

最后再簡單展示一下fixmap為設(shè)備樹建立頁表的函數(shù)調(diào)用關(guān)系,如下圖13所示。

3.5fixmap在paging_init中頁表切換介紹3.5.1 paging_init函數(shù)簡單分析

下圖14paging_init的代碼分析。

  • ?1代碼通過memblock分配器分配了一個物理頁面,該頁面暫存后面代碼建立的頁表;


  • 2代碼是通過fixmp機制把這個物理頁面映射為虛擬地址;


  • 3代碼把kernel的鏡像的一些代碼段、數(shù)據(jù)做等做映射,在圖1有說明;


  • 4代碼把memblock.memory類型的region區(qū)域做線性映射,比如設(shè)備樹的memory節(jié)點的內(nèi)存,會在此做線性映射,但是會排除代碼段和只讀數(shù)據(jù)段,具體細節(jié),還請看源碼;


  • 5~7代碼將暫存頁表內(nèi)容拷貝到swapper_pg_dir,同時切換ttbr寄存器,此后CPU發(fā)出的虛擬地址就可以通過這套新建的頁表進行虛實轉(zhuǎn)換了;


  • 8清除pgdp的映射;


  • 9代碼釋放剛才申請的物理頁;


3.5.2 paging_init中的fixmap

上圖 圈6代碼是把臨時頁表拷貝到swapper_pg_dir,臨時頁表的物理頁是memblock分配器獲得的物理地址。


由于mmu已經(jīng)開啟,memcpy無法使用物理地址,所以必須要先用fixmap機制做該物理頁面的映射,得到其虛擬地址,即pgd_set_fixmap(addr),其定義如下:


其是借助于fixmp的“FIX_PGD”區(qū)域做的映射,頁表映射及轉(zhuǎn)換過程如下圖15所示。


04

小結(jié)

  • 在進入start_kernel之前,head.S的“__primary_switch”已經(jīng)開啟mmu了,使能mmu之后CPU發(fā)出的ldr、str指令都為虛擬地址了,因此必須要提前建立好頁表,mmu才能把虛擬地址轉(zhuǎn)為物理地址,以訪問真正的物理內(nèi)存;


  • Fixmap用于在” earlyconsole”、” device-tree的解析”、” earlyioremap”、” paging_init的頁表切換”等過程建立臨時頁表。


  • Fixmap機制實際就是為mmu做了相關(guān)的虛擬和物理地址的映射;


  • Bm_pmd、bm_pte是兩個全局數(shù)組,用于存放pmd、pte的頁表項;



05

參考文獻

https://www.cnblogs.com/LoyenWang/p/11483948.html

https://www.cnblogs.com/LoyenWang/p/11440957.html

https://www.cnblogs.com/pengdonglin137/p/9157639.html

armv8_arm.pdf,從ARM官網(wǎng)下載即可。


歡迎賜稿“Linux閱碼場”,投稿請掃碼微信聯(lián)系“小月”,稿費300-500RMB(已經(jīng)以任何形式,如公眾號、博客、網(wǎng)站發(fā)表過的文章,請勿投稿):




掃描識別二維碼關(guān)注"Linux閱碼場"? ? ?

如果您覺得不錯,請轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)!

或者隨手點個“在看”吧~

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉