许多编程书籍都会以一个 “hello world” 示例程序来说明最简单的程序。
“hello world” 模块:
hello.c ______________________________________________________________________________________________________________________________________________________________
1 /*********************************************************************************
2 * Copyright: (C) 2016 Yuzhonghan<754270866@qq.com>
3 * All rights reserved.
4 *
5 * Filename: hello.c
6 * Description: This file
7 *
8 * Version: 1.0.0(05/13/2016)
9 * Author: Yuzhonghan <754270866@qq.com>
10 * ChangeLog: 1, Release initial version on "05/13/2016 11:48:13 PM"
11 *
12 ********************************************************************************/
13
14 #include<linux/init.h>
15 #include<linux/module.h>
16 MODULE_LICENSE("Dual BSD/GPL");
17
18 static int hello_init(void)
19 {
20 printk(KERN_ALERT"hello world\n");
21 return 0;
22 }
23
24
25
26 static void hello_exit(void)
27 {
28 printk(KERN_ALERT"GOOD BYE\n");
29 }
30
31
32 module_init(hello_init);
33 module_exit(hello_exit);
34
~
这个模块定义了两个函数,其中一个在模块被装载打到内核是调用(hello——init),而另一个则是在模块被移除时调用(hello_exit)。
特殊宏(MODULE_LICENSE)用来告诉内核,该模块采取自由许可证,如果没有这样的声明,内核在装载该模块时会产生抱怨。
hello world 驱动的Makefile编写
1.适用于Linux操作系统:
1
2 obj-m=hello.o //驱动模块从目标文件中构造
3 modules:
4 make -C /lib/modules/`uname -r`/build/ M=`pwd` modules // -C 指定内核源代码的目录 uname -r获得自己内核的版本信息 M指定编译生成的文件放在哪个路径中
5 make clean
6
7 clean:
8 rm -f *.ko.* *.o *.mod.c *.order *.symvers
make 完成后会有一个hello .ko的文件,使用命令 insmod hello.ko 就会加载make完成的驱动模块,dmesg 命令能帮助我们查看hello world的结果,使用rmmod命令会移除hello.ko,在使用 dmesg就会显示Good Bye。
2.适用于fl2440开发板:
Makefile
1 CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc //应为要把模块给开发板用所以我们要把交叉编译器作指定我们的编译器
2 KDIR?=/home/Ciel/fl2440/kernel/linux-3.0 //该目录是告诉Makefile 从哪找到我们的内核
3 obj-m:=hello.o
4
5 default:
6 $(MAKE) -C $(KDIR) M=`pwd` modules
7 make clean
8
9 clean:
10 rm -f *.ko.* *.o *mod.c *.order *.symvers
之后的Make和上一步一样,然后得到hello.ko文件,tftp开发板上,使用命令insmod 就可以看到结果。