闡述Linux驅(qū)動(dòng)程序“Hello world!”
學(xué)習(xí)Linux,你可能會(huì)遇到嵌入式Linux問(wèn)題,下面介紹第一個(gè)Linux驅(qū)動(dòng)程序“Hello world!”,“Hello world”也許是第一個(gè)程序員寫(xiě)的程序吧,這里我也從寫(xiě)它開(kāi)始,盡管它很簡(jiǎn)單,但它記錄了學(xué)習(xí)Linux驅(qū)動(dòng)程序的過(guò)程。
- /*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");
簡(jiǎn)單的分析:本程序中所用到的頭文件“l(fā)inux/module.h”和“l(fā)inux/init.h”在所有的模塊代碼中都應(yīng)該包含。MODULE_LICENSE("GPL");是內(nèi)核模塊所遵循的許可證。函數(shù)用__init來(lái)修飾,標(biāo)明函數(shù)僅在初始化期間使用,當(dāng)模塊被裝載后將該初始化函數(shù)扔掉,把函數(shù)占用的內(nèi)存釋放出來(lái)。初始化函數(shù)也可以不加__init修飾,只是占用一部分內(nèi)存而已,并且該初始化函數(shù)還可以被其它函數(shù)調(diào)用。__exit修飾詞標(biāo)記該代碼用于模塊卸載,其它的任何時(shí)候調(diào)用該函數(shù)將出錯(cuò)。
模塊的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驅(qū)動(dòng)程序“Hello world!”的介紹。
【編輯推薦】