カーネルモジュールベース


カーネルのモジュール
ステップ1:helloを作成します.cファイル
#include 
#include /*      */
 
MODULE_LICENSE("DUAL BSD/GPL");

static int num=300;
module_param(num,int,S_IRUGO);/*      ,       */

static int  xtl_init(void)
{
 	printk("welcome to you
"); return 0; } static void xtl_exit(void) { printk("goodbye
"); return ; } module_init(xtl_init); module_exit(xtl_exit); MODULE_AUTHOR("XTL");

ステップ2:makefileファイルを作成する
ifneq ($(KERNELRELEASE),)

obj-m :=hello.o
else

KDIR:=/lib/modules/2.6.28/build

all:
	make -C $(KDIR) M=`pwd` modules
#   KDIR       makefile ,     M  modules,  hello.ko  
#`pwd`    
clean:
	-rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif

makeコマンドを実行する生成ファイルにhelloが含まれます.ko
ステップ3:$insmod hello.koはhellをロードします.koファイルをカーネルに
$lsmodは存在するmodulesを表示します
$dmesgカーネルログ情報が表示され、プログラム実行の結果がログに表示されます.
$rmmod hello helloモジュールのアンインストール
今日の質問:
1.`pwd`は大分号です
2.ifneq not ifnep 
3.obj-m :=hello.oのフォーマット.
4.パラメータがロード時に入力:insmod hello.ko  num=20
5.gccでコンパイルしてライブラリファイルに接続し、ユーザーのスクリプト、ユーザーのランタイム環境に接続するため、カーネルコンパイルはgccでは使用できません.
6.システム呼び出しと標準ライブラリはカーネルでは呼び出せません