內(nèi)存占用分析
每顆芯片在出廠時(shí),其bootrom就已經(jīng)固化在芯片內(nèi)部,假設(shè)bootrom的地址是0x0,即上電后,會(huì)從0x0地址處開始運(yùn)行程序。
在啟動(dòng)RISC-VLinux之前,需要先運(yùn)行opensbi,因此應(yīng)該把opensbi放到地址0x0處,這樣芯片上電后,就會(huì)從0x0地址處執(zhí)行opensbi。在opensbi運(yùn)行完后,會(huì)跳轉(zhuǎn)到opensbi運(yùn)行地址偏移2M的位置去執(zhí)行下一級(jí)boot(這里下一級(jí)boot是kernel),即跳轉(zhuǎn)到0x200000地址處運(yùn)行kernel,因此應(yīng)該把kernel放到內(nèi)存的0x200000處。
內(nèi)存分布示意圖如下:
對(duì)于kernel來說,在啟動(dòng)時(shí)會(huì)從自己的kernel加載地址處(即0x200000)開始建立頁表映射,只有對(duì)物理內(nèi)存建立了頁表映射,后面才能訪問這些內(nèi)存。而kernel加載地址前面的2M內(nèi)存(即0x0- 0x200000)將被kernel忽略,不會(huì)對(duì)這2M內(nèi)存建立頁表,即kernel無法訪問這2M內(nèi)存。
在QEMU上RISC-V Linux的啟動(dòng)信息:
但opensbi實(shí)際不需要使用2M這么大的范圍,默認(rèn)是512KB,opensbi的pmp會(huì)保護(hù)這512KB內(nèi)存,不讓其他程序訪問。
因此在Kernel和opensbi之間會(huì)存在1.5M的內(nèi)存空隙,并且這部分內(nèi)存空隙沒有程序使用,這就會(huì)造成內(nèi)存浪費(fèi),那如何讓kernel將前面的一部分內(nèi)存也利用起來呢?
優(yōu)化方案方案一:將opensbi放到內(nèi)存的最后面,kernel入口地址仍然保持2M對(duì)齊。
方案一
我們將opensbi放到內(nèi)存的最后面,kernel入口地址仍然保持2M對(duì)齊。
即kernel放到內(nèi)存的最前面,opensbi放到后面:
例如kernel放到內(nèi)存的0x0地址處,opensbi放到內(nèi)存的0x10000000地址處。這樣kernel前面就不會(huì)有預(yù)留內(nèi)存,只不過這樣需要修改bootrom的地址,將地址從0x0修改為0x0x10000000。這種方案只適合芯片還沒出廠前,因?yàn)橛脩魺o法修改bootrom的地址,芯片出廠后,bootrom地址是固定的,假設(shè)bootrom地址為0x0,那么芯片上電后,就會(huì)從0x0開始運(yùn)行程序,所以opensbi必須放到0x0地址處,這樣必然kernel只能往后偏移2M。
-
芯片
+關(guān)注
關(guān)注
456文章
51283瀏覽量
427812 -
Linux
+關(guān)注
關(guān)注
87文章
11351瀏覽量
210512 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3064瀏覽量
74383 -
RISC
+關(guān)注
關(guān)注
6文章
468瀏覽量
83909
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Linux的內(nèi)存管理是什么,Linux的內(nèi)存管理詳解
![<b class='flag-5'>Linux</b>的<b class='flag-5'>內(nèi)存</b>管理是什么,<b class='flag-5'>Linux</b>的<b class='flag-5'>內(nèi)存</b>管理詳解](https://file.elecfans.com//web2/M00/43/01/pYYBAGJ7h8qAfJe-AAA3U8e_SDc509.jpg)
Linux下查詢進(jìn)程占用的內(nèi)存方法總結(jié)
![<b class='flag-5'>Linux</b>下查詢進(jìn)程<b class='flag-5'>占用</b>的<b class='flag-5'>內(nèi)存</b>方法總結(jié)](https://file1.elecfans.com/web2/M00/8D/ED/wKgZomTB3D-AKI4jAAAVGDoMqYs234.jpg)
Linux的CPU和內(nèi)存占用率查看
基于IMX6查看Linux下的CPU和內(nèi)存的占用率
linux如何查看端口占用情況?
![<b class='flag-5'>linux</b>如何查看端口<b class='flag-5'>占用</b>情況?](https://file1.elecfans.com//web2/M00/A6/F2/wKgZomUMQWaAe68OAAAHmIxrcqU292.jpg)
Android高效內(nèi)存:讓圖片占用盡可能少的內(nèi)存
詳細(xì)介紹Linux 內(nèi)存使用方法
Java服務(wù)器內(nèi)存和CPU占用過高的原因
分析Linux操作系統(tǒng)的內(nèi)存
更低內(nèi)存占用的通用Json庫-RyanJson
![更低<b class='flag-5'>內(nèi)存</b><b class='flag-5'>占用</b>的通用Json庫-RyanJson](https://file1.elecfans.com/web2/M00/96/D3/wKgaomTnIWaAQGsHAAEPiunHcfM160.jpg)
分享排查Linux系統(tǒng)CPU占用的一個(gè)Shell腳本
![分享排查<b class='flag-5'>Linux</b>系統(tǒng)CPU<b class='flag-5'>占用</b>的一個(gè)Shell腳本](https://file1.elecfans.com/web2/M00/A1/74/wKgZomT1MQSARzhUAAAHPKAnqgU371.png)
Windows不明內(nèi)存占用案例分析:Driver Locked
![Windows不明<b class='flag-5'>內(nèi)存</b><b class='flag-5'>占用</b>案例<b class='flag-5'>分析</b>:Driver Locked](https://file1.elecfans.com/web2/M00/A6/06/wKgaomURLWeAbIzrAAVAFCbD5_s074.jpg)
評(píng)論