conftributed by < jason50123
>
從老師所給的教材Introduction to Linux kernel driver programming
可以發現 driver 是在 framework 以及 bus infrastructure 兩者中間的介面
且在此教材中有提到()[] device driver 有各自的 major/minor number
, major number
主要是拿來讓 在 device access 時, kernel 可以拿來識別並用對應的 device driver 管理,而相同的 device driver 可以管理相似的 device,所以這邊就會用 minor number
來對相同 major number
的 device 做出區別。
而且教材中的程式碼中可以發現,要建立一個 device driver
主要會需要有三個部分要先完成: register_chardev
, class_create
, device_create
為了省去查詢可用的 major number
,他藉由這個 register_chrdev api 可以動態的去找尋 free major number
並分配給這個 char device
做使用。
但後面 class_create
不知道用途是什麼,目前只大概知道說是每個 device driver
都需要一個 class ,但不確定這樣做的原因。
閱讀老師所指定之教材 The Linux Kernel Module Programming Guide
並跟隨其中的範例練習並實作
要記得在 makefile 中加入 PWD := $(CURDIR)
來避免在 sudo make 的環境下可能會造成編譯的錯誤
character devices
和 block devices
的區別: block device
對 request 有一個 buffer 去存,所以可以選擇一個最好的順序去執行這些 request,而且僅接受以 block
為單位的寫入以及讀取,而 character device
則沒有此限制。
在Linux v5.6 版本後當我們在註冊 proc handler
的時候,會用 proc_ops
來取代 file_operations
在 disk 中的檔案我們會稱其為 inode
,而FILE
則是用來抽象的描述 open file
,而真正的 file 則是以 filp
來表示。
這段描述目前不太能理解,需要再去查閱相關資料