110 likes | 355 Views
Learn how to build, install, and debug device drivers for character, block, and network devices in the Linux kernel. Understand the tasks involved, building modules, file operations, testing, and more. A practical and informative resource for CS691X project work.
E N D
DEVICE DRIVER VINOD KAMATH CS691X PROJECT WORK
Introduction • How to write/install device drivers • Systems, Kernel Programming • Character, Block and Network devices
Tasks involved • Building and Running modules • Character device drivers
Building device driver module • Module vs. Applications • Appln - single task • Module - register for future • Compiling and Loading • ___KERNEL__, MODULE • insmod,rmmod • Global var-Symtab • Do in Kernel space (not User space) • response time; block/network devs
Character device drivers • Scull - Simple Char. Util. for Loading Localities • Acts on mem. Area as though it is a device • Demonstrate interface betn. Kernel and Char drivers • n devices for n mem. areas • Major/Minor no.- (un)register chr_dev
Design and implementation of Scull • File operations/structure • Device id. By file structure • Kenerl uses file ops. To access driver’s functions • Open and Close • Initialize device, usage count, • Memory • Device-memory Link List • Read and Write • Transfer data from Kernel-User • Testing/Debugging • cp, cat, dd wls-l > dev/scull0
Examples-Hello World • #define MODULE • #include <linux/module.h> • int init_module (void) {printk(“<1>Hello, World\n”); return 0} • void cleanup_module {printk(“<1>Goodbye, cruel World\n”);}
Examples-Scull • #define MODULE, __KERNEL__ • #include <linux/module.h>…. • Struct file_operations d0_fops = {r,w,o,c } • int init_module (void) {malloc, reg do_fops} • void cleanup_module (unreg, free...);l
Conclusions • Writing device drivers is not for faint heart/Adventure • Very careful with Kernel codes
Future work • Try Advanced drivers, Scheduling • Understand principle for multi user