哪些函数是linux bsg驱动程序的写/读接口

时间:2013-09-26 23:33:16

标签: linux-kernel linux-device-driver

我不是驱动程序编写者,并且当用户写入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返回给调用者的时间是写入描述符的数据的大小不能被{{1}整除(在/usr/include/linux/bsg.h中定义)。

安迪

1 个答案:

答案 0 :(得分:1)

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