カーネル内でメモリを確保/解放するための関数
●使い方
#include <slab.h>
void* kmalloc( size_t size, int flags );
void kfree( void* ptr );
sizeには確保したいバイト数,flagsには以下のどちらかを指定.
GFP_KERNEL:即座にメモリ領域を用意できない場合、メモリ管理機能がスワップアウト 等によって領域を確保するまでスリープする可能性がある
GFP_ATOMIC:スリープせずにメモリ領域を確保しようとする。 必要な領域が確保できない場合は失敗する。 割り込みハンドラやタスクレット、タイムアウトハンドラ等の プロセスコンテキストと無関係に実行される箇所ではこれを使う
●例
u8 *buffer;
buffer = kmalloc(1000, GFP_ATOMIC);
if (!buffer)
return -ENOMEM;
kfree(buffer);
/*u8とは符号なし1バイト整数型(0~255)を表す基本型.
<linux/types.h>をincludeして利用する*/
●参照ページ:
カーネルモジュールを作る