gpt4 book ai didi

c - 如何在用户空间调用 scull_open(),其中 scull_open 在 scull 内核驱动程序中定义

转载 作者:太空狗 更新时间:2023-10-29 12:28:29 25 4
gpt4 key购买 nike

我是 Linux 设备驱动程序编程的新手。我只是想使用 Linux 设备驱动程序中解释的 scull 驱动程序。

想从用户空间调用 scull_open() 进行写/读或关闭操作。

目前我能够使用 insmod 成功插入 scull 模块并获得主编号。我还使用 mknod/dev/scull0 c 251 0 获得了开发节点 /dev/scull0

接下来我使用下面的语句打开我新创建的 scull 设备

file_d = scull_open("/dev/scull0", 0);

但是我得到了以下错误:

undefined reference to `scull_open'

我使用 gcc 进行编译。

Do I need to link any library or header files to make use of scull driver?
Please explain how should i open scull driver.

最佳答案

Do I need to link any library or header files to make use of scull driver?

不,您不需要使用任何额外的库/ header 来完成这项工作。


在例子中 scull driver from LDD3 book scull_open() 是用于处理 /dev/scull0< 上用户空间的 open() 调用的处理函数 设备。

请继续将您的用户空间应用更新为

file_d = open("/dev/scull0", 0);

当运行更新的应用程序时,如果模块是 insmod-ed 并且 /dev/scull0 存在,执行上面的行将导致 scull_open() 被调用立即安装您的 Linux 内核驱动程序模块。

So how does open() end up calling scull_open() ?

还记得你的 scull 驱动程序代码中的 scull_fops() 吗?

定义为...

struct file_operations scull_fops = {
.owner = THIS_MODULE,
.llseek = scull_llseek,
.read = scull_read,
.write = scull_write,
.unlocked_ioctl = scull_ioctl,
.open = scull_open,
.release = scull_release,
};

并用作...

cdev_init(&dev->cdev, &scull_fops); 

以上步骤本质上是将 scull_fops 中列出的各种函数与 scull 设备(例如 /dev/scull0)相关联。

具体来说,scull_open()open() 相关联。换句话说,

  • scull_open()
  • 注册为 handleropen()
  • 在 scull 驱动程序中。
  1. In user-space, the call to open() is seen by the Linux kernel.
  2. The kernel checks for the driver responsible for creating the /dev/scull0 device.
  3. Next the kernel checks to see which is the function handler registered to handle open within the scull driver and calls it; in this case scull_open().

<子>1. 附带说明一下,使用相关的宏/枚举来阐明上下文/意图始终是个好主意。例如,使用 O_RDONLY 而不是 0 作为调用 open() 的第二个参数。

<子>2. 另外仅供引用,因为您正在关注 LDD3 书,这里是 unconfirmed 的列表/confirmed书中的错误。

关于c - 如何在用户空间调用 scull_open(),其中 scull_open 在 scull 内核驱动程序中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34461593/

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