hly2740
驱动牛犊
驱动牛犊
  • 注册日期2007-11-08
  • 最后登录2007-11-08
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1161回复:0

请教: solaris下串口驱动开发

楼主#
更多 发布于:2007-11-08 13:52
请高人指点:
我在solaris需要修改asy.c(串口驱动文件),在读串口的时候需要等待中断程序的完成。
因此在xxread中需要阻塞等待,我查找了一下sun的技术文档,它给出了如下的例子
static int
xxread(dev_t dev, struct uio *uiop, cred_t *credp)
{
    struct xxstate *xsp;
    ...
    mutex_enter(&xsp->mu);
    while (xsp->busy)
            cv_wait(&xsp->cv, &xsp->mu);
    xsp->busy = 1;
    mutex_exit(&xsp->mu);
    perform the data access
}

static u_int
xxintr(caddr_t arg);
{
    struct xxstate *xsp = (struct xxstate *)arg;
    mutex_enter(&xsp->mu);
    xsp->busy = 0;
    cv_broadcast(&xsp->cv);
    mutex_exit(&xsp->mu);
}
但是我在同时调用cv_wait和cv_broadcast的时候出现死机。请高人指点我如何使用cv_wait和cv_broadcast这两个函数以及相关的kmutex_t和kcondvar_t的初始化问题。
谢谢!!!
游客

返回顶部