3

DMA転送に使用するメモリを作成したいと思います。(Linux 2.6.18-128.el5#1 SMPを使用)

H / W用のAPIスタック+カーネルドライバーがあり、これを実行できますが、非常に低速です。

APIを使用してDMA転送を作成すると、システムRAMの非常に高い位置にメモリが割り当てられます(たとえば、1回の実行で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]
4

1 に答える 1

0

私の理解が正しければ、動作の悪いデバイス ドライバーがあり、ユーザー空間から物理 RAM を手動で割り当てることで、それを回避しようとしているのですか? 代わりにドライバーを修正することに興味がない理由はありますか?

これは非常に奇妙な要求のように聞こえますが、ほとんどの人が適切な修正と見なすものではありません。根本的なドライバーの問題に取り組んでいれば、より多くの助けが得られると思います。

(上記のコメントからコピー。)

于 2011-03-08T15:51:40.947 に答える