7

デバイス ドライバー (別のカーネル モジュールで使用されている) を移植/デバッグしていますが、カーネル oops で dma_sync_single_for_device() が失敗するため、行き止まりに直面しています。

私はその機能が何をするべきか見当もつかないし、グーグルもあまり役に立たないので、おそらくこのことについてもっと学ぶ必要がある.

問題は、どこから始めればよいかということです。

そうそう、関連する場合に備えて、コードは PowerPC で実行することになっています (Linux は OpenWRT です)。

編集: オンライン リソースが望ましい (書籍の配信には数日かかります :)

4

3 に答える 3

11

オンライン:

Linux スラブ アロケーターの構造

Linux 仮想メモリ マネージャーについて

Linux デバイス ドライバー、第 3 版

Linux カーネル モジュール プログラミング ガイド

Linux でのデバイス・ドライバーの作成: 簡単なチュートリアル

書籍:

Linux カーネル開発 (第 2 版)

Essential Linux Device Drivers (最初の 4 ~ 5 章のみ)

役立つリソース:

Linux 相互参照(すべてのカーネルの検索可能なカーネル ソース)

2.6 カーネル シリーズでの API の変更


dma_sync_single_for_devicedma_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 */
于 2010-03-03T08:15:03.760 に答える
5

Linuxカーネルを理解していますか?

于 2010-03-03T07:28:45.330 に答える
3

Linux Device Drivers book (@Matthew Flaschen が推奨する Linux カーネルの理解と同じシリーズ)の章が役立つ場合があります。

各章はLWN Web サイトからダウンロードできます。第 16 章では DMA を扱います。

于 2010-03-03T08:18:17.580 に答える