Linux内核-模块编译和安装(2)

  IV. 模块编程和内核版本密切关联,因为不同的内核版本中某些函数的函数名会有变化.因此模块编程也可以说是内核编程.

  V. 只用超级用户可以对其运行. 

 开始我们的Hello World!

没有编译前的目录结构:

首先编辑 hello.c文件:

1 #include<linux/module.h> 2 #include<linux/kernel.h> 3 #include<linux/init.h> 4 5 static int hello_init(void) 6 { 7 printk("Hello word"); 8 return 0; 9 } 10 static void hello_exit(void) 11 { 12 printk("Goodbye world"); 13 } 14 15 module_init(hello_init); 16 module_exit(hello_exit); 17 18 MODULE_LICENSE("GPL");

然后编辑makefile文件:

1 ifneq ($(KERNELRELEASE),) 2 obj-m:=hello.o 3 else 4 PWD:=$(shell pwd) 5 KDIR:=/lib/modules/$(shell uname -r)/build 6 all: 7 $(MAKE) -C $(KDIR) M=$(PWD) 8 clean: 9 rm -rf *.o *.mod.c *.ko *.symvers *.order *.markers 10 endif 

编辑完成,检查无错后,执行make指令:

Linux内核-模块编译和安装

 

然后,编译完成后在看一下目录结构:

Linux内核-模块编译和安装

产生了许多中间文件,其中 .o文件是对象文件, .ko文件是kernel object . 接下来就可以安装模块了(insmod 模块名.ko)  

没有任何输出,说明安装成功了.

我们不能在控制台看到我们自己编写的模块的输出,因为这时内核编程,只能通过查看系统日志来看我们的输出.使用 dmesg | tail -1 产看输出,也可以直接查看日志文件.

出现hello: module verification failed: signature and/or  required key missing - tainting kernel 不影响模块的加载.

最后模块退出(rm mod 模块名):

这样一个hello World 就完成啦!

 对于 hello.c文件的模块编程还是有必要说明一下的.

Linux内核-模块编译和安装

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/15429.html