Listing 1. my_module.c #include #include #include #include #include static struct file_operations fops; static int Major, irq = 7; static void OurISR (int irq, void *device, struct pt_regs *regs) { /* important and immediate time critical tasks */ } static int __init my_init_module(void) { int status; Major = register_chrdev(0, "OurDevice", &fops); if (Major == -1) { printk (" Dynamic Major number " "allocation failed\n"); return Major; } status = request_irq(irq, (void *)OurISR, SA_INTERRUPT, "OurDevice", &fops); if (status == -EBUSY) { printk ("IRQ number allocation failed\n"); unregister_chrdev(Major, "OurDevice"); return status; } printk ("The module is successfully loaded\n"); printk ("Major number for OurDevice: %d\n", Major); printk ("IRQ number for OurDevice: %d\n", irq); return 0; } static void __exit my_cleanup_module (void) { printk("Major number %d IRQ number %d " "are released\n", Major, irq); free_irq(irq, &fops); unregister_chrdev(Major, "OurDevice"); printk("The Module is successfully unloaded\n"); } module_init (my_init_module); module_exit (my_cleanup_module); MODULE_LICENSE("GPL");