文章目录
- 前言
- 一、什么是 Typed memory
- 二、查看系统已有Typed memory 的方法
- 三、Typed memory 的使用方法
-
- 1.定义一个packet memory并从系统内存中分出它
- 1.1 as_add()
- 1.2 as_add_containing()
- 2. 从 Typed memory 中申请内存
- 2.1 POSIX method 申请内存
- 2.2 QNX Neutrino method 申请内存
- 四、Typed memory 使用实例
-
- 1. Allocating contiguous memory from system RAM
- 2. Allocating contiguous memory from system memory below4G
- 2. 创建一个普通的packet memory
- 3. 创建一个 DMA-safe region
- 总结
- 参考资料
前言
本文主要介绍QNX 里面的 Typed memory 机制,它类似于 linux 里面的 reserved memory ,可以从系统内存中分出一部分内存用来给特定的硬件模块使用
软件版本:qnx7.1
一、什么是 Typed memory
如下图所示, 是QNX 官网对 Typed memory 的介绍,它和 linux 里面的 reserved memory 类似,可以从系统内存中分出一部分内存用来给特定的硬件模块使用,如GPU,VSP等硬件模块
二、查看系统已有Typed memory 的方法
在qnx 系统中执行 pidin syspage=asinfo 命令就可以看到系统中已有的Typed memory 分布,如下图所示
typed memory 之间是通过命名来区分的,上图中的/memory/below4G, /memory 等都代表着各个Typed memory
三、Typed memory 的使用方法
1.定义一个packet memory并从系统内存中分出它
目前有两种方法,分别是使用as_add() 建立一个普通的内存池,和使用 as_add_containing() 建立一个DMA 内存池
1.1 as_add()
如下图所示,是 qnx 官方的实例,使用 as_add() 接口来定义一个packet memory 并从系统内存中分出这块内存
如下图所示,是 qnx 官方对 as_add() 函数的介绍
通过 as_add() 建立的这个 packet memory (就是Linux 里面的reserved memory)就是一个内存池,驱动可以从里面申请内存给其硬件模块使用
1.2 as_add_containing()
如下图所示,是 qnx 官方的实例,使用as_add_containing()接口来定义一个 DMA-safe region 并从系统内存中分出这块内存
如下图所示,是 qnx 官方对as_add_containing()接口的介绍
通过 as_add_containing() 建立的这个DMA-safe region(就是Linux 里面的reserved memory)就是一个DMA内存池,驱动可以从里面申请内存给其硬件模块使用