0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux系统中通过预留物理内存实现ARM与FPGA高效通信的方法

骏龙电子 ? 来源:骏龙电子 ? 2025-04-16 13:42 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

应用背景

嵌入式系统开发中,ARMFPGA 之间的通信可以使用 ARM 侧的 DDR 作为通道。由于 FPGA 也可以直接访问到 ARM 侧 DDR,但 DDR 作为共享通信时,就不能被操作系统的内存管理子系统管理。因此,需要预留一部分物理内存,使其不被内核管理。接下来将为大家详细介绍在 Linux 系统中通过预留物理内存实现 ARM 与 FPGA 高效通信的方法,预留物理内存包括 memreserve、Linux 内核启动参数 cmdline 和 Linux Reserved-Memory 三种方案。

Linux 内存管理概述

Linux 内存管理的主要目标是满足进程 (Process) 对内存的需求,同时最大限度地利用有限的内存资源。为了实现这个目标,Linux 内存管理采用了一系列的技术和策略,包括虚拟内存 (Virtual Memory)、页式内存管理 (Paging)、交换空间 (Swap Space) 等。

在 Linux 内存管理内部是一个复杂的系统,由多个组件和子系统构成,共同协作,实现高效的内存使用。其中包含物理内存管理 (Physical Memory Management),虚拟内存管理 (Virtual Memory Management),内存分配器 (Memory Allocator),交换空间管理 (Swap Space Management)。通过内存管理系统,整个物理内存被有效管理。默认情况下,是对整个物理内存进行管理。

为特定的应用或者设备预留一部分物理内存做指定用途,这部分内存不受 Linux 内存系统管理,在需要使用的时候再对这部分内存进行管理,这就是内核中提供的 Reserved Memory 机制。

预留内存三种方法

1. Memreserve

通过设备树的 memreserve 分配的内存,无法再被操作系统使用。因此这种方案不建议在共享 DDR 的方案中使用。如内核源码目录下arch/arm/boot/dts/socfpga_cyclone5.dtsi。

wKgZO2f_Q1GAWYMTAABQKHhIRXw510.jpg

图1 CycloneV SoC 设备树 Memreserve 节点

2. Linux 内核启动参数 cmdline

Linux 内核启动参数 cmdline 提供了启动选项。其中 mem 选项用来设置系统内存的 size,也即操作系统管理的物理内存 size。当 mem 指定的 size 小于实际物理内存 size,剩余的部分不受 Linux 的内存管理系统管理。如 SoC FPGA 有 4G 物理内存,当 mem=3G 时,末尾的 1G 高端内存,不受操作系统管理。

3. Linux Reserved Memory 预留内存机制

Reserved Memory,顾名思义,把系统中的一部分内存保留,内核不会为它建立页表,在内核初始化过程中,解析该 reserved-memory 节点时,会将该段地址从 memblock 模块中移除。一般应用程序不能访问这段内存。如内核源码目录下arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi,下图 (图2) 为设备树节点:

wKgZO2f_Q1GAE8MeAACFBrDZdmw937.jpg

图2 设备树节点

关键参数:

通过 reg 参数,指定保存内存的特定范围

通过 no-map,指定操作系统不允许创建虚拟映射

通过 compatible=,这块内存会被用来进行 Contiguous Memory Allocator for dma

总结

本文主要介绍了 Linux 系统中通过预留物理内存实现 ARM 与 FPGA 高效通信的方法,预留物理内存包括 memreserve、Linux 内核启动参数 cmdline 和 Linux Reserved-Memory 三种方案。但在选择具体实现方式时,应根据系统的动态需求、内存管理要求和硬件特性进行权衡。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1646

    文章

    22069

    浏览量

    619731
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9373

    浏览量

    378616
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3686

    浏览量

    131598
  • Linux
    +关注

    关注

    87

    文章

    11522

    浏览量

    214275

原文标题:Linux 中 ARM 与 FPGA 通信的预留内存三种实现方案

文章出处:【微信号:骏龙电子,微信公众号:骏龙电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux内核的物理内存组织结构详解

    Linux内存管理子系统使用 节点(node)、区域(zone)和页(page) 三级结构描述物理内存
    发表于 08-21 15:35 ?899次阅读
    <b class='flag-5'>Linux</b>内核的<b class='flag-5'>物理</b><b class='flag-5'>内存</b>组织结构详解

    查看Linux系统内存使用情况的几种方法

    Linux系统内存监控是优化系统性能的关键。本文为你介绍12种方法,帮助你全面掌握
    的头像 发表于 11-13 09:30 ?1.5w次阅读
    查看<b class='flag-5'>Linux</b><b class='flag-5'>系统</b><b class='flag-5'>内存</b>使用情况的几种<b class='flag-5'>方法</b>

    使用Linux UIO框架实现ARMFPGA高效通信

    ARMFPGA 之间通信通信过程通信开始或者完成时,需要实时通知对方,如果
    的头像 发表于 02-25 09:49 ?1812次阅读
    使用<b class='flag-5'>Linux</b> UIO框架<b class='flag-5'>实现</b><b class='flag-5'>ARM</b>和<b class='flag-5'>FPGA</b>的<b class='flag-5'>高效</b><b class='flag-5'>通信</b>

    《电子发烧友电子设计周报》聚焦硬科技领域核心价值 第8期:2025.04.14--2025.04.18

    方法 /d/6539575.html 介绍在 Linux 系统通过
    发表于 04-18 20:03

    AM437x开发板FPGAARM基于GPMC通信测试

    ``最近都在研究AM437x,FPGAARM基于GPMC通信测试,入手的是创龙TL437xF-EVM,图片如下:以下简单介绍:本测试程序将FPGA模拟成GPMC
    发表于 05-16 14:28

    Linux内存系统Linux 内存分配算法

    和 ioremap_nocache 将预留内存映射到模块。需要修改内核启动参数, 无需重新编译内核. 但这种方法不支持 x86 架构, 只支持
    发表于 08-24 07:44

    请问如何在Linux Device Tree配置预留内存

    请问如何在Linux Device Tree配置预留内存
    发表于 12-29 06:22

    怎样在Linux内核预留一部分内存空间作特殊用途呢

    出来:/memreserve/ 0x40000000 0x00100000;使用 memreserve 预留出来的内存一般无法再被 Linux 系统使用(当然,也可以
    发表于 12-29 07:16

    全志D1-H芯片 如何在 Linux Device Tree 配置预留内存

    出来:/memreserve/ 0x40000000 0x00100000;使用 memreserve 预留出来的内存一般无法再被 Linux 系统使用(当然,也可以
    发表于 03-16 13:50

    全志D1-H芯片 如何在 Linux Device Tree 配置预留内存

    出来:/memreserve/ 0x40000000 0x00100000;使用 memreserve 预留出来的内存一般无法再被 Linux 系统使用(当然,也可以
    发表于 03-29 19:13

    ARM32 Linux内存布局

    看我们实际上内存布局是怎么样的?Linux内核在启动时,会打印出内核内存空间的布局图,下面是ARM IMX6平台打印出来的内存空间布局图这部
    发表于 04-24 14:20

    一种基于ARM-LinuxFPGA程序加载方法

    本文实现了一种基于ARM-LinuxFPGA 程序加载方法,详细讨论了加载过程各个阶段程序对配置管脚的操作,给出了硬件
    发表于 12-19 16:26 ?31次下载

    如何避免Linux物理内存碎片化

    Linux buddyy系统linux kernel比较稳定的一个模块,但是并不是说它没有缺陷,Linux内存管理
    的头像 发表于 05-01 16:43 ?5757次阅读
    如何避免<b class='flag-5'>Linux</b>的<b class='flag-5'>物理</b><b class='flag-5'>内存</b>碎片化

    深入剖析Linux共享内存原理

    不同进程之间进行通信,需要让不同进程共享相同的物理内存Linux通过? 共享内存 ?来
    的头像 发表于 10-30 09:52 ?2562次阅读
    深入剖析<b class='flag-5'>Linux</b>共享<b class='flag-5'>内存</b>原理

    Linux系统的共享内存的使用

    但有时候为了让不同进程之间进行通信,需要让不同进程共享相同的物理内存Linux通过 共享内存
    的头像 发表于 11-14 11:55 ?1623次阅读