闡述Linux驅動程序“Hello world!”
學習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!”的介紹。
【編輯推薦】