LINUX手动创建设备节点与字符注册

来源:互联网 发布:软件大全 编辑:程序博客网 时间:2024/04/29 15:20

#include <linux/init.h>

#include <linux/module.h>

#include <linux/cdev.h>

#include <linux/fs.h>

 

MODULE_LICENSE("GPL");

 

#define DEVICE_NAME "hello0"

struct cdev mycdev;

dev_t device_node;

 

 

static __init int hello_init(void)

{

         intrest;

        

         /*申请设备号,设备号其实是驱动号,表征这个设备有哪号驱动管理,次设备号才是   真正的设备序号*/

         rest=alloc_chrdev_region(&device_node,0,1, DEVICE_NAME);

         if(rest < 0)

                   printk("%salloc_chrdev_region failed.\n",__func__);

                   returnrest;

         }

        

         /*struct cdev用来描述字符设备*/

         cdev_init(&mycdev,NULL);

         mycdev.owner= THIS_MODULE;

         /*添加设备到内核,cat /proc/device下可以看到设备号, cat /proc/device记录了所以已经分配的设备编号*/

         cdev_add(&mycdev,device_node, 1);

        

         printk(KERN_ALERT"%s -- hello world,are you ok!\n",__func__);

         return0;

}

 

static void hello_exit(void)

{

         /*从系统中移除设备*/

         cdev_del(&mycdev);

         /*释放字符设备占用的设备编号*/

         unregister_chrdev_region(device_node,1);

         printk(KERN_ALERT"%s -- hello world,are you ok!\n",__func__);

}

 

module_init(hello_init);

module_exit(hello_exit);

 

[root@host-192-168-1-5 node]# insmodcreatedevicenode.ko

在 /proc/devices 中有刚刚申请的设备号信息:

[root@host-192-168-1-5 node]# cat /proc/devices

Character devices:

  1mem

  4/dev/vc/0

  4tty

  4ttyS

  5/dev/tty

  5/dev/console

  5/dev/ptmx

  6lp

  7vcs

 10misc

 13input

 29fb

128 ptm

136 pts

162 raw

180 usb

189 usb_device

202 cpu/msr

203 cpu/cpuid

251 hello0

253 hidraw

254 pcmcia

 

Block devices:

  1ramdisk

  2fd

  7loop

  8sd

  9md

 65sd

 66sd

 67sd

 68sd

 69sd

 70sd

 71sd

128 sd

129 sd

130 sd

131 sd

132 sd

133 sd

134 sd

135 sd

252 device-mapper

253 virtblk

254 mdp

[root@host-192-168-1-5 node]# rmmodcreatedevicenode

卸载掉模块时,/proc/devices记录也被删除

 [root@host-192-168-1-5node]# cat /proc/devices

Character devices:

  1mem

  4/dev/vc/0

  4tty

  4ttyS

  5/dev/tty

  5/dev/console

  5/dev/ptmx

  6lp

  7vcs

 10misc

 13input

 29fb

128 ptm

136 pts

162 raw

180 usb

189 usb_device

202 cpu/msr

203 cpu/cpuid

253 hidraw

254 pcmcia

 

Block devices:

  1ramdisk

  2fd

  7loop

  8sd

  9md

 65sd

 66sd

 67sd

 68sd

 69sd

 70sd

 71sd

128 sd

129 sd

130 sd

131 sd

132 sd

133 sd

134 sd

135 sd

252 device-mapper

253 virtblk

254 mdp

[root@host-192-168-1-5 node]#

         上面这个简单的驱动程序,主要工作是注册了一个字符设备到内核,同时为改设备申请了一个设备号,如果需要访问这个设备文件则需要手动创建:

          mknod /dev/hello0 c  251 0 

          

0 0
原创粉丝点击