私は Fedora 14 を使用しており、PCI スイッチ用のドライバーを構築しています。そのスイッチには、8MB の DMA メモリを割り当てる必要があります (2*4MB を処理できます) が、メモリ サイズに合わせる必要があります。たとえば、8MB の場合、ベース アドレスの最初の 23 ビットは 0 にする必要があります。
それ、どうやったら出来るの?
私は Fedora 14 を使用しており、PCI スイッチ用のドライバーを構築しています。そのスイッチには、8MB の DMA メモリを割り当てる必要があります (2*4MB を処理できます) が、メモリ サイズに合わせる必要があります。たとえば、8MB の場合、ベース アドレスの最初の 23 ビットは 0 にする必要があります。
それ、どうやったら出来るの?
__get_free_pages
割り当てサイズに応じて、最大4MBを割り当てることができます。
したがって、それぞれが4MBに整列された2つの4MBブロックを割り当てることができます。
この方法で8MBを調整することはできません。
起動時に3*4MBを割り当てると、ブロックが隣接する可能性が非常に高いため、1番目と2番目、または2番目と3番目のいずれかが8MB整列されます。しかし、私はそれに依存しません。
いずれにせよ、これは起動中の早い段階で行う必要があることに注意してください。そうしないと、メモリが断片化され、メモリを取得できなくなる可能性が非常に高くなります。
__get_free_pages
最大 4MB でしたが、ページサイズのみ (4k) に調整されました。
を使用して 16MB DMA を割り当てることができましたpci_alloc_consistent
が、少なくとも 8MB が 8MB に整列しています。それは私の問題を解決しました。