mknod 创建特殊文件 b c p

本文详细介绍了mknod命令的使用方法,包括如何创建FIFO(命名管道)、字符专用及块专用文件。解释了文件系统中专用文件的作用,并提供了创建不同类型文件的具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 mknod [options] name {bc} major minor
  mknod [options] name p
  GNU 选项(缩写):
  [-m mode] [--help] [--version] [--]
  描述
  mknod 用指定名称产生一个FIFO(命名管道),字符专用或块专用文件。
  文件系统中的一个专用文件存贮着三种信息(布尔型、整型、整型)。布尔型在字符文件和块文件之间作出选择,两个整型是主、次设备号。
  通常,一个专用文件并不在磁盘上占用空间,仅仅是为操作系统提供交流,而不是为数据存贮服务。一般地,专用文件会指向一个硬件设备(如:磁盘、磁带、打印机、虚拟控制台)或操作系统提供的服务(如:/dev/null, /dev/random)。
  块文件通常类似于磁盘设备(在数据能够被访问的地方赋予一个块号,意味着同时设定了一个块缓存)。任何其他设备都是字符文件。(以前,两种文档类型间是有差别的。比如:字符文档I/O没有缓存,而块文档则有。)
  mknod命令就是用来产生这种类型文件的。
  以下参数指定了所产生文件的类型:
  b create a block (buffered) special file
  c, u create a character (unbuffered) special file
  p create a FIFO
  GNU版本还允许使用u('unbufferd'非缓冲化),以保持和C语言的一致。
  当创建一个块文件或字符文件时,主、次设备号必须在文件类型参数后给出。但当指定一个p(FIFO)类型时,主次设备号必须省略。(设备号默认是以十进制表示;八进制以0开头;GNU 版本还允许使用以0x开头的十六进制)
  选项
  -m mode, --mode=mode
  为新建立的文档设定模式,就象应用命令chmod相同,以后仍然使用缺省模式建立新目录。 缺省地,所产生的文档模式为0666('a+rw')
  GNU 标准选项
  --help
  在标准输出上显示使用信息并顺利退出。
  --version
  在标准输出上显示版本信息并顺利退出
  主、次设备号可在内核 源代码 的./Documentation/devices.txt里查到,mknod 可为这些指定的设备创建节点,当然节点的位置不是一定要在/dev下,但是为了便于管理一般都是指定/dev。驱动程序是根据主、次设备号定位的,但是你的 应用程序 open一个设备时,一定要是你指定的节点位置。例如:
  mknod /dev/input/mouse0 c 13 32
  也可以
  mknod /tmp/mymouse c 13 32
### 解决 `sudo mknod` 创建设备节点文件后无法找到的问题 当使用 `sudo mknod` 命令创建设备节点文件之后遇到找不到该文件的情况时,可以从以下几个方面排查并解决问题。 #### 1. 验证命令执行情况 确保 `mknod` 命令已正确执行。可以通过再次运行带有相同参数的命令来验证操作是否成功完成,并注意观察终端是否有任何错误提示信息[^1]。 #### 2. 检查路径准确性 确认所使用的路径是绝对路径还是相对路径。通常情况下建议使用 `/dev/` 下面的具体位置作为目标地址;如果是其他自定义目录,则需保证其存在并且具有写入权限。对于本案例而言,应该确保是在根分区下的 `/dev/` 文件夹内尝试创建新设备节点而不是用户的家目录或其他地方。 ```bash ls -l /dev/ ``` 上述命令可以帮助查看指定目录内的所有条目及其属性详情,从而判断刚刚通过 `mknod` 添加的新项是否存在以及它的访问控制列表设置得当与否。 #### 3. 权限检查与调整 即使是以超级用户身份发出指令,在某些特殊环境下也可能因为SELinux策略等因素而受到限制。因此有必要进一步核实实际获得的结果: - 使用 `-Z` 参数连同 `ls` 查看安全上下文标签; - 如果发现权限不足或不符合预期,可借助 `chmod`, `chown` 工具修改相应配置直至满足需求为止。 ```bash ls -lZ /dev/aiot_dev sudo chmod 666 /dev/aiot_dev sudo chown root:root /dev/aiot_dev ``` 以上代码片段展示了如何改变新建对象的所有者及组归属关系,同时赋予读取加写的许可给更多群体成员[^2]。 #### 4. 动态加载驱动程序 有时即便完成了静态方式建立链接的动作,由于缺少对应的内核模块支持所以依旧看不到预期效果。此时不妨考虑先利用 `insmod` 或者更推荐的 `modprobe` 加载必要的扩展组件再做测试。 ```bash sudo modprobe aiot_driver_name ``` 这里假设有一个名为 `aiot_driver_name` 的模块负责管理这个特定类型的硬件资源接口。 #### 5. 自动化解决方案 针对频繁变动或者批量处理的需求场景,还可以探索基于 BusyBox 提供的 `mdev` 实现自动化维护机制的可能性。此方法能够依据系统内部记录自动匹配相应的设备描述符并在适当时候生成对应入口点[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值