記事ディレクトリ
1.memblockディストリビュータープログラミングインターフェイス
memblockアロケータは、次のプログラミングインターフェイスを提供します。
①メモリの追加: memblock_add
機能、メモリブロック領域をmemblock.memory
メンバーに追加します。つまり、使用可能な物理メモリの一部を挿入します。
②メモリの削除: memblock_remove
機能、メモリブロック領域を削除します。
③メモリの割り当て: memblock_alloc
機能、メモリ割り当ての申請。
④メモリの解放: memblock_free
機能、以前に割り当てられたメモリを解放します。
2つ目は、memblock_add関数のプロトタイプ分析です。
memblock_add
関数、memblock.memory
メンバー。つまり、使用可能な物理メモリの一部を挿入します。
memblock_add
関数プロトタイプは次のとおりです。
int __init_memblock memblock_add(phys_addr_t base, phys_addr_t size)
phys_addr_t base
このパラメータは、追加する「メモリブロック」の「開始アドレス」を示します。
phys_addr_t size
パラメータは、追加する「メモリブロック」の「サイズ」を示します。
memblock_add
関数で、関数を呼び出しmemblock_add_range
てメモリブロックmemblock.memory
をます。
memblock_add_range(&memblock.memory, base, size, MAX_NUMNODES, 0);
3、memblock_add関数のソースコード
memblock_add
この関数は、Linuxカーネルソースコードのlinux-4.12 \ mm \ memblock.c #603の場所で定義されています。
int __init_memblock memblock_add(phys_addr_t base, phys_addr_t size)
{
phys_addr_t end = base + size - 1;
memblock_dbg("memblock_add: [%pa-%pa] %pF\n",
&base, &end, (void *)_RET_IP_);
return memblock_add_range(&memblock.memory, base, size, MAX_NUMNODES, 0);
}
ソースコードパス: linux-4.12 \ mm \ memblock.c #603