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。

  • 相关阅读:
    数组中重复的数字-剑指Offer
    不用加减乘除做加法-剑指Offer
    扑克牌顺子-剑指Offer
    左旋转字符串-剑指Offer
    翻转单词顺序列-剑指Offer
    和为S的连续正数序列-剑指Offer
    和为S的两个数字-剑指Offer
    数组中只出现一次的数字-剑指Offer
    平衡二叉树-剑指Offer
    二叉树的深度-剑指Offer
  • 原文地址:https://www.cnblogs.com/Shangzhi/p/3104071.html
Copyright © 2011-2022 走看看