ldd3 编写scull尝试

第一节的测试:

 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);
alloc_chrdev_region

猜你喜欢

转载自www.cnblogs.com/ch122633/p/9159921.html
ldd
今日推荐