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。

  • 相关阅读:
    [Keyence Programming Contest 2020 E] Bichromization
    [Gym101821B] LIS vs. LDS
    [Ynoi2010]iepsmCmq【数据结构】
    【集训队作业2018】喂鸽子
    【集训队作业2018】复读机
    【NOI2015】荷马史诗
    【IOI2018】组合动作
    【清华集训2017】榕树之心
    【清华集训2016】Alice和Bob又在玩游戏
    1209F
  • 原文地址:https://www.cnblogs.com/Shangzhi/p/3104071.html
Copyright © 2011-2022 走看看