Da'sBlog

linux-mknod

1
2
3
4
5
6
7
8
#将其中的1,3这样的数字记录下来,这表示主设备号和次设备号(一般来说主设备号用来区分设备的种类;次设备号则是为了作唯一性区分,标明不同属性——注意,在unix系统中是把设备也当作文件来对待的),在redhat 9下,ls加不加-L参数都无所谓,但是在Solaris下则一定要加上才可以显示
[root@localhost test1]# ls -lL /dev/null
crw-rw-rw- 1 root root 1, 3 8月 18 21:56 /dev/null
[root@localhost test1]# mknod /dev/hda3 b 3 7 #创建一个区块
[root@localhost test1]# ls -al /dev/hda3 #查看
brw-r--r-- 1 root root 3, 7 8月 21 11:01 /dev/hda3
  1. mknod命令用于创建Linux中的字符设备文件和块设备文件。

  2. 首先要明白什么是设备文件,简单的我们说 操作系统与外部设备(入磁盘驱动器,打印机,modern,终端 等等)都是通过设备文件来进行通信 的,在Unix/Linux系统与外部设备通讯之前,这个设备必须首先要有一个设备文件,设备文件均放在/dev目录下。一般情况下在安装系统的时候系统自动创建了很多已检测到的设备的设备文件,但有时候我们也需要自己手动创建,命令行生成设备文件的方式有 insf,mksf,mknod等等

  3. 根据mknod命令的使用参数来看【mknod Name { b | c } Major Minor 】,使用mknod之前,至少要明白以下几点:
    设备文件类型:分为块设备和字符设备。ls -l /dev 结果显示第一个字段有b 和 c*,这里即标识了块设备和字符设备。
    字符设备文件—-字符设备文件传送数据给设备的时候,一次传送一个字符,终端,打印机,绘图仪,modern等设备都经过字符设备文件传送数据
    块设备—系统通过块设备文件存取一个设备的时候,先从内存中的buffer中读或写数据,而不是直接传送数据到物理磁盘,这种方式能有效的提高磁盘和CD-ROMS的I/O性能。磁盘和CD-ROMS即可以使用字符设备文件也可使用块设备文件。

  4. 来看看mknod 命令,如果该设备文件你想放在一个特定的文件夹下当然就先创建文件夹
    mknod 设备文件名[/dev/xyz] b/c 主号 次号

Linux对设备管理是以文件管理的形式进行的,各种设备都以文件的形式存放在/dev目录 下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每 个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。
Linux为所有的设备文件都提供了统一的操作函数接口,此函数结构使用数据结构struct file_operations。这个数据结构中包括许多操作函数的指针,如open()、close()、read()和write()等,但由于外设 的种类较多,操作方式各不相同。Struct file_operations结构体中的成员为一系列的接口函数,如用于读/写的read/write函数和用于控制的ioctl等。打开一个文件就是 调用这个文件file_operations中的open操作。不同类型的文件有不同的file_operations成员函数,如普通的磁盘数据文件, 接口函数完成磁盘数据块读写操作;而对于各种设备文件,则最终调用各自驱动程序中的I/O函数进行具体设备的操作。这样,应用程序根本不必考虑操作的是设 备还是普通文件,可一律当作文件处理,具有非常清晰统一的I/O接口。所以file_operations是文件层次的I/O接口。

linux中可以通过mknod命令创建一个设备,具体的使用方法如下

mknod 的标准形式为: mknod DEVNAME {b | c} MAJOR MINOR

1、DEVNAME是要创建的设备文件名,如果想将设备文件放在一个特定的文件夹下,就需要先用mkdir在dev目录下新建一个目录;

2、 b和c 分别表示块设备和字符设备:

b表示系统从块设备中读取数据的时候,直接从内存的buffer中读取数据,而不经过磁盘; 

c表示字符设备文件与设备传送数据的时候是以字符的形式传送,一次传送一个字符,比如打印机、终端都是以字符的形式传送数据;

3、MAJOR和MINOR分别表示主设备号和次设备号:

为了管理设备,系统为每个设备分配一个编号,一个设备号由主设备号和次设备号组成。主设备号标示某一种类的设备,次设备号用来区分同一类型的设备。linux操作系统中为设备文件编号分配了32位无符号整数,其中前12位是主设备号,后20位为次设备号,所以在向系统申请设备文件时主设备号不好超过4095,次设备号不好超过2^20 -1。

用法:mknod [选项]… 名称 类型 [主设备号 次设备号]
创建指定类型和名称的特殊文件。

长选项必须使用的参数对于短选项时也是必需使用的。
-m, –mode=模式 设置权限模式(类似chmod),而不是rwxrwxrwx 减umask
-Z, –context=CTX 将对应名称文件的SELinux 安全环境设置为CTX
–help 显示此帮助信息并退出
–version 显示版本信息并退出

当类型为”p”时可不指定主设备号和次设备号,否则它们是必须指定的。
如果主设备号和次设备号以”0x”或”0X”开头,它们会被视作十六进制数来
解析;如果以”0”开头,则被视作八进制数;其余情况下被视作十进制数。
可用的类型包括:

b 创建(有缓冲的)区块特殊文件
c, u 创建(没有缓冲的)字符特殊文件,虚拟设备
p 创建先进先出(FIFO)特殊文件

注意:您的shell 内含自己的mknod 程序版本,它会覆盖这里所提及的相应
版本。请查阅您的shell 文档获知它所支持的选项。

坚持原创技术分享,您的支持将鼓励我继续创作!