С чего начать изучение linux DMA / драйверов устройств / распределения памяти - PullRequest
6 голосов
/ 03 марта 2010

Я портирую / отлаживаю драйвер устройства (который используется другим модулем ядра) и нахожусь в тупике, потому что dma_sync_single_for_device () завершается ошибкой с ядром.

Я понятия не имею, что должна делать эта функция, и поиск в Google не очень помогает, поэтому мне, вероятно, нужно больше узнать об этом.

Вопрос в том, с чего начать?

О, да, в случае необходимости код должен работать на PowerPC (а linux - OpenWRT)

EDIT: Предпочтение отдается онлайн-ресурсам (доставка книг занимает несколько дней:)

Ответы [ 3 ]

9 голосов
/ 03 марта 2010

Онлайн:

Анатомия распределителя плит Linux

Общие сведения о диспетчере виртуальной памяти Linux

Драйверы для устройств Linux, третье издание

Руководство по программированию модуля ядра Linux

Написание драйверов устройств в Linux: краткое руководство

Книга:

Разработка ядра Linux (2-е издание)

Основные драйверы устройств Linux (только первые 4 - 5 глав)

Полезные ресурсы:

перекрестная ссылка Linux (доступный для поиска источник ядра для всех ядер)

Изменения API в ядре 2.6


dma_sync_single_for_device вызывает dma_sync_single_range_for_cpu немного дальше в файле, и это исходная документация (я предполагаю, что, хотя это и для руки, интерфейс и поведение то же самое):

/**
 380 * dma_sync_single_range_for_cpu
 381 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
 382 * @handle: DMA address of buffer
 383 * @offset: offset of region to start sync
 384 * @size: size of region to sync
 385 * @dir: DMA transfer direction (same as passed to dma_map_single)
 386 *
 387 * Make physical memory consistent for a single streaming mode DMA
 388 * translation after a transfer.
 389 *
 390 * If you perform a dma_map_single() but wish to interrogate the
 391 * buffer using the cpu, yet do not wish to teardown the PCI dma
 392 * mapping, you must call this function before doing so.  At the
 393 * next point you give the PCI dma address back to the card, you
 394 * must first the perform a dma_sync_for_device, and then the
 395 * device again owns the buffer.
 396 */
5 голосов
/ 03 марта 2010
3 голосов
/ 03 марта 2010

Главы книги Драйверы устройств Linux (из той же серии, что и Понимание ядра Linux, рекомендованного @Matthew Flaschen) могут быть полезны.

Вы можете скачать отдельные главы с веб-сайта LWN . Глава 16 имеет дело с DMA.

...