内核模块基础

内核的模块

第一步:编写一个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\n");
	return 0;
}

static void  xtl_exit(void)
{
	printk("goodbye \n");
	return ;
}

module_init(xtl_init);
module_exit(xtl_exit);
MODULE_AUTHOR("XTL");

第二步:编写一个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

第三步:  $ 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.系统调用和标准库在内核中都不能调用


你可能感兴趣的:(内核&驱动,linux,内核,makefile)