- Char drivers: stream/byte interfaces; implement read/write/ioctl/poll; examples: serial, input, misc.
- Block drivers: request-based; queues, schedulers, barriers; examples: NVMe, SCSI.
- Net drivers: NAPI, RX/TX rings, checksums/TSO/GSO; multi-queue with MSI-X and RSS.
// Minimal file-ops concept (pseudo)
const fops = {
read(file, buf, len){ /* copy_to_user from device buffer */ },
write(file, buf, len){ /* copy_from_user into device buffer */ },
ioctl(file, cmd, arg){ /* dispatch control ops */ },
mmap(file, vma){ /* map device or DMA buffer into user */ }
};