Linux内核源码树建立加载hello模块,linuxhello
Linux内核源码树建立加载hello模块,linuxhello
在加载模块之前,书中说要先建立内核源码树,那么,如何建立内核源码树呢?
首先,要先知道你的OS的内核版本,用uname -r可以查得到
在该目录ls一下发现已经存在了这个目录= =!也就是原来系统已经存在内核源码树了。
既然内核源码树已经存在,下面我们要做的就是将hello模块加载到内核中。
下面是hello的源代码
1 #include <linux/init.h> 2 #include <linux/module.h> 3 MODULE_LICENSE("Dual BSD/GPL"); 4 static int hello_init(void) 5 { 6 printk(KERN_ALERT "Hello, world\n"); 7 return 0; 8 } 9 static void hello_exit(void) 10 { 11 printk(KERN_ALERT"Goodbye, cruel world\n"); 12 } 13 module_init(hello_init); 14 module_exit(hello_exit);
给代码编写Makefile文件
1 obj-m := hello.o 2 KERNELDIR := /lib/modules/3.16.0-30/build 3 PWD := $(shell pwd) 4 modules: 5 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules 6 modules_install: 7 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
运行make
生成相应的hello.ko文件
然后加载hello.ko模块,注意要在root模式下加载,然后lsmod查看加载的模块(书中说会在控制台输出hello world ,但是我的控制台没有输出)
卸载模块
虽然控制台没有进行输出,但是可以在/var/log/syslog下查看hello模块的输出
评论暂时关闭