第一节的测试:
1 #include <linux/module.h> 2 #include <linux/init.h> 3 #include <linux/types.h> /* dev_t */ 4 #include <linux/kdev_t.h> /* MAJOR(dev_t dev); MINOR(dev_t dev); */ 5 #include <linux/fs.h> /* chrdev_region */ 6 7 #include "my_scull.h" 8 9 MODULE_AUTHOR("chen"); 10 MODULE_LICENSE("Dual BSD/GPL"); 11 12 int my_scull_major = MY_SCULL_MAJOR; 13 int my_scull_minor = 0; 14 int my_scull_nr_devs = MY_SCULL_NR_DEVS; 15 16 static int my_scull_init(void) 17 { 18 int result; 19 dev_t dev; 20 printk(KERN_ALERT "my scull init\n"); 21 22 if(my_scull_major) { 23 dev = MKDEV(my_scull_major, my_scull_minor); 24 result = register_chrdev_region(dev, my_scull_nr_devs, "scull"); 25 } else { 26 result = alloc_chrdev_region(&dev, my_scull_minor, my_scull_nr_devs, "scull"); 27 my_scull_major = MAJOR(dev); 28 } 29 if(result < 0) { 30 printk(KERN_WARNING "my scull:can't get major %d\n", my_scull_major); 31 return result; 32 } 33 printk(KERN_ALERT "myscull dev:%d, major:%d, minor:%d\n", dev, my_scull_major, my_scull_minor); 34 35 36 return 0; 37 } 38 39 static void my_scull_cleanup(void) 40 { 41 dev_t devno = MKDEV(my_scull_major, my_scull_minor); 42 43 /* my_scull_cleanup is never called if registering failed */ 44 unregister_chrdev_region(devno, my_scull_nr_devs); 45 46 printk(KERN_ALERT "my scull clean up\n"); 47 } 48 49 module_init(my_scull_init); 50 module_exit(my_scull_cleanup);