Linuxで8MBの物理連続メモリ割り当て

Linuxで8MBの物理連続メモリ割り当て

CONFIG_CMAカーネル構成パラメータを有効にせずに4MB以上の物理連続メモリを割り当てることはできますか?現在dma_alloc_coherent()通話を使用していますが、4MB以上のサイズを割り当てようとすると失敗します。

ベストアンサー1

バラより__get_free_pages()

説明で判断するとO'Reilly Linuxデバイスドライバブック、日付があるがまだ関連性のある本:

モジュールに大量のメモリ割り当てが必要な場合は、通常、ページ指向技術を使用するのが最善です。 ...

引数flagsは次のように動作します。メモリ割り当て;通常、GFP_KERNELまたはGFP_ATOMICフラグが追加されている場合__GFP_DMA(ISA直接メモリアクセス操作に使用可能なメモリ用)、または親__GFP_HIGHMEMメモリが利用可能な場合に使用されます。 order要求または解放されたページ数のデフォルトの2ログ(つまりlog2 N)。たとえば、order1ページが必要な場合は0、8ページが必要な場合は3です。大きすぎるとorder(該当するサイズの連続領域は使用できません)、ページ割り当ては失敗します。これ注文を受けるこの関数は整数引数を使用し、ホスティングプラットフォームのサイズから順序を抽出するために使用できます(2の累乗でなければなりません)。注文に許可される最大値は、アーキテクチャに応じて10または11(1024または2048ページに対応)です。ただし、大容量メモリを備えた新しく起動されたシステムを除いて、10次割り当てが成功する可能性はありません。

おすすめ記事