Создание физической памяти из пользовательского пространства для передачи по DMA

Я хочу создать память для передачи по DMA. (Используется Linux 2.6.18-128.el5 # 1 SMP)

У меня есть стек API + драйвер ядра для моего H / W, который может сделать это за меня, но очень-очень медленно!

Если я использую API для создания передачи DMA, он выделяет некоторую память очень высоко в системной RAM (например, 0x7373a6f8 за один запуск). (У меня есть ICD устройства, так что у меня есть карта памяти mmap'd, вот как я могу найти этот адрес и как в конце концов я хочу установить на свой собственный адрес, и, следовательно, / 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]

person Ian Vaughan    schedule 23.02.2010    source источник
comment
Если я правильно вас понял, у вас есть драйвер устройства, который плохо себя ведет, и вы пытаетесь обойти это, вручную выделяя физическую оперативную память из пользовательского пространства? Есть ли причина, по которой вы не хотите вместо этого исправлять драйвер? Это звучит как очень странный запрос, и большинство людей не сочтут его правильным решением. Я подозреваю, что вам бы больше помогли, если бы вы работали над основной проблемой драйвера.   -  person Eric Seppanen    schedule 23.02.2010
comment
Ваше право, API / библиотека пользовательского пространства sllooow. Хотя я опытный разработчик C / C ++, я раньше не занимался сушилками для устройств, и теперь это моя или моя компания. Я искал / надеялся на быстрый (читай грязный) хак, чтобы обойти это, как вы разработали, но на самом деле теперь наш поставщик драйверов API / ядра должен предоставить нам лучший драйвер! Спасибо за ваш ответ!   -  person Ian Vaughan    schedule 25.02.2010
comment
@Eric Если вы хотите использовать эти слова в качестве ответа, я приму это, поскольку, хотя мы сейчас не используем DMA, я реализую наш собственный драйвер устройства (stackoverflow.com/q/5185397/119790)   -  person Ian Vaughan    schedule 07.03.2011


Ответы (1)


Если я правильно вас понял, у вас есть драйвер устройства, который плохо себя ведет, и вы пытаетесь обойти это, вручную выделяя физическую оперативную память из пользовательского пространства? Есть ли причина, по которой вы не хотите вместо этого исправлять драйвер?

Это звучит как очень странный запрос, и большинство людей не сочтут его правильным решением. Я подозреваю, что вам бы больше помогли, если бы вы работали над основной проблемой драйвера.

(скопировано из комментария выше.)

person Eric Seppanen    schedule 08.03.2011
comment
Я заявил, что приму этот ранее сделанный комментарий (см. Выше), поэтому я принял его, поскольку это то, что я сделал сейчас! Но у меня должен быть небольшой стон по поводу высказанной точки зрения, хотя и верной, она не умаляет того, что на самом деле не помогает ответить на вопрос! Большое спасибо, хотя, как всегда, всем / любому вкладу ... - person Ian Vaughan; 09.03.2011
comment
Справедливая критика; может, мне стоило сделать комментарий вместо ответа :) - person Eric Seppanen; 09.03.2011