1 struct second_dev {
2 struct cdev cdev;
3 atomic_t counter;
4 struct timer_list s_timer;
5 };
6
7 static struct second_dev *second_devp;
8
9
10 #define SECOND_MAJOR 248
11 static int second_major = SECOND_MAJOR;
12 module_param(second_major,int,S_IRUGO);
13
14
15 static second_setup_cdev()
16 {
17
18 }
19
20
21 static int __init second_init(void)
22 {
23 int ret;
24 dev_t devno = MKDEV(second_major,0);
25
26 if (second_major)
27 ret = register_chrdev_region(devno,1,"second");
28 else{
29 ret = alloc_chrdev_region(&devno,0,1,"second");
30 secon_major = MAJOR(devno);
31 }
32
33 if (ret < 0)
34 return ret;
35
36 second_devp = kazlloc(sizeof(*secon_devp),GFP_KERNEL);
37 if (!secon_devp){
38 ret = -ENOMEM;
39 goto fail_malloc;
40 }
41
42 second_setup_cdev(second_devp,0);
43
44 return 0;
45 fail_malloc:
46 unregister_chrdev_region(devno,1);
47 return ret;
48 }
49
50
51 static void __exit second_exit(void)
52 {
53 cdev_del(&second_devp->cdev);
54 kfree(second_devp);
55 unregister_chrdev_region(MKDEV(second_major,0),1);
56
57
58 }
59 module_init(second_init);
60 module_exit(second_exit);