mdev是busybox提供的乙個工具,用在嵌入式系統中,相當於簡化版的udev,作用是在系統啟動和熱插拔或動態載入驅動程式時, 自動建立裝置節點。檔案系統中的/dev目錄下的裝置節點都是由mdev建立的。在載入驅動過程中,根據驅動程式,在/dev下自動建立裝置節點。
前面的部落格實現了第乙個版本,但是需要手工建立字元裝置節點,這裡使用mdev自動建立。
源**如下:
#include #include檢視現在的字元裝置,沒有發現有first_drv節點:#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
");
載入.ko檔案之後出現first_drv裝置:
此時檢視自動建立的/dev/xyz檔案:
然後解除安裝掛載的驅動first_drv之後,發現/dev/xyz檔案自動消失,而且first_drv裝置也自動消失了:
這樣,就避免了每次都手動建立裝置節點了。
summary:
現在關於核心驅動的函式,我們先學會怎麼去使用,跟著韋老師的步伐,之後會有專門的核心原始碼和驅動的分析,那是入門之後的事情,現在先知道怎麼呼叫api,後面高階的時候需要閱讀原始碼。畢竟先學會使用,第一可以讓自己興趣更大,一來就閱讀原始碼會很吃力,第二可以快速先入門,第三,可以自己做點小東西。學習是循序漸進的乙個過程。
乙個字元裝置或塊裝置都有乙個主裝置號和乙個次裝置號。主裝置號用來標識與裝置檔案相連的驅動程式,用來反映裝置型別。次裝置號被驅動程式用來辨別操作的是哪個裝置,用來區分同型別的裝置。
字元驅動中提及到了次裝置號,它可以被用來區分不同的操作:
建立不同的次裝置號,我們可以根據次裝置號執行不同的操作,比如:
printf("./ledtest /dev/leds on:表示全部led亮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/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版英文電子圖書。...