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)。たとえば、order
1ページが必要な場合は0、8ページが必要な場合は3です。大きすぎるとorder
(該当するサイズの連続領域は使用できません)、ページ割り当ては失敗します。これ注文を受けるこの関数は整数引数を使用し、ホスティングプラットフォームのサイズから順序を抽出するために使用できます(2の累乗でなければなりません)。注文に許可される最大値は、アーキテクチャに応じて10または11(1024または2048ページに対応)です。ただし、大容量メモリを備えた新しく起動されたシステムを除いて、10次割り当てが成功する可能性はありません。