file_operations 結構體中成員函式是字元裝置驅動與核心的介面,是使用者空間對linux 進行系統呼叫最終的落實者。大多數字元裝置驅動會實現read()、write()和ioctl()函式.字元裝置驅動讀、寫、i/o控制函式模板
1 /* 讀裝置*/
2 ssize_t ***_read(struct file *filp, char _ _user *buf, size_t count,
3 loff_t*f_pos)
4 9 /* 寫裝置*/
10 ssize_t ***_write(struct file *filp, const char _ _user *buf, size_t
count,
11 loff_t *f_pos)
12 17 /* ioctl函式*/
18 int ***_ioctl(struct inode *inode, struct file *filp, unsigned int
cmd,
19 unsigned long arg)
20 34 return 0;
35 }
裝置驅動的讀函式中,filp是檔案結構體指標,buf是使用者空間記憶體的位址,該位址在核心空間不能直接讀寫,count 是要讀的位元組數,f_pos 是讀的位置相對於檔案開頭的偏移。
裝置驅動的寫函式中,filp是檔案結構體指標,buf是使用者空間記憶體的位址,該位址在核心空間不能直接讀寫,count 是要寫的位元組數,f_pos 是寫的位置相對於檔案開頭的偏移。
由於核心空間與使用者空間的記憶體不能直接互訪,因此借助函式copy_from_user()完成使用者空間到核心空間的複製,函式copy_to_user()完成核心空間到使用者空間的複製。
copy_from_user()和copy_to_user()的原型如下所示:
unsigned long copy_from_user(void *to, const void __user *from, unsigned long count);
unsigned long copy_to_user(void _ _user *to, const void *from, unsigned long count);
05 簡單的字元裝置驅動操作
open release read write還記得這些file operations中的函式指標麼?靜靜地實現他們吧。1 open方法 原型 int open struct inode inode,struct file filp 任務 檢查裝置特定錯誤 如果裝置首次開啟,對其進行初始化 必要時,...
字元裝置與塊裝置
系統中能夠隨機 不需要按順序 訪問固定大小資料片 chunks 的裝置被稱作塊裝置,這些資料片就稱作塊。最常見的塊裝置是硬碟,除此以外,還有軟盤驅動器 cd rom驅動器和快閃儲存器等等許多其他塊裝置。注意,它們都是以安裝檔案系統的方式使用的 這也是塊裝置一般的訪問方式。一般訪問單位為512k的整數...
字元裝置,塊裝置命令
來自 mknod命令 用於建立linux中的字元裝置檔案和塊裝置檔案。ls la dev ttyusb crw rw 1 root dialout 188,0 2008 02 13 18 32 dev ttyusb0 mknod dev ttyusb32 c 188 32inotify 一種強大的 ...