嵌入式Linux驅動開發案例流程--LED驅動
本文主要是以一個最簡單的LED驅動開發流程,來窺探一下Linux驅動開發為何物。
基本流程:
1.編寫驅動檔案xxxx.c
這個檔案的主要作用是對裝置硬體初始化,主要是xxx_init(),其中也包括裝置的註冊。
對file_operations結構體進行初始化,這個初始化是核心,其實是對open.write.read等函式找對映函式。
各種對映函式的編寫,例如xxx_open(),xxxx_write(),xxx_read()等。
2.驅動檔案編寫完成後,將該檔案放入到"核心"中,路徑為linux-2.6.xxx/driver/char(根據裝置型別不同,選擇字元型或塊型)。本例中顯然是字元型裝置。
3.在/drivers/char/Makefile中增加一行:
obj-m += xxxx.o (xxxx就是流程1中的驅動檔名)
4.在核心目錄下執行“make modules”命令,就可以在/drivers/char 下生成xxx.ko
5.將xxx.ko下載到開發板裝置的/lib/modules/2.6.xxx 目錄下。
6.執行“modprobe xxx”,就可以將該驅動模組裝載到開發板的Linux核心中。如果想要解除安裝該驅動模組,可以執行命令“rmmod xxx”即可。
7.使用命令mknod在開發板中建立裝置檔案,這一點尤為重要,這個相當於為驅動檔案建立了一個“控制代碼”或者“路徑”,這樣應用程式想要使用該驅動時,需要用open開啟對應的裝置,open中的路徑就是該“控制代碼”。
命令:mknod Name {b | c} Major Minor ,其中Name為裝置名稱,b或c為裝置型別,Major為主裝置號,Minor為次裝置號。例如:mknod /dev/leds c 231 0
8.至此,驅動已經開發完成,如果想要使用驅動,則需要開發應用程式,比如test.c,在test中主要是要開啟對應的裝置,然後使用對應的裝置。
命令:open(constchar*pathname,intflags); 從名稱就可以看出pathname為裝置路徑,intflags為開啟型別。接著流程7,進行舉例為:open("/dev/leds",0);