zoukankan      html  css  js  c++  java
  • mknod命令

    mknod - make block or character special files
    mknod [OPTION]... NAME TYPE [MAJOR MINOR]
        option 有用的就是 -m 了
        name   自定义
        type   有 b 和 c 还有 p
        主设备号
        次设备号

    p
    FIFO型
    b
    块文件
    c
    字符文件

    GNU版本还允许使用u('unbufferd'非缓冲化),以保持与C语言的一致。

    当创建一个块文件或字符文件时,主、次设备号必须在文件类型参数后给出。(十进制或八进制以0开头;GNU 版本还允许使用以0x开头的十六进制)缺省地,所产生的文件模式为0666('a+rw')。  

    选项

    -m mode, --mode=mode
    为新建立的文件设定模式,就象应用命令chmod一样,以后仍然使用缺省模式建立新目录。


    主设备号是由linux/major.h定义的,如下定义了一个DOC设备: 
    #define IGEL_FLASH_MAJOR 62

    假如有一个命令mknod doc b 62 0 : 
    其中的doc为定义的名字,b指块设备,0指的是整个DOC。如果把0换为1,则1指的是DOC的第一个分区。2是第2个,对于块设备次设备号就表示该块设备上的分区号,依次类推。

    至于mknod console c 5 1 的意思也很相似: 
    console是设备的名字 
    c指字符设备 
    5是该设备在major.h中定义的标记 
    1是第一个子设备

    mknod console c 5 1 
    console为设备文件名,自己随便取 
    c是指字符型设备 (可选b,块设备) 
    5是主设备号 /dev/devices里面记录现有的设备 
    找个没有用的就可以了 
    1是次设备号,当你要给两个同样的设备上一个驱动的时候就要分了,从0开始,1就是第二个了 ,对于字符设备,次设备号就表示同类型设备的不同设备。

    通常情况下,安装系统时已经创建了常用的设备文件,可以直接访问这些设备文件来访问 设备。但在用户重新定制内核,并添加了新硬件驱动程序之后,新驱动程序对应的设备文件就可能不存在。在FreeBSD中,最常见的例子就是在内核中增加声 卡的驱动程序时,就需要创建相应设备文件。

    创建设备文件的基本方式是使用mknod,但是必须知道该设备的正确设备号才可以。 另一种简单的方式是使用/dev目录下的shell程序 MAKEDEV来完成,MAKEDEV实质上就是记录了很多设备的名字与其设备号之间的关系的程序,因此它能使用正确的设备号来创建设备。首先进入 /dev目录,然后再执行MAKEDEV。

    # cd /dev

    # sh MAKEDEV snd0

    MAKEDEV将使用设备名作参数创建设备文件,同时也创建这个设备文件依赖的其他 相关设备文件。MAKEDEV的参数,并不一定为创建的设备文件名。例如建立 “MAKEDEV vty8” 将建立ttyv0到ttyv7共8个设备文件,使用 “MAKEDEV wd1s1a” 命令,将建立 wd1、wd1s1、wd1s2等,以及wd1s1a、wd1s1b等设备文件。也可以使用all做MAKEDEV的参数,这将首先清除/dev目录下的 所有设备文件,然后MAKEDEV创建所有预设的设备文件。一般情况下这将创建足够多的设备文件,其中的大部分设备文件在具体的系统中不会用得到。

    如果对一个系统中没有(或者即使有但内核没有支持或探测到)的设备对应的设备文件进行操作,则系统返回Device not configured的错误信息。

    MAKEDEV将使用mknod和对应设备的正确参数,包括字符或块设备、主设备号 和从设备号来建立相应的设备文件。管理员也可以直接使用 mknod创建设备文件,但这就必须将这些设备参数统统指定正确才行。因此除非对系统中的硬件驱动程序特别熟悉,一般不直接使用mknod来创建设备文 件。
    [root@can]# ll /dev/hd
    hda   hda1  hda2  hda3  hda4  hda5  hdc
    [root@can]# ll /dev/hda
    brw-r----- 1 root disk 3, 0 2008-12-18 /dev/hda
    [root@can]# ll /dev/hda4
    brw-r----- 1 root disk 3, 4 2008-12-18 /dev/hda4
    [root@can]#

    主次设备号在驱动中有两种设定方法
    一种是明确指定了设备号,通常在register_chrdev_region函数的第一个参数中给定。
    另一种是动态分配设备号,通常在alloc_chrdev_region函数的第一个参数中得到,这种方法也是较为常见的。

    对于动态分配的设备号,一旦编号分配了, 就可以从 /proc/devices 中读取它.

  • 相关阅读:
    编程之美:位运算应用集萃
    【总结系列】互联网服务端技术体系:高性能之缓存面面观
    【总结系列】互联网服务端技术体系:高性能之并发(Java)
    【总结系列】互联网服务端技术体系:高性能之数据库索引
    【总结系列】互联网服务端技术体系:可扩展之数据分区
    一道关于二叉树的字节面试题的思考
    python基础之range()函数和random模块
    记录下第一次参加leetcode 周赛
    几种方法实现“反转字符串”
    c# 自动更新程序
  • 原文地址:https://www.cnblogs.com/zhouhbing/p/4129269.html
Copyright © 2011-2022 走看看