Character Device Driver Notes¶
🧠 Core Concept¶
A Linux character device driver provides a file interface to user space.
📦 file_operations¶
🔄 Lifecycle¶
open() → create file instance
read/write → operate with offset
close() → release() when ref count = 0
📌 open vs release¶
- open: acquire resource
- release: free resource (last reference)
release is not called on every close()
📏 Offset Handling¶
Each file instance has its own offset:
EOF is per-open
🔐 Concurrency¶
Global variables must be protected:
🔁 goto Pattern¶
Used for cleanup:
⚠️ Common Mistakes¶
1. Assuming EOF is global¶
Wrong:
- expecting data to disappear after read
Correct:
- data remains unless explicitly cleared
2. release == close¶
Wrong:
- release happens every close
Correct:
- release happens when last reference is dropped
3. No locking¶
Wrong:
- race condition in open()
🧠 Driver Types (Concept)¶
File-like device¶
- data persists
- can be read multiple times
Stream / FIFO device¶
- data consumed after read
- requires queue mechanism
🔧 copy_to_user / copy_from_user¶
Used for safe memory access:
Never directly access user pointer
🚀 Next Topics¶
- ioctl
- wait queue
- poll/select
- private_data
- platform driver