学习Linux,你可能会遇到嵌入式Linux问题,下面介绍第一个Linux驱动程序“Hello world!”,“Hello world”也许是第一个程序员写的程序吧,这里我也从写它开始,尽管它很简单,但它记录了学习Linux驱动程序的过程。
- /*hello_module.c*/
- #include <linux/module.h>
- #include <linux/init.h>
- static int __init mini2440_hello_module_init(void)
- {
- printk("Hello, Mini2440 module is installed !\n");
- return 0;
- }
- static void __exit mini2440_hello_module_cleanup(void)
- {
- printk("Good-bye, Mini2440 module was removed!\n");
- }
- module_init(mini2440_hello_module_init);
- module_exit(mini2440_hello_module_cleanup);
- MODULE_LICENSE("GPL");
简单的分析:本程序中所用到的头文件“linux/module.h”和“linux/init.h”在所有的模块代码中都应该包含。MODULE_LICENSE("GPL");是内核模块所遵循的许可证。函数用__init来修饰,标明函数仅在初始化期间使用,当模块被装载后将该初始化函数扔掉,把函数占用的内存释放出来。初始化函数也可以不加__init修饰,只是占用一部分内存而已,并且该初始化函数还可以被其它函数调用。__exit修饰词标记该代码用于模块卸载,其它的任何时候调用该函数将出错。
模块的Makefile文件如下:
- obj-m:=hello_module.o
- CURRENT_PATH:=$(shell pwd)
- ARM_LINUX_KERNEL:=/opt/linux-2.6.29.1
- all:
- $(MAKE) -C $(ARM_LINUX_KERNEL) SUBDIRS=$(CURRENT_PATH) modules
- clean:
- rm -RF *.cmd *.o *.ko *.mod.c *.symvers *.order
以上就是Linux驱动程序“Hello world!”的介绍。
【编辑推荐】