linux中在/dev/下手动创建设备节点

linux中在/dev/下手动创建设备节点

/dev/目录下有许多设备节点文件,比如u盘的文件/dev/sda,mmc卡的文件/dev/mmcblk0,这些文件通常是由udev或mdev程序检测到uevent事件后自动创建的。我们也可以通过mknod命令手动创建。


下面mmc卡为例,介绍如何创建其设备节点文件。

1. mknod命令

命令的格式是:
mknod 设备名 设备类型(字符:c,块:b) 主设备号 从设备号

其中,主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。

因此,想要创建设备节点,需要知道设备类型,及其主从设备号。

2. 获取设备类型

当设备插入后,我们可以在/proc/devices中看到设备的类型,如下所示。分别显示字符设备与块设备,左边是主设备号,右边的是设备名。所以,mmc卡属于Block设备,主设备号为179,设备名为mmc。
/ # cat /proc/devices 
Character devices:
  1 mem
  2 pty
  3 ttyp
  4 /dev/vc/0
...
254 ttySDIO

Block devices:
  1 ramdisk
259 blkext
  7 loop
179 mmc
/ # 

3. 获取设备的主从设备号

/proc/devices中只显示了主设备号,但是没有从设备号,我们可以通过从sys系统中获取,如下所示。
(1)/sys/block/中可看到mmc卡设备对应的目录为mmcblk0。
(2)我们可在/sys/block/mmcblk0/uevent节点中,看到mmc卡的主设备(MAJOR)为179,从设备号(MINOR)为0,设备类型(DEVTYPE)为磁盘(disk)。
/sys/block/mmcblk0/mmcblk0p1目录,表示该磁盘有1个分区
(3) 在/sys/block/mmcblk0/mmcblk0p1/uevent节点中,看到mmc卡的主设备(MAJOR)为179,从设备号(MINOR)为1,设备类型(DEVTYPE)为分区(partition)。
/ # ls /sys/block/
loop0    loop4    mmcblk0  ram11    ram15    ram5     ram9
loop1    loop5    ram0     ram12    ram2     ram6
loop2    loop6    ram1     ram13    ram3     ram7
loop3    loop7    ram10    ram14    ram4     ram8
/ # ls /sys/block/mmcblk0/
bdi         device      mmcblk0p1   removable   slaves      uevent
capability  ext_range   queue       ro          stat
dev         holders     range       size        subsystem
/ # cat /sys/block/mmcblk0/uevent 
MAJOR=179
MINOR=0
DEVTYPE=disk
PHYSDEVPATH=/class/mmc_host/mmc0/mmc0:0002
PHYSDEVBUS=mmc
PHYSDEVDRIVER=mmcblk
/ # 
/ # cat /sys/block/mmcblk0/mmcblk0p1/uevent 
MAJOR=179
MINOR=1
DEVTYPE=partition
PHYSDEVPATH=/class/mmc_host/mmc0/mmc0:0002
PHYSDEVBUS=mmc
PHYSDEVDRIVER=mmcblk
/ # 

4. 创建节点

使用mknod命令,分别创建磁盘和分区的节点。
mknod /dev/mmcblk0 b 179 0
mknod /dev/mmcblk0p1 b 179 1
创建后,可在/dev/目录下看到刚创建的节点如下。
/ # ls /dev/mmcblk0* -l
brw-r--r--    1 root     root     179,   0 Jan  1 00:34 /dev/mmcblk0
brw-r--r--    1 root     root     179,   1 Jan  1 00:36 /dev/mmcblk0p1

5. 挂载分区

挂载分区后,我们就可以访问mmc卡中的文件了。
/ # mount /dev/mmcblk0p1 /mnt/
/ # ls /mnt/
a                dd               x.docx
/ # 

6. 删除节点

删除节点,就像删除普通文件一样,如下所示。
/ # rm /dev/mmcblk0p1 -f
/ # 
/ # ls /dev/mmcblk0* -l
brw-r--r--    1 root     root     179,   0 Jan  1 00:34 /dev/mmcblk0
/ # 

好啦,至此,手动创建节点的方法已经介绍完了,^-^。

你可能感兴趣的:(Linux,kernel,User,app)