DEVICE DRIVERIntroductionTasks involvedBuilding device driver moduleCharacter device driversDesign and implementation of ScullExamples-Hello WorldExamples-ScullConclusionsFuture workDEVICE DRIVERVINOD KAMATHCS691X PROJECT WORKIntroduction•How to write/install device drivers•Systems, Kernel Programming•Character, Block and Network devicesTasks involved•Building and Running modules•Character device driversBuilding 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 devsCharacter 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_devDesign 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/scull0Examples-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...);lConclusions•Writing device drivers is not for faint heart/Adventure•Very careful with Kernel codesFuture work •Try Advanced drivers, Scheduling•Understand principle for multi
View Full Document