1. 程式人生 > >[linux device driver] Chapter 03:以scull_load為例,詳解mknod命令

[linux device driver] Chapter 03:以scull_load為例,詳解mknod命令

scull_load腳本里有一系列mknod的呼叫,如下:

mknod /dev/${device}0 c $major 0
mknod /dev/${device}1 c $major 1
mknod /dev/${device}2 c $major 2
mknod /dev/${device}3 c $major 3

從這裡我們討論下mknod的使用。

mknod的使用場景:

向系統增加一個驅動程式意味著要賦一個主裝置號,通常使用register_chrdev 獲得。一旦裝置驅動程式註冊到核心表中,核心呼叫file_operations的回撥函式。

接下來的問題是如何給程式一個名字以被它們用來請求你的裝置驅動程式,這個名字必須插入到/dev目錄中,並與驅動程式的主裝置號和次裝置號相連。

在檔案系統上建立一個裝置節點的命令是mknod,而且操作使用者必須是超級使用者。

mknod的語法:

scull_load說明:mknod用法

背景知識:

linux的裝置管理是和檔案系統緊密結合的,各種裝置都以檔案形式存放在/dev目錄下,稱為裝置檔案。應用程式可以開啟、關閉和讀寫這些裝置檔案,完成對裝置的操作,就像操作普通的資料檔案一樣。

為了管理這些裝置,系統為裝置編號,每個裝置編號包含主裝置號和次裝置號。主裝置號用來區分不同種類的裝置,而次裝置號用來區分同一型別的多個裝置。

linux為所有的裝置檔案都提供了統一的操作函式介面,方法是使用資料結構struct file_operations。這個資料結構中包括許多操作函式的指標,如open(),close(),read()和write()等,但由於外設的種類較多,操作方式各不相同。struct file_operations結構體中的成員為一系列的介面函式,比如用於讀/寫的read/write函式和用於控制的ioctl等。