LINUX手动创建设备节点与字符注册
2014-09-18 13:14
579 查看
#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
#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
相关文章推荐
- Linux驱动编程 step-by-step (四) 字符设备的注册与设备节点的自动创建
- linux字符驱动之自动创建设备节点
- Linux字符设备驱动自动创建设备节点
- Linux 字符设备驱动结构(二)—— 自动创建设备节点
- linux字符设备驱动:自动创建设备及其节点
- linux字符设备驱动总结之:全自动创建设备及节点
- Linux 字符设备驱动结构(二)—— 自动创建设备节点
- linux中在/dev/下手动创建设备节点
- linux中在/dev/下手动创建设备节点
- linux中在/dev/下手动创建设备节点
- Linux驱动编程 step-by-step (四) 字符设备的注册与设备节点的自动创建
- linux字符驱动之自动创建设备节点
- Linux驱动学习(3-设备节点-手动创建)
- linux中在/dev/下手动创建设备节点
- linux字符设备驱动中自动创建设备节点
- linux字符驱动之自动创建设备节点
- TQ2440 LINUX 2.6.30.4 LED驱动感言,从最初的打印字符,到自动分配设备号,到自动创建设备节点,到此设备号分控led
- linux字符驱动之自动创建设备节点
- linux中在/dev/下手动创建设备节点
- linux字符设备驱动总结之:全自动创建设备及节点 .