我想创建一些内存用于 DMA 传输。(使用 Linux 2.6.18-128.el5 #1 SMP)
我的 H/W 有一个 API 堆栈+内核驱动程序可以为我做这件事,但它非常非常慢!
如果我使用 API 创建 DMA 传输,它会在系统 RAM 中分配一些非常高的内存(例如,一次运行时为 0x7373a6f8)。(我有设备的ICD,所以有一个内存映射mmap'd,这就是我如何找到这个地址,最后我想如何设置我自己的地址,因此/ dev / mem在下面的地图中)
我似乎无法围绕这个高地址映射内存,大概是因为它超出了我的虚拟内存空间并且我被内核阻止了?
我想要做的是要么使用(映射)给定的这个地址,所以我可以读/写它,或者创建我自己的可以读/写的物理内存。
# cat /proc/iomem
00000000-0009fbff : System RAM
00000000-00000000 : Crash kernel
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM
000f0000-000fffff : System ROM
00100000-7fd64fff : System RAM # Is this all of /dev/mem?
00400000-00612916 : Kernel code
00612917-006ef9db : Kernel data
# cat /proc/3450/maps
08207000-08228000 rw-p 08207000 00:00 0 [heap]
b7e7b000-b7f85000 rw-p b7e7b000 00:00 0
b7f89000-b7f8a000 rw-p b7f89000 00:00 0
b7f8a000-b7f8b000 rw-s 80114000 00:11 1541 /dev/mem
b7f8b000-b7f8d000 rw-p b7f8b000 00:00 0
bff70000-bff85000 rw-p bffea000 00:00 0 [stack]