第六章 第一個LINUX驅動程序:統計單詞個數linux
統計單詞數的word_count 驅動是本書實現的第一個完整的Linux 驅動。雖然word_count 驅動的功能並不複雜,但足以讓之前歷來接觸過Linux 驅動的開發人員瞭解Linux 驅動的完整開發過程。本章不單單是介紹一個示例,還介紹瞭如何使用不一樣的方法測試Linux 驅動。這些方法主要以平臺來區分。固然,要編寫 Linux 驅動程序還須要更高級的功能。 如向打印機驅動寫入數據時, 對於打印機 驅動來講,須要接收這些被寫入的數據,並將它們通進 PC 的井口 USB 等端口發送給打印機。耍 , 實現這 一過程就須要 Linui驅動能夠響應應用程序傳遞過來的數據。這就是 Linux驅動的事件,雖然存在 C 語言裏沒有事件的概念,但卻有與事件相似的概念,這就是回調( callback)函數。所以, 編寫 Linux 驅動最重要的一步就是編寫函數, 不然與設備文件交互的數據將沒法獲得處理。函數
關鍵步驟:測試
編寫Linux驅動程序的步驟ui
第1 步:創建Linux 驅動骨架(裝載和卸載Linux 驅動)指針
骨架部分主要是Linux驅動的初始化和退出函數,代碼以下:日誌
#include <linux/module.h>事件
#include <linux/init .h>開發
#include <linux/kernel.h>回調函數
#include <linux/fs.h>it
#include <linux/miscdevice.h>
#include <asm/uaccess .h>
// 初始化Linux 驅動
static int word_count_init(void)
{
//輸出日誌信息
printk(「work_count_init_success\n」);
return 0;
}
//退出Linux 驅動
static void word_count_exit(void)
{
// 輸出日誌信息
printk (」word_count_init_exit_success\n」);
}
// 註冊初始化Linux 驅動的函數
module_init(word_count_init);
//註冊退出Linux 驅動的函數
module_exit (word_count_exit);
第2 步:註冊和註銷設備文件
# insmod word_count.ko //安裝Linux驅動
# lsmmod | grep word_count //查看word_count 是否成功安裝
# rmmod word_count //卸載Linux 驅動
# dmesg | grep word_count | tail –n 2 //查看由Linux 驅動輸出的日誌信息.
也能夠執行下面的命令獲取自Linux 驅動輸出的日誌信息。
# cat /var/log/syslog | grep word_count | tail -n 2
第3 步:指定與驅動相關的信息
模塊做者:使用MODULE_AUTHOR 宏指定。
模塊描述:使用MODULE_DESCRIPTION 宏指定。
模塊別名:使用MODULE_ALIAS 宏指定。
開源協議: 使用MODULE_LICENSE 宏指定。
第4 步:指定回調函數
無論Linux 驅動程序的功能多麼複雜仍是多麼「酷」,都必須容許用戶空間的應用程序與內核空間的驅動程序進行交互纔有意義。而最經常使用的交互方式就是讀寫設備文件。經過file_operations.read 和file_operations. write 成員變量能夠分別指定讀寫設備文件要調用的回調函數指針。
第5 步:編寫業務邏輯
第6 步:編寫Makefile 文件
第7 步:編譯Linux 驅動程序
第8 步:安裝和卸載Linux 驅動