您的位置:首页 > 运维架构 > Linux

悟空学Linux专栏----第41篇

2015-07-14 10:21 513 查看
  为了尽快解决这个问题,悟空打算好好的研究一下该无线的驱动程序,悟空先花费了一晚的时间统计了一下驱动程序,总文件数为55个,总的代码行数为45954行。统计完之后悟空开始研究驱动的代码,可是看来看去,悟空都无法看出这些代码有什么问题,这让悟空头大,悟空打算问问圆方有什么好的思路。

  悟空:我看了一下驱动代码,没有发现这段代码没有什么问题啊?圆方你怎么看呢?

  圆方:如果我们要找出问题的所在,我们先要分析该代码的结构,执行流程,看看无线到底卡在了什么地方。我昨晚好好看了一下代码的执行流程,画出了下面的代码的架构框图。

    


  从我昨晚研究的结果看,数据发送的流程大概是这样的。当系统有数据需要发送的时候,先将数据发送给802.11协议栈,802.11协议栈先判断是否被挂起,如果没有怎将数据传递给驱动程序的发送队列,发送同时判断发送队列中的数据是否超过了水平线,如果超过了则发送挂起信号给802.11协议栈,否则则不会发送挂起信号。而当发送完成之后,硬件会触发一个中断,该中断服务器例程会触发我们昨天讨论的tasklet,由发送的tasklet将发送队列中的数据传递给硬件,同时判断发送队列中的空闲元素是否高于水平线,如果高于则判断802.11协议栈是否挂起,如果挂起怎唤醒。

  悟空:哇,这个设计已经很完美了啊,按理来说部应该再有什么问题了啊?圆方,你怎么看呢?

  圆方:完美是很完美,但是你没发现吗,如果发送队列挂起了,而中断又不唤醒,那么不就数据永远也发送不出去了吗?

  悟空无语。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息