Я портирую / отладка драйвера устройства (который используется другим модулем ядра), и направление с тупиком, потому что dma_sync_single_for_device () перестал работать с ядром ой.
У меня нет подсказки, что та функция, как предполагается, делает, и поиск с помощью Google действительно не помогает, таким образом, я, вероятно, должен узнать больше об этом материале всего.
Вопрос, где запустить?
О, да, в случае, если это релевантно, код, как предполагается, работает на PowerPC (и Linux является OpenWRT),
Править: Предпочтительные ресурсы онлайн (книги занимают несколько дней, которые будут поставлены :)
В сети:
Анатомия slab-распределителя 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 */
В главах книги Драйверы устройств Linux (из той же серии, что и «Общие сведения о ядре Linux», рекомендованной @Matthew Flaschen), возможно, быть полезным.
Вы можете загрузить отдельные главы с веб-сайта LWN . Глава 16 имеет дело с прямым доступом к памяти.