2012-01-03 23 views
0

從我的理解,後PC /嵌入式系統啓動時,操作系統將佔據整個RAM區,該RAM看起來就像這樣:如何通過U-boot在RAM中縮小OS區域​​?

OS region occupy the entire RAM

這意味着,當我運行一個程序我寫道,所有變量,分配在堆棧中的動態內存,堆等都將保留在區域內。如果我運行firefox,paint,gedit等,他們也會在這個區域運行。 (這種理解是否正確?)

但是,我想縮小操作系統區域。下面是我要如何劃分RAM一個例證:

OS region does not occupy the entire RAM, leaving some physical memory for my usage

,我想這樣做是因爲,我想存儲一些數據的原因從外部接收通過駕駛員進入Custom Region在固定物理位置,那麼我將能夠直接從用戶空間訪問它,而不使用copy_to_user()

我認爲通過配置u-boot可以做到這一點,但我沒有u-boot的經驗,任何人都可以給我一些指導,例如:我是否需要修改源代碼u-boot或更改u-boot的environment variables就足夠了?

或者有沒有其他方法可以做到這一點?

任何幫助,非常感謝。謝謝!

p/s:我正在使用TI ARM處理器,並從SD卡啓動,我不知道它是否重要。

+0

問題是這個問題的變化:http://stackoverflow.com/questions/11580285/pass-large-amount-of-binary-data-from-u-boot-to-linux-kernel/12137511#12137511 – sawdust 2012-08-27 21:02:53

回答

3

您需要設置以下參數:

max_addr=some_max_physical 
min_addr=some_min_physical 

通過UBOOT在「bootargs」 uboot的環境變量傳遞給內核。

+0

我會做一些閱讀並嘗試一下,並驗證您的答案,謝謝! – 2012-01-04 00:48:44

+0

您可能還必須構建可重定位內核,或者更改內核基地址以適應內核。 – rsaxvc 2012-01-07 01:45:03

3

該平臺是ARM。 min_addr和max_addr將無法在這些平臺上工作,因爲這些僅適用於英特爾實施。

對於ARM平臺,嘗試查看「mem = size @ start」內核參數。閱讀Documentation/kernel-parameters.txt和arch/arm/kernel/setup.c。該選項在大多數新的Linux代碼庫上都可用(即2.6.XX)。

0

最近我發現自己試圖做相反的事 - 換句話說,讓Linux在我的系統中使用額外的內存 - 儘管我在OMAP4平臺上使用Barebox而不是u-boot。

我發現(有點出乎我的意料),一旦Barebox MLO第一階段引導加載器意識到額外的內存,內核則檢測和使用它,以及沒有任何bootargs。由於內存大小沒有傳遞到引導線上的任何位置,我只能假設內核檢查由引導加載程序設置的內存映射來確定內存大小。這表明修改你的u-boot並不映射所有的RAM是最好的選擇。

關於引導參數的問題,有一段時間您建議您使用引導線在OMAP4系統上映射出一塊RAM(由幀緩衝區使用)。目前尚不清楚這是否仍然有必要。