裝置驅動 四

2021-06-20 12:49:06 字數 1182 閱讀 2046

實現操作集合

實現open

統計計數,檢查錯誤

申請資源

識別次裝置號,如果必要更新f_op指標

實現realse

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);

close(fd);

vfs

根據"/dev/hello"中包含的裝置號,找cdev結構體

根據cdev建立inode, file

建立檔案描述符fd

呼叫驅動中的open函式,如果操作集合或者open函式沒有實現,清空已申請的資源,返回負的錯誤碼

將fd與file關聯

返回fd

釋放申請的資源

執行驅動中的release函式

1583 struct file_operations ;

驅動之路四 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 獲取從裝置號...