gpt4 book ai didi

linux - 如何使用 linux 设备模型和/sys 文件系统?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:37 27 4
gpt4 key购买 nike

我是开发 Linux 驱动程序的新手。

传统上,如果我想创建字符设备,我只需要实现read writeioctl 函数,并通过register_chrdev_region 与相应的 Major device ID。然后使用 mknod 创建一个包含该 Major device ID 的设备文件。然后在用户空间调用read write open 内核会调用相应的函数。

但是我现在正在研究Linux 设备模型sys 文件系统,这是在内核2.6 中添加的。有人告诉我,如果可能的话,不要使用 /dev filesystem,因为 linux 现在有一个很好的设备模型来处理设备和驱动程序。这让我很困惑,所以我将我的困惑总结为一些问题:

  1. 如何在/sys 中创建一个字符设备?更具体地说,我如何创建一个像 /dev/null 这样的空设备?
  2. 如何从用户空间调用我的字符设备驱动函数?
  3. 听说udev 是基于sys 文件系统/dev 中创 build 备文件。为什么?既然我被告知“如果可能,不要使用 /dev 文件系统”,为什么 udev 使用 /sys/开发?
  4. sys 中的文件是否有char device fileblock device 之类的概念?
  5. /dev中,从用户空间openwrite最终会映射到定义的文件操作结构中的函数那么我在/ssy中打开或写入文件时会调用哪些函数呢?

最佳答案

如果没有上下文,你的关于/dev 的陈述是不清楚的。无论如何:

  1. 您不能在 sysfs 上创建字符设备。 sysfs 的主要目的是导出信息并允许用户调整单个值(对于某些示例,只需在 /sys/ 下导航)。字符设备通常会做很多复杂的事情。

  2. 如果你的意思是你如何调用你的驱动程序的打开、读取、写入、ioctl,...好吧,通过执行 open(2)、read(2)、write(2)、ioctl(2)(看在这些命令的手册页中)

  3. 当一个设备出现时,内核会在/sys 下创建一个目录。例如,查看 ls/sys/bus/usb/devices/。所有这些目录都是在 USB 设备出现时创建的。您可以尝试插入/拔出 USB 设备。 udev 关注 sysfs 以检测新设备,并根据来自 sysfs 的信息在 /dev 下创 build 备。当驱动程序以某种方式调用 device_add() 时,就会发生这种情况。此函数通常由其他寄存器函数调用,例如:device_createdevice_register 或来自其他子系统的其他函数。

  4. sysfs 的想法是提供有关加载的设备和驱动程序的信息。因此您可以更改设备、总线和驱动程序选项。或者手动将设备附加到模块

  5. 实际上,在 sysfs 属性的后面有一组 file_operation,其中打开、读取和写入由内核管理,而不是由您的驱动程序管理。为了创建一个 sysfs 属性,你必须提供一对函数 showstore 来从驱动程序读取/写入一些东西。然后内核会将请求路由到您正确的属性

关于linux - 如何使用 linux 设备模型和/sys 文件系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29370831/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com