【问题标题】:Linux block device IOCTL cmd codesLinux 块设备 IOCTL cmd 代码
【发布时间】:2020-03-11 15:57:13
【问题描述】:

我正在开发一个 Linux 块驱动程序,目前正在测试它。我有一个 IOCTL 功能,目前什么都不做。我只是使用 printk 来打印 cmd 和 arg 参数。当 Linux 启动时,它使用 5331 的 cmd 和 0 的 arg 调用 IOCTL 函数。我试图找出这个 cmd 可能是什么。我唯一能找到的是对 CDROM 功能的引用。 Linux 认为我的设备是 CDROM 吗?如果是这样,我怎么能告诉它?谢谢

static int mydrv_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg)

【问题讨论】:

  • 我假设命令代码 5331 是十六进制的?在这种情况下,它确实是CDROM_GET_CAPABILITY。也许有什么东西正在检查块设备是否是 CDROM。
  • 我不确定它为什么会这样认为。目前我对Linux的了解还不够,不知道你是否可以设置一些参数让Linux知道驱动程序所针对的设备类型。

标签: linux-device-driver ioctl


【解决方案1】:

我找到了一些用于 ram 块设备的示例代码。他们实现了一个 ioctl 函数并检查 0x5331 代码。如果未设置标志 GENHD_FL_CD,它们只会返回错误。

 case CDROM_GET_CAPABILITY: //0x5331  / * get capabilities * / 
      {
          struct gendisk *disk = bdev->bd_disk;

          if (bdev->bd_disk && (disk->flags & GENHD_FL_CD))
              ret = SUCCESS;
          else
              ret = -EINVAL;
          break;
      }

【讨论】:

    猜你喜欢
    • 2015-02-03
    • 1970-01-01
    • 2013-03-26
    • 2019-03-10
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多