任何人都可以解釋一個linux字符驅動程序和提供它的相應組件所涉及的接口嗎?linux字符驅動程序中的接口
回答
首先,您需要頭文件linux/fs.h
,其中聲明瞭文件系統的函數。這是必需的,因爲字符驅動程序管理對字符設備的訪問,該字符設備通常在/dev
中表示爲文件。
如果您在/dev
ls -l
你看到這樣的句子:
crw-rw----. 1 root lp 6, 0 14. Feb 18:23 lp0
crw-rw----. 1 root lp 6, 1 14. Feb 18:23 lp1
crw-rw----. 1 root lp 6, 2 14. Feb 18:23 lp2
crw-rw----. 1 root lp 6, 3 14. Feb 18:23 lp3
crw-rw-rw-. 1 root tty 5, 0 15. Feb 10:57 tty
crw--w----. 1 root tty 4, 0 14. Feb 18:23 tty0
的c
在一行的開頭表示字符設備文件。這些是您可以通過驅動程序與設備進行通信的文件系統中的節點。日期之前的兩個數字表示哪個驅動程序用於該設備。例如,lp0
具有數字6
和0
。第一個數字被稱爲major和第二個未成年人。主內核使用主編號爲該設備選擇正確的驅動程序。在/proc/devices
中可以找到這個數字的內核模塊名稱,實際的驅動程序。第二個號碼僅供驅動程序使用,以便可以使用一個驅動程序管理多個設備。例如,上面的lp0-3
使用主要編號爲6
的所有驅動程序。
註冊您的驅動程序並在/dev/devices
中生成條目的舊且簡單的方法是調用以下函數。
int register_chrdev(unsigned int major, const char *name,
const struct file_operations *fops)
major
是你的驅動程序的主設備號,name
是將出現在/dev/devices
和fops
是一個指向跳轉表與驅動程序的所有功能的名稱。這是通過struct file_operations
來實現的。您必須在內核的fe.h
中查找此結構以瞭解支持的功能。比你在驅動程序中定義這個結構並且放入驅動程序的函數名稱並且爲你的驅動程序不支持的函數使用NULL。對於NULL條目,則使用一些默認值。使用C tagged structure initialization syntax更舒服。最重要的功能是lseek
,read
和write
。該設備由linux/fs.h
中定義的file
結構表示。
在較新的代碼中,使用linux/cdev.h
中的cdev
結構代替上述函數。 對於這種方式和驅動程序編程的更多細節,我推薦這個:http://www.oreilly.com/openbook/linuxdrive3/book/ch03.pdf。
如果你有你編譯好的驅動程序,你可以把它加載到內核中加入insmod
。如果您想使用modprobe
,請查看它在系統上的配置方式,因爲它有所不同。要獲得/dev
中的節點,請使用mknod
。對於主號碼爲10
和次號碼0
的字符設備,看起來像這樣:
mknod /dev/my_device c 10 0
- 1. linux內核字符驅動程序
- 2. NDIS中級驅動程序接口C#
- 3. 正確的鎖使用在linux字符驅動程序中
- 4. 將虛擬PCI設備與linux設備驅動程序接口
- 5. 如何與Linux tun驅動程序接口
- 6. 驅動程序是否使用Linux NAPI接口?
- 7. 在字符設備驅動程序中的套接字通信
- 8. 嵌入式Linux的Linux驅動程序
- 9. 使用驅動程序內部的驅動程序的Linux
- 10. Windows驅動程序編程或Linux驅動程序編程?
- 11. I2C linux驅動程序
- 12. 學習linux驅動程序
- 13. Linux驅動程序phys_mem_access_prot undefined
- 14. Linux驅動程序和device.h
- 15. Linux設備驅動程序
- 16. Linux TTY和驅動程序
- 17. 訪問Linux驅動程序
- 18. Linux SPI驅動程序crasj
- 19. 如何設置Linux字符驅動程序的權限?
- 20. Linux的字符設備驅動程序:阻塞ioctl調用
- 21. 防止覆蓋編寫字符設備驅動程序的Linux
- 22. 流接口驅動程序入門
- 23. 在Linux驅動程序中的PWM insmod
- 24. PostgreSQL連接字符串在C#中的ODBC驅動程序,不支持的關鍵字:驅動程序
- 25. OraDb11g_home1中Oracle的連接字符串驅動程序
- 26. Linux設備驅動程序字符設備「子目錄」
- 27. 設備驅動程序在linux中
- 28. Linux USB驅動程序:中斷URBs
- 29. 如何在Rust中調用「ioctl」?並且接口Linux「tun」驅動程序
- 30. 適用於Android的sysfs接口HAL和Linux設備驅動程序