我想创建一些用于DMA传输的内存。 (使用Linux 2.6.18-128.el5#1 SMP)
我的H / W有一个API堆栈+内核驱动程序可以为我做这个,但它非常慢!
如果我使用API创建DMA传输,它会在系统RAM中分配一些非常高的内存(例如,一次运行时为0x7373a6f8)。 (我有设备的ICD,所以有一个mmap的内存映射,这就是我可以找到这个地址的方式,以及我最终想要设置到我自己的地址,因此/ dev / mem在下面的地图中)
我似乎无法围绕这个高地址mmap内存,可能是因为它超出了我的虚拟内存空间而且被内核阻止了?
我想要做的是使用(映射)给定的地址,这样我就可以读/写它,或者创建我自己可以读/写的物理内存。
# 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]
答案 0 :(得分:0)
如果我正确理解你,你的设备驱动程序表现不佳,你是否试图通过从用户空间手动分配物理RAM来解决这个问题?你是不是有兴趣修改驱动程序?
这听起来像是一个非常奇怪的请求,而不是大多数人认为适当修复的东西。如果您正在处理潜在的驱动程序问题,我怀疑您会得到更多帮助。
(从上面的评论中复制。)