hello.c
13
14 #include<linux/init.h> //这两个写驱动时候必须添加的头文件
15 #include<linux/module.h>
16
17 MODULE_LICENSE("Dual BSD/GPL"); //需要加的宏。。不加会报warning
18
19 static int hello_init(void) //定义结构体
20 {
21 printk(KERN_ALERT "hello world!\n"); //木有printf 驱动一律用printk KERN_ALERT是说明打印等级。。匹配bootargs里面的loglevel。。等级不够使用dmesg不打印
22 return 0;
23 }
24
25 static void hello_exit(void)
26 {
27 printk(KERN_ALERT "goodbye!\n");
28
29 }
30
31 module_init(hello_init); //声明在init这个驱动时候。。同时执行hello_init这个函数。。就是说在加载驱动同时执行这个函数
32 module_exit(hello_exit);
makefile
1 obj-m :=hello.o //声明要生成的文件的源文件信息。。从hello中搜取
2
3
4 modules:
5 @make -C /lib/modules/`uname -r`/build/ M=`pwd` modules //uname -r显示版本号。。这条语句是说我要make。。编译器在这个路径下找。。然后放到我pwd的路径下。。也就是当前路径。。然后。。指明我生成的要是一个modules文件。。@不打印此条信息
6 @make clean
7
8 clean:
9 @rm -f *.ko.* *.o *.unsigned *.order *.symvers *.mod.* // 删除中间文件
注:make这个要root权限
生成hello.ko文件。。
sudo insmod hello.ko //讲hello.ko这个驱动放到内核中。。同样要root权限
lsmod //打印当前内核驱动信息。。可查驱动名字:
dmesg //查看内核打印信息。。dmesg -C是删除信息。。在执行dmesg不打印。。不过信息没丢失。。在 /var/log/messages中
sudo rmmod hello //删除驱动。。注意这里不是hello.ko这个文件。。而是hello这个驱动名字。。root权限