【问题标题】:writing device driver in linux -- interupt handler在linux中编写设备驱动程序——中断处理程序
【发布时间】:2012-12-13 17:52:43
【问题描述】:

我正在尝试编写一个可加载的设备驱动程序.. 它能够对外部事件采取行动。请澄清以下几点。

1> modprob 命令用于向内核添加删除模块。它适用于静态模块吗? 可以 modprobe 或 rmmod --- 删除 linux 内核的静态模块。

2> 如果出现中断,我将保存数据并安排下半部分。现在,当下半部分完成其任务时,我应该如何通知用户空间的应用程序数据可用。

3> 我正在考虑使用 debugfs 中的条目在应用程序和驱动程序之间传输数据。那么我的设备驱动程序和我的用户空间应用程序是否可行——通过使用 MAP() 系统调用在 debufs 中映射文件的相同区域并在彼此之间交换数据?

【问题讨论】:

    标签: linux-device-driver


    【解决方案1】:

    modprob 命令用于向内核添加删除模块。它适用于静态模块吗?可以 modprobe 或 rmmod --- 删除 linux 内核的静态模块。

    如果您的意思是静态模块 = 作为 linux 内核的一部分编译的模块(而不是作为单独的可加载模块),那么答案是;不,你不能。

    如果出现中断,我将保存数据并安排下半部分。现在,当下半部分完成其任务时,我应该如何通知用户空间的应用程序数据可用。

    如果用户空间应用程序以轮询模式运行,您可以通过 ioctl 或 sysfs/procfs 文件通知它。但是如果用户空间应用需要以事件驱动的方式得到通知,那么使用 netlink 套接字。

    我正在考虑使用 debugfs 中的条目在应用程序和驱动程序之间传输数据。那么我的设备驱动程序和我的用户空间应用程序是否可行——通过使用 MAP() 系统调用在 debufs 中映射文件的相同区域并在彼此之间交换数据?

    用户空间应用读取/写入 debugfs 的方式是简单地读取/写入 debugfs 文件(它位于 /proc/.. 或 /sys/.. 下,因此您可以“打开”文件,获取文件描述符, 然后读/写 - 就像它是一个普通文件一样)。

    【讨论】:

    • 感谢您的明确答复。只是添加到 /sysfs --- sysfs 每个文件一个值是什么意思?这是否意味着它只能有一个 int、一个 char 或一个结构?
    • sysfs 文件的值远不止单一值。每个 sysfs 文件都有一个 show/store 功能(取决于文件的权限,如果它是只读的,它将没有 store 功能)。读取函数在内核空间中,它填充它负责的 sysfs 的内容,这可以是您希望显示的任何文本,不一定是单个值。您可以在此处阅读有关 sysfs api 的更多信息:kernel.org/doc/Documentation/filesystems/sysfs.txt
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多