详解驱动中的设备dev

mknod命令用于创建一个设备文件,即特殊文件
首先要明白什么是设备文件,简单的我们说 操作系统与外部设备(入磁盘驱动器,打印机,modern,终端 等等)都是通过设备文件来进行通信的,在Unix/Linux系统与外部设备通讯之前,这个设备必须首先要有一个设备文件,设备文件均放在/dev目录下
我们的linux操作系统跟外部设备(如磁盘、光盘等)的通信都是通过设备文件进行的,应用程序可以打开、关闭、读写这些设备文件,从而对设备进行读写,这种操作就像读写普通的文件一样easy。linux为不同种类的设备文件提供了相同的接口,比如read(),write(),open(),close()。
一般情况下在安装系统的时候系统自动创建了很多已检测到的设备的设备文件,但有时候我们也需要自己手动创建,命令行生成设备文件的方式有 insf,mksf,mknod等等
根据mknod命令的使用参数来看【mknod Name { b | c } Major Minor 】,使用mknod之前,至少要明白以下几点:
设备文件类型:分为块设备和字符设备。ls -l /dev 结果显示第一个字段有b*** 和 c****,这里即标识了块设备和字符设备。
字符设备文件—-字符设备文件传送数据给设备的时候,一次传送一个字符,终端,打印机,绘图仪,modern等设备都经过字符设备文件传送数据
块设备—系统通过块设备文件存取一个设备的时候,先从内存中的buffer中读或写数据,而不是直接传送数据到物理磁盘,这种方式能有效的提高磁盘和CD-ROMS的I/O性能。磁盘和CD-ROMS即可以使用字符设备文件也可使用块设备文件。
主号和次号:
主号:当在任意目录使用ls -l 时,结果的第5个字段就是主号,设备主号代表了这个设备使用的是哪个设备驱动程序
次号:次号是一个24位的十六进制数字,定义了设个设备在系统中的物理的位置

就拿我们常用的创建卷组来看;
先来看看mknod 命令,如果该设备文件你想放在一个特定的文件夹下当然就先创建文件夹
mknod 设备文件名[/dev/xyz] b/c 主号 次号
{ mkdir /dev/vg01
mknod /dev/vg01/group c 64 0X010000
}

mknod 的标准形式为: mknod DEVNAME {b | c} MAJOR MINOR
1,DEVNAME是要创建的设备文件名,如果想将设备文件放在一个特定的文件夹下,就需要先用mkdir在dev目录下新建一个目录(需要root权限);
2, b和c 分别表示块设备和字符设备:
它帮助操作系统查找设备驱动程序代码,和指定次设备的数目,也就是单元驱动器或行号,它们是十进制或八进制的。一个设备的主要和次要编号由该设备的配置方法分配,它们保存在 ODM 中的 CuDvDr 类里。在这个对象类中定义了主要和次要编号以确保整个系统设备定义的一致性,这是很重要的。

              b(块设备)表示系统从块设备中读取数据的时候,直接从内存的buffer中读取数据,而不经过磁盘;比如串口用的就是这样的设备

              c表示字符设备文件与设备传送数据的时候是以字符的形式传送,一次传送一个字符,比如打印机、终端都是以字符的形式传送数据;
   3,MAJOR和MINOR分别表示主设备号和次设备号:
         为了管理设备,系统为每个设备分配一个编号,一个设备号由主设备号和次设备号组成。主设备号标示某一种类的设备,次设备号用来区分同一类型的设备。linux操作系统中为设备文件编号分配了32位无符号整数,其中前12位是主设备号,后20位为次设备号,所以在向系统申请设备文件时主设备号不好超过4095,次设备号不好超过2^20 -1。

.
例子:

      mkdir -p  /dev/myserial
      mknod /dev/myserial/mydev1 b 64 128

猜你喜欢

转载自blog.csdn.net/qq_34888036/article/details/80880213