注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

火车的家

Put first thing first

 
 
 

日志

 
 

2011.07.12 rfkill 模块的初值  

2011-07-12 18:39:05|  分类: linux kernel |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
我们公司把蓝牙芯片的电源控制代码放在了rfkill模块里面,然后通过
echo 1 > /sys/class/rfkill/rfkill0/stateecho 0 > /sys/class/rfkill/rfkill0/state 分别打开和关闭蓝牙电源。

但是rfkill默认值是unblock,这样的话,蓝牙芯片默认就是加电的,所以我们想把默认值改为block,于是在init中加了这个调用:
  rfkill_init_sw_state(rfkill, true);
结果,我们的蓝牙服务不能正常启动了。我们发现 echo 1 > /sys/class/rfkill/rfkill0/state是起作用的(确实能打开蓝牙电源),但是应用层的服务起不来了,而且hciconfig hci0发现mac地址为0。

一开始我们以为要在set_block里面调用rfkill_set_sw_state,但是根本没用。后来研究rfkill的代码,发现原来net/rfkill/core.c里面有一个全局变量rfkill_global_states,这个变量用来记录rfkill的状态。当使用echo XXX > /sys/class/rfkill/rfkill0/state的时候,这个变量并没有变。这个变量只有在rfkill_fop_write被调用时才被改写,也就是说,要在应用层打开rfkill并写它,才能改变这个变量的值,从而真正开启或关闭rfkill。

好在已经有第三方工具可用了,见这个:link
或者从这里下载也行:link
  评论这张
 
阅读(2323)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018