1. 程式人生 > >1--linux字元裝置驅動

1--linux字元裝置驅動

1. 編寫一個簡單的字元裝置框架

*****hello.c*****


#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>

static int hello_init(void)
{
	printk("hello world!\n");  //簡單列印
	return 0;
}
static void hello_exit(void)
{
	printk("bye!\n");
}
module_init
(hello_init); module_exit(hello_exit); MODULE_LICENSE("GPL"); //協議,如果沒有協議可能編譯出錯

問:如何告訴核心,我這個驅動程式的入口在哪裡?
答:使用module_init()函式告訴核心是hello_init()入口函式,module_exit()是出口函式

這樣我們就編寫了人生第一個linux驅動程式。

2.編譯,執行我們第一個驅動程式

需要編寫一個makefile檔案


*****Makefile*****


KERN_DIR = /usr/src/linux-2.6.22.6

all:
        make
-C $(KERN_DIR) M=`pwd` modules clean: make -C $(KERN_DIR) M=`pwd` modules clean rm -rf modules.order obj-m += hello.o

這裡我要多說幾句,請保持要執行這個驅動程式的核心版本一致,這裡我的用到的版本是2.6.22.6,如果發現你的程式明明沒有什麼很大的問題,但是就是在insmod的時候出現錯誤,那就很有可能是你的驅動程式用到的核心和你開發板上的核心版本不一樣。

3.在ubuntu上執行make命令
[email protected]
:/home/book/drvice/hello# make make -C /usr/src/linux-2.6.22.6 M=`pwd` modules make[1]: Entering directory `/usr/src/linux-2.6.22.6' CC [M] /home/book/drvice/hello/hello.o Building modules, stage 2. MODPOST 1 modules CC /home/book/drvice/hello/hello.mod.o LD [M] /home/book/drvice/hello/hello.ko make[1]: Leaving directory `/usr/src/linux-2.6.22.6'

生成hello.ko檔案,把ko檔案拷貝到開發板上

4.在開發板終端上使用命令
insmod hello.ko

輸出:hello world!