1

我不是驱动程序编写者,并且对从用户区执行 write(2)/read(2) 时在 bsg 驱动程序中实际调用的函数有疑问。我的 CentOS 系统使用的是 Linux 2.6.32。令人惊讶的是,虽然我已经安装了这个 CentOS 系统使用的构建源,但 bsg.c 文件并不存在(嗯?)。所以,我从 kernel.org 下载了 2.6.32 源。

我正在查看.../linux-2.6.32.61/block/bsg.c。对于那个源版本,我的问题是,当我从用户空间调用 write(2) 时,是否调用了这个函数(第 661 行)?

static ssize_t
bsg_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)

我试图找出为什么在某些情况下调用 write(2) 时会得到 EINVAL,但在尝试获取 SCSI Log Sense 数据时却没有。如果我在驱动程序源中处于正确的轨道上,则将 EINVAL 返回给调用者的唯一sizeof(sg_io_v4)时间是写入描述符的数据大小不能被(在 /usr/include/linux/bsg 中定义)整除。H)。

安迪

4

1 回答 1

1

是的,这是正确的功能。在同一个文件中,您可以找到这static const struct file_operations bsg_fops是用户空间对设备执行某些操作时要使用的函数的定义

于 2013-09-27T00:35:37.083 回答