應用背景
在嵌入式系統(tǒng)開發(fā)中,ARM 和 FPGA 之間的通信可以使用 ARM 側(cè)的 DDR 作為通道。由于 FPGA 也可以直接訪問到 ARM 側(cè) DDR,但 DDR 作為共享通信時,就不能被操作系統(tǒng)的內(nèi)存管理子系統(tǒng)管理。因此,需要預留一部分物理內(nèi)存,使其不被內(nèi)核管理。接下來將為大家詳細介紹在 Linux 系統(tǒng)中通過預留物理內(nèi)存實現(xiàn) ARM 與 FPGA 高效通信的方法,預留物理內(nèi)存包括 memreserve、Linux 內(nèi)核啟動參數(shù) cmdline 和 Linux Reserved-Memory 三種方案。
Linux 內(nèi)存管理概述
Linux 內(nèi)存管理的主要目標是滿足進程 (Process) 對內(nèi)存的需求,同時最大限度地利用有限的內(nèi)存資源。為了實現(xiàn)這個目標,Linux 內(nèi)存管理采用了一系列的技術和策略,包括虛擬內(nèi)存 (Virtual Memory)、頁式內(nèi)存管理 (Paging)、交換空間 (Swap Space) 等。
在 Linux 內(nèi)存管理內(nèi)部是一個復雜的系統(tǒng),由多個組件和子系統(tǒng)構成,共同協(xié)作,實現(xiàn)高效的內(nèi)存使用。其中包含物理內(nèi)存管理 (Physical Memory Management),虛擬內(nèi)存管理 (Virtual Memory Management),內(nèi)存分配器 (Memory Allocator),交換空間管理 (Swap Space Management)。通過內(nèi)存管理系統(tǒng),整個物理內(nèi)存被有效管理。默認情況下,是對整個物理內(nèi)存進行管理。
為特定的應用或者設備預留一部分物理內(nèi)存做指定用途,這部分內(nèi)存不受 Linux 內(nèi)存系統(tǒng)管理,在需要使用的時候再對這部分內(nèi)存進行管理,這就是內(nèi)核中提供的 Reserved Memory 機制。
預留內(nèi)存三種方法
1. Memreserve
通過設備樹的 memreserve 分配的內(nèi)存,無法再被操作系統(tǒng)使用。因此這種方案不建議在共享 DDR 的方案中使用。如內(nèi)核源碼目錄下arch/arm/boot/dts/socfpga_cyclone5.dtsi。
圖1 CycloneV SoC 設備樹 Memreserve 節(jié)點
2. Linux 內(nèi)核啟動參數(shù) cmdline
Linux 內(nèi)核啟動參數(shù) cmdline 提供了啟動選項。其中 mem 選項用來設置系統(tǒng)內(nèi)存的 size,也即操作系統(tǒng)管理的物理內(nèi)存 size。當 mem 指定的 size 小于實際物理內(nèi)存 size,剩余的部分不受 Linux 的內(nèi)存管理系統(tǒng)管理。如 SoC FPGA 有 4G 物理內(nèi)存,當 mem=3G 時,末尾的 1G 高端內(nèi)存,不受操作系統(tǒng)管理。
3. Linux Reserved Memory 預留內(nèi)存機制
Reserved Memory,顧名思義,把系統(tǒng)中的一部分內(nèi)存保留,內(nèi)核不會為它建立頁表,在內(nèi)核初始化過程中,解析該 reserved-memory 節(jié)點時,會將該段地址從 memblock 模塊中移除。一般應用程序不能訪問這段內(nèi)存。如內(nèi)核源碼目錄下arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi,下圖 (圖2) 為設備樹節(jié)點:
圖2 設備樹節(jié)點
關鍵參數(shù):
通過 reg 參數(shù),指定保存內(nèi)存的特定范圍
通過 no-map,指定操作系統(tǒng)不允許創(chuàng)建虛擬映射
通過 compatible=,這塊內(nèi)存會被用來進行 Contiguous Memory Allocator for dma
總結
本文主要介紹了 Linux 系統(tǒng)中通過預留物理內(nèi)存實現(xiàn) ARM 與 FPGA 高效通信的方法,預留物理內(nèi)存包括 memreserve、Linux 內(nèi)核啟動參數(shù) cmdline 和 Linux Reserved-Memory 三種方案。但在選擇具體實現(xiàn)方式時,應根據(jù)系統(tǒng)的動態(tài)需求、內(nèi)存管理要求和硬件特性進行權衡。
-
FPGA
+關注
關注
1642文章
21918瀏覽量
611975 -
ARM
+關注
關注
134文章
9270瀏覽量
373512 -
嵌入式系統(tǒng)
+關注
關注
41文章
3662瀏覽量
130616 -
Linux
+關注
關注
87文章
11420瀏覽量
212316
原文標題:Linux 中 ARM 與 FPGA 通信的預留內(nèi)存三種實現(xiàn)方案
文章出處:【微信號:駿龍電子,微信公眾號:駿龍電子】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
Linux內(nèi)核的物理內(nèi)存組織結構詳解

查看Linux系統(tǒng)內(nèi)存使用情況的幾種方法

評論