加载Linux单体内核的笔记

<

div id=”content” contentScore=”1233″>“Hello world”是一个示例模块(module),文件名是hello.c: 

#include<linux/init.h>
#include<linux/module.h>

MODULE_LICENSE(“Dual BSD/GPL”);
static int hello_init(void)
{
 printk(“hello,kernel\n”);
 return 0;

}

static void hello_exit(void)
{
 printk(“byebye\n”);
 return;
}

module_init(hello_init);
module_exit(hello_exit); 

它的运行必须配合Makefile,其内容如下:
ifeq ($(KERNELRELEASE),)
KERNELDIR ?=/usr/src/kernels/2.6.18-8.el5-i686   #(内核所在的路径,这一句的意思是若KERNELDIR未定义,则定义为后面的路径)

PWD:= $(shell pwd)  #(在Shell里运行pwd,讲得到的当前路径赋给变量PWD)
modules:
 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
 rm -rf modules.* .o *~ core .depend ..cmd .ko *.mod.c .tmp_versions Module
.PHONY:modules modules_install clean
else
 obj-m := hello.o  #(加载模块的名称,如这里的hello.c文件,此时就为hello.o)
endif 

编译成功后,用insmod程序将模块动态链接到正在运行的内核伯div>