第乙個驅動之字元裝置驅動(二)mdev

2021-09-07 17:40:56 字數 2631 閱讀 7259

mdev是busybox提供的乙個工具,用在嵌入式系統中,相當於簡化版的udev,作用是在系統啟動和熱插拔或動態載入驅動程式時, 自動建立裝置節點。檔案系統中的/dev目錄下的裝置節點都是由mdev建立的。在載入驅動過程中,根據驅動程式,在/dev下自動建立裝置節點。

前面的部落格實現了第乙個版本,但是需要手工建立字元裝置節點,這裡使用mdev自動建立。

源**如下:

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

static

struct

class *first_drv_class;

static

struct class_device *first_drv_class_devs;

intauto_major;

static

int first_drv_open(struct inode *inode, struct file *file)

static ssize_t first_drv_write(struct file *file, const

char __user *buf, size_t count, loff_t *ppos)

/*這個結構是字元裝置驅動程式的核心

* 當應用程式操作裝置檔案時所呼叫的open、read、write等函式,

* 最終會呼叫這個結構中指定的對應函式 */

static

struct file_operations first_drv_fops =;

int fisrt_drv_init(void

)void fisrt_drv_exit(void

)module_init(fisrt_drv_init);

module_exit(fisrt_drv_exit);

module_author(

"");

module_version(

"0.1.0");

module_description(

"s3c2410/s3c2440 led driver");

module_license(

"gpl

");

檢視現在的字元裝置,沒有發現有first_drv節點:

載入.ko檔案之後出現first_drv裝置:

此時檢視自動建立的/dev/xyz檔案:

然後解除安裝掛載的驅動first_drv之後,發現/dev/xyz檔案自動消失,而且first_drv裝置也自動消失了:

這樣,就避免了每次都手動建立裝置節點了。

summary:

現在關於核心驅動的函式,我們先學會怎麼去使用,跟著韋老師的步伐,之後會有專門的核心原始碼和驅動的分析,那是入門之後的事情,現在先知道怎麼呼叫api,後面高階的時候需要閱讀原始碼。畢竟先學會使用,第一可以讓自己興趣更大,一來就閱讀原始碼會很吃力,第二可以快速先入門,第三,可以自己做點小東西。學習是循序漸進的乙個過程。

乙個字元裝置或塊裝置都有乙個主裝置號和乙個次裝置號。主裝置號用來標識與裝置檔案相連的驅動程式,用來反映裝置型別。次裝置號被驅動程式用來辨別操作的是哪個裝置,用來區分同型別的裝置。

字元驅動中提及到了次裝置號,它可以被用來區分不同的操作:

建立不同的次裝置號,我們可以根據次裝置號執行不同的操作,比如:

printf("

usage:\n");

printf(

"%s \n

",file);

printf(

"eg. \n");

printf(

"%s /dev/leds on\n

", file);

printf(

"%s /dev/leds off\n

", file);

printf(

"%s /dev/led1 on\n

", file);

printf(

"%s /dev/led1 off\n

", file);

./ledtest  /dev/leds on:表示全部led亮

./ledtest  /dev/led1 on:表示第乙個led亮

這樣的效果可以通過次裝置不同來實現。核心中有獲取次裝置號的函式,在open和write時有不同的操作,還是那句話,具體的核心函式實現,我們之後再說,先在先會使用api就行。

第乙個驅動之字元裝置驅動(二)mdev

mdev是busybox提供的乙個工具,用在嵌入式系統中,相當於簡化版的udev,作用是在系統啟動和熱插拔或動態載入驅動程式時,自動建立裝置節點。檔案系統中的 dev目錄下的裝置節點都是由mdev建立的。在載入驅動過程中,根據驅動程式,在 dev下自動建立裝置節點。前面的部落格實現了第乙個版本,但是...

第乙個驅動之字元裝置驅動(四)按鍵中斷

cpu發生中斷,跳到異常向量入口執行動作 1.此時需要儲存被中斷的現場 2.執行中斷處理函式 3.恢復被中斷的現場 寫程式時 先設定異常入口 異常向量入口 0位址和0xffff0000兩個入口,嵌入式 arm linux中的選擇後者為入口 vim config檔案檢視中斷向量表的起始位址 架構的 c...

第乙個核心驅動

測試驅動開發平台 為了後續學習的順利進行,我們利用最簡單的hello,world程式,在核心上掛載和解除安裝我們自己編寫的hello模組。說明 本文除錯環境vmware workstation 5.0 turbolinux 10,教材是 linux device drivers 第3版英文電子圖書。...