zoukankan      html  css  js  c++  java
  • linux kernel不同驱动间使用completion同步问题

    linux kernel不同驱动间使用completion同步问题

    author:朱上志

    Date:2013.05.28

    要在键盘和扫描头驱动之间进行同步: 当某一个按键按下后,就通知条码枪驱动去触发扫描头。在wince下可以通过SetEvent和WaitForSingleObject来实现,因为只是linux新手,一开始不知道怎么在linux内核中实现。通过找资料,似乎使用completion可以实现,但是找到的completion的使用例子都只在一个驱动内部的,没有不同驱动之间的例子。我一开始的做法是在一个公共的头文件里创建completion:

    static DECLARE_COMPLETION(my_completion);

    然后在扫描头驱动里新建一个线程,在里面等待completion:

    wait_for_completion(&my_completion);

    在某个按键按下后,就在键盘驱动里触发completion:

    complete(&my_completion);

    但是总是无法唤醒扫描头的wait_for_completion,似乎使用头文件的形式不行。

    现在的做法是去掉公共头文件里的定义,而在键盘驱动里定义completion,并EXPORT_SYMBOL之:

    static struct completion my_completion;

    EXPORT_SYMBOL(my_completion);

    在键盘驱动的初始化里初始化之:

    init_completion(&my_completion);

    在扫描头驱动里声明之:

    extern static struct completion my_completion;

    这样的话,每次特定按钮按下都能触发扫描头里的completion。

  • 相关阅读:
    ASP.NET- 查找Repeater控件中嵌套的控件
    Oracle- 表的管理
    Oracle- PL/SQL DEV工具的使用收集
    Oracle- PL/SQL DEV的远程配置
    Oracle- 提示查询结果不可更新,请使用...更新结果。
    Oracle- 存储过程和异常捕捉
    MSSQLSERVER数据库- SP_EXECUTESQL的使用
    Oracle- 用户管理
    Oracle- 初识
    c语言交换两个变量的值
  • 原文地址:https://www.cnblogs.com/Shangzhi/p/3104071.html
Copyright © 2011-2022 走看看