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

評論