實現操作集合
實現open
統計計數,檢查錯誤實現realse申請資源
識別次裝置號,如果必要更新f_op指標
open逆操作實現read實現
copy_to_user
返回值為未被讀取的位元組數實現write
copy_from_user
返回值為未被讀取的位元組數
實現unlocked_ioctl
capable(cap_sys_admin)
copy_to_user,copy_from效率比較低,可以將驅動中的記憶體對映到使用者空間提高訪問效率,攝像頭驅動使用該方式
命令字
裝置型別
序列號方向
資料尺寸
8bit
8bit
2bit(無,讀,寫,讀寫)
8~14bit
建立命令字巨集
__io(type, num)
__ior(type, num, count)
__iow(type, num, count)
__iorw(type, num, count)
如果直接操作裝置節點, 可以不執行open函式
cat /dev/hello
echo abc > /dev/hello
應用程式呼叫open,close流程
fd = open("/dev/hello", o_rdonly);vfsclose(fd);
根據"/dev/hello"中包含的裝置號,找cdev結構體1583 struct file_operations ;根據cdev建立inode, file
建立檔案描述符fd
呼叫驅動中的open函式,如果操作集合或者open函式沒有實現,清空已申請的資源,返回負的錯誤碼
將fd與file關聯
返回fd
釋放申請的資源
執行驅動中的release函式
驅動之路四 adc驅動(input裝置)
開發板 smdk6410 開發環境 linux 突然想起一點,寫這些驅動,核心需要配成支援搶占才行。前面的部落格已經將其它的基本知識都解釋了,這裡也就不過多的闡述了,咱就直接寫 吧 這次寫的是adc驅動,將其做為輸入裝置進行使用,先寫標頭檔案,s3c adc.h ifndef adc h defin...
linux裝置驅動四(除錯技術)
安裝自己的核心,發行版核心會關閉映像效能的除錯功能,kernel hacking的配置 printk,根據級別或優先順序鎖表示的嚴重程度對訊息進行分類。使用巨集來標示日誌界別,巨集會展開為乙個字串,編譯時和訊息文字拼接在一起,它們之間不需要逗號分割 通過將printk定義為乙個巨集,使用該巨集來列印...
裝置驅動例項 字元裝置驅動
在整個linux裝置驅動學習中,字元裝置驅動較為基礎。通過對它的學習,對裝置驅動進一步加深了解 cdev 結構體struct cdev 講下比較重要的成員變數 dev t dev 定義了32位的裝置號,其中12位是主裝置號,20位是從裝置號。獲取主裝置號 major dev t dev 獲取從裝置號...