1. /********************************************************************************
  2. * I.MX6 AW-NB177NF WIFI 驱动移植问题
  3. * 说明:
  4. * 之前驱动移植,但看不到有wlan设备产生,于是感觉是wifi驱动出了问题,于是开始
  5. * 分析厂家提供的wifi驱动,发现id对应的信息不对,经过与FAE确认之后并验证,确实是
  6. * 这个问题导致的。
  7. *
  8. * 2016-6-20 深圳 南山平山村 曾剑锋
  9. *******************************************************************************/
  10.  
  11. 一、参考文档:
  12. . AW-NB177NF-DS-BC-Rev0.3_single Ant.pdf
  13. . 基于linux-2.6..8内核的SDIO/wifi驱动分析(转)
  14. http://www.cnblogs.com/hoys/archive/2013/01/09/2853715.html
  15.  
  16. 二、wifi 驱动注册设备驱动的id相关代码:
  17. ......
  18. static const struct sdio_device_id sdio_ids[] =
  19. {
  20. #ifdef CONFIG_RTL8723B
  21. { SDIO_DEVICE(0x024c, 0xB723),.driver_data = RTL8723B},
  22. #endif
  23. #ifdef CONFIG_RTL8188E
  24. { SDIO_DEVICE(0x024c, 0x8179),.driver_data = RTL8188E},
  25. #endif //CONFIG_RTL8188E
  26.  
  27. #ifdef CONFIG_RTL8821A
  28. { SDIO_DEVICE(0x024c, 0x8821),.driver_data = RTL8821},
  29. #endif //CONFIG_RTL8821A
  30.  
  31. #ifdef CONFIG_RTL8192E
  32. { SDIO_DEVICE(0x024c, 0x818B),.driver_data = RTL8192E},
  33. #endif //CONFIG_RTL8192E
  34.  
  35. #if defined(RTW_ENABLE_WIFI_CONTROL_FUNC) /* temporarily add this to accept all sdio wlan id */
  36. { SDIO_DEVICE_CLASS(SDIO_CLASS_WLAN) },
  37. #endif
  38. { /* end: all zeroes */ },
  39. };
  40. ......
  41. #define SDIO_DEVICE(vend,dev) \
  42. .class = SDIO_ANY_ID, \
  43. .vendor = (vend), .device = (dev)
  44. ......
  45. #define SDIO_ANY_ID (~0)
  46. ......
  47.  
  48. 三、获取SDIO设备信息代码位置如下:
  49. static int sdio_init_func(struct mmc_card *card, unsigned int fn)
  50. {
  51. int ret;
  52. struct sdio_func *func;
  53.  
  54. BUG_ON(fn > SDIO_MAX_FUNCS);
  55.  
  56. func = sdio_alloc_func(card);
  57. if (IS_ERR(func))
  58. return PTR_ERR(func);
  59.  
  60. func->num = fn;
  61.  
  62. if (!(card->quirks & MMC_QUIRK_NONSTD_SDIO)) {
  63. ret = sdio_read_fbr(func);
  64. if (ret)
  65. goto fail;
  66.  
  67. ret = sdio_read_func_cis(func);
  68. if (ret)
  69. goto fail;
  70. } else {
  71. func->vendor = func->card->cis.vendor;
  72. func->device = func->card->cis.device;
  73. func->max_blksize = func->card->cis.blksize;
  74. }
  75.  
  76. card->sdio_func[fn - ] = func;
  77.  
  78. printk("check sdio, func->vendor: 0x%x, func->device: 0x%x, func->max_blksize: 0x%x.\n", func->vendor, func->device, func- >max_blksize);
  79. return ;
  80.  
  81. fail:
  82. /*
  83. * It is okay to remove the function here even though we hold
  84. * the host lock as we haven't registered the device yet.
  85. */
  86. sdio_remove_func(func);
  87. return ret;
  88. }
  89.  
  90. 四、SDIO驱动获取到的信息:
  91. func->vendor: 0x24c, func->device: 0x626, func->max_blksize: 0x200.
  92.  
  93. 五、解决办法:
  94. { SDIO_DEVICE(0x024c, 0x626),.driver_data = RTL8723B},
  95.  
  96. 六、查看结果:
  97. root@android:/ # busybox ifconfig -a
  98. can0 Link encap:UNSPEC HWaddr ---------------
  99. NOARP MTU: Metric:
  100. RX packets: errors: dropped: overruns: frame:
  101. TX packets: errors: dropped: overruns: carrier:
  102. collisions: txqueuelen:
  103. RX bytes: (0.0 B) TX bytes: (0.0 B)
  104. Interrupt:
  105.  
  106. can1 Link encap:UNSPEC HWaddr ---------------
  107. NOARP MTU: Metric:
  108. RX packets: errors: dropped: overruns: frame:
  109. TX packets: errors: dropped: overruns: carrier:
  110. collisions: txqueuelen:
  111. RX bytes: (0.0 B) TX bytes: (0.0 B)
  112. Interrupt:
  113.  
  114. ip6tnl0 Link encap:UNSPEC HWaddr ---------------
  115. NOARP MTU: Metric:
  116. RX packets: errors: dropped: overruns: frame:
  117. TX packets: errors: dropped: overruns: carrier:
  118. collisions: txqueuelen:
  119. RX bytes: (0.0 B) TX bytes: (0.0 B)
  120.  
  121. lo Link encap:Local Loopback
  122. inet addr:127.0.0.1 Mask:255.0.0.0
  123. inet6 addr: ::/ Scope:Host
  124. UP LOOPBACK RUNNING MTU: Metric:
  125. RX packets: errors: dropped: overruns: frame:
  126. TX packets: errors: dropped: overruns: carrier:
  127. collisions: txqueuelen:
  128. RX bytes: (686.9 KiB) TX bytes: (686.9 KiB)
  129.  
  130. sit0 Link encap:IPv6-in-IPv4
  131. NOARP MTU: Metric:
  132. RX packets: errors: dropped: overruns: frame:
  133. TX packets: errors: dropped: overruns: carrier:
  134. collisions: txqueuelen:
  135. RX bytes: (0.0 B) TX bytes: (0.0 B)
  136.  
  137. tunl0 Link encap:UNSPEC HWaddr ---------------
  138. NOARP MTU: Metric:
  139. RX packets: errors: dropped: overruns: frame:
  140. TX packets: errors: dropped: overruns: carrier:
  141. collisions: txqueuelen:
  142. RX bytes: (0.0 B) TX bytes: (0.0 B)
  143.  
  144. wlan0 Link encap:Ethernet HWaddr :A5:::6E:
  145. BROADCAST MULTICAST MTU: Metric:
  146. RX packets: errors: dropped: overruns: frame:
  147. TX packets: errors: dropped: overruns: carrier:
  148. collisions: txqueuelen:
  149. RX bytes: (0.0 B) TX bytes: (0.0 B)
  150.  
  151. root@android:/ #
  152.  
  153. 七、Linux kernel log:
  154. RTL871X: module init start
  155. RTL871X: rtl8723bs v4..16_13854.20150410_BTCOEX20150119-
  156. RTL871X: build time: Jun ::
  157. RTL871X: rtl8723bs BT-Coex version = BTCOEX20150119-
  158. RTL871X: module init ret=
  159. ......
  160. check sdio, func->vendor: 0x24c, func->device: 0x626, func->max_blksize: 0x200.
  161. mmc2: new high speed SDIO card at address
  162. ......
  163. RTL871X: register rtw_netdev_ops to netdev_ops
  164. RTL871X: rtw_hal_config_rftype RF_Type is TotalTxPath is
  165. RTL871X: Chip Version Info: CHIP_8723B_Normal_Chip_TSMC_B_CUT_1T1R_RomVer()
  166. RTL871X: EEPROM type is E-FUSE
  167. RTL871X: SetHwReg8723B: bMacPwrCtrlOn=
  168. RTL871X: PowerOnCheck: val_mix:0x0000063f, res:0x0000063f
  169. RTL871X: PowerOnCheck: 0x100 the result of cmd52 and cmd53 is the same.
  170. RTL871X: PowerOnCheck: 0x1B8 test Pass.
  171. RTL871X: _ReadAdapterInfo8723BS, 0x4e=0xe2
  172. RTL871X: hal_EfuseSwitchToBank: Efuse switch bank to
  173. RTL871X: hal_ReadEFuse_WiFi: data end at address=0xad
  174. RTL871X: Efuse Realmap:
  175. 0D
  176. 2F 2F 2F 2E 2E E0 FF FF FF FF
  177. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  178. FF FF FF FF FF FF FF FF FF FF 2D 2D 2D 2D 2D 2D
  179. 2D 2D 2D 2D 2D E0 FF FF FF FF FF FF FF FF FF FF
  180. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  181. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  182. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  183. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  184. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  185. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  186. FF FF FF FF FF FF FF FF 2C FF FF
  187. FF FF FF FF FF FF FF FF
  188. 3E FF 4C
  189. 0C FF 0C 2A
  190. FF FF
  191.  
  192. EB 6E FF A5 6E
  193. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  194. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  195. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  196. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  197. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  198. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  199. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  200. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  201. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  202. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  203. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  204. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  205. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  206. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  207. RTL871X: Hal_EfuseParseBTCoexistInfo_8723B: Enable BT-coex, ant_num=
  208. RTL871X: Hal_EfuseParsePackageType_8723B phy efuse read 0x1FB =fc
  209. RTL871X: PackageType = 0x4
  210. RTL871X: Hal_EfuseParseVoltage_8723B hwinfo[EEPROM_Voltage_ADDR_8723B] =
  211. EXT4-fs (mmcblk0p5): mounted filesystem with ordered data mode. Opts: (null)
  212. RTL871X: Hal_EfuseParseVoltage_8723B pHalData->adjuseVoltageVal =
  213. RTL871X: AutoloadFail =,
  214. RTL871X: pHalData->EEPROMRFGainVal=f0
  215. RTL871X: EEPRORFGainOffset = 0x29
  216. RTL871X: SetHwReg8723B: bMacPwrCtrlOn=
  217. RTL871X: <==== _ReadAdapterInfo8723BS in ms
  218. RTL871X: Hal_ChannelPlanToRegulation ChannelPlan:0x20,Regulation(2_4G/5G):0x03,0x03
  219. RTL871X: init_channel_set ChannelPlan ID Chan num:
  220. EXT4-fs (mmcblk0p4): warning: checktime reached, running e2fsck is recommended
  221. RTL871X: rtw_alloc_macid(eth%d) if1, hwaddr:ff:ff:ff:ff:ff:ff macid:
  222. RTL871X: rtw_register_early_suspend
  223. RTL871X: Init_ODM_ComInfo_8723b(): fab_ver= cut_ver=
  224. RTL871X: rtw_macaddr_cfg mac addr::a5:::6e:
  225. RTL871X: bDriverStopped:, bSurpriseRemoved:, bup:, hw_init_completed:
  226. RTL871X: rtw_ndev_init(wlan0)
  227. RTL871X: _rtw_drv_register_netdev, MAC Address (if1) = :a5:::6e:
  228. ......
  229. 八、Linux 命令行打开wifi
  230. root@android:/ # netcfg
  231. lo UP 127.0.0.1/ 0x00000049 :::::
  232. can0 DOWN 0.0.0.0/ 0x00000080 :::::
  233. can1 DOWN 0.0.0.0/ 0x00000080 :::::
  234. tunl0 DOWN 0.0.0.0/ 0x00000080 :::::
  235. sit0 DOWN 0.0.0.0/ 0x00000080 :::::
  236. ip6tnl0 DOWN 0.0.0.0/ 0x00000080 :::::
  237. wlan0 DOWN 0.0.0.0/ 0x00001002 :a5:::6e:
  238. root@android:/ # busybox ifconfig wlan0 up
  239. RTL871X: +871x_drv - drv_open, bup=
  240. RTL871X: FW does not exist before power on!!
  241. RTL871X: SetHwReg8723B: bMacPwrCtrlOn=
  242. RTL871X: PowerOnCheck: val_mix:0x0000063f, res:0x0000063f
  243. RTL871X: PowerOnCheck: 0x100 the result of cmd52 and cmd53 is the same.
  244. RTL871X: PowerOnCheck: 0x1B8 test Pass.
  245. RTL871X: Power on ok!
  246. RTL871X: rtl8723b_FirmwareDownload fw: FW_NIC, size:
  247. RTL871X: rtl8723b_FirmwareDownload: fw_ver= fw_subver= sig=0x5301, Month=, Date=, Hour=, Minute=
  248. RTL871X: rtl8723b_FirmwareDownload(): Shift for fw header!
  249. RTL871X: polling_fwdl_chksum: Checksum report OK! (, 0ms), REG_MCUFWDL:0x00070305
  250. RTL871X: _8051Reset8723: Finish
  251. RTL871X: _FWFreeToGo: Polling FW ready OK! (, 30ms), REG_MCUFWDL:0x000702c6
  252. RTL871X: FWDL success. write_fw:, 300ms
  253. RTL871X: <=== rtl8723b_FirmwareDownload()
  254. RTL871X: HalDetectPwrDownMode(): PDN=
  255. RTL871X: Set RF Chip ID to RF_6052 and RF type to .
  256. RTL871X: _init_available_page_threshold(): Enable Tx FIFO Page Threshold H:0x7a7a,N:0x7575,L:0x7575
  257. RTL871X: ===>phy_SwChnl8723B: Channel =
  258. RTL871X: pDM_Odm TxPowerTrackControl =
  259. RTL871X: ===>phy_SwChnl8723B: Channel =
  260. RTL871X: #### hw_var_set_opmode() - iface_type() mode = ####
  261. RTL871X: Using the default RF gain.
  262. RTL871X: MAC Address = :a5:::6e:
  263. RTL871X: start rtl8723bs_xmit_thread(wlan0)
  264. RTL871X: rtl8723b_c2h_packet_handler: C2H, ID= seq= len=
  265. RTL871X: -871x_drv - drv_open, bup=
  266. ADDRCONF(NETDEV_UP): wlan0: link is not ready
  267. RTL871X: rtl8723b_c2h_packet_handler: C2H, ID= seq= len=
  268. RTL871X: rtl8723b_c2h_packet_handler: C2H, ID= seq= len=
  269. root@android:/ # RTL871X: rtl8723b_c2h_packet_handler: C2H, ID= seq= len=
  270. RTL871X: rtl8723b_c2h_packet_handler: C2H, ID= seq= len=
  271. RTL871X: rtl8723b_c2h_packet_handler: C2H, ID= seq= len=
  272. RTL871X: rtl8723b_c2h_packet_handler: C2H, ID= seq= len=
  273. RTL871X: rtl8723b_c2h_packet_handler: C2H, ID= seq= len=
  274. RTL871X: rtl8723b_c2h_packet_handler: C2H, ID= seq= len=
  275. RTL871X: rtl8723b_c2h_packet_handler: C2H, ID= seq= len=
  276. RTL871X: rtl8723b_c2h_packet_handler: C2H, ID= seq= len=
  277. RTL871X: rtl8723b_c2h_packet_handler: C2H, ID= seq= len=
  278. RTL871X: rtl8723b_c2h_packet_handler: C2H, ID= seq= len=
  279. RTL871X: IsBtDisabled=, IsBtControlLps=
  280. RTL871X: ==>rtw_ps_processor .fw_state()
  281. RTL871X: ==>ips_enter cnts:
  282. RTL871X: nolinked power save enter
  283. RTL871X: ===> rtw_ips_pwr_down...................
  284. RTL871X: ====> rtw_ips_dev_unload...
  285. RTL871X: rtl8723bs_hal_deinit: issue H2C to FW when entering IPS
  286. RTL871X: rtl8723b_set_FwPwrModeInIPS_cmd()
  287. RTL871X: rtl8723bs_hal_deinit polling REG_HMETFR=0x4, cnt=
  288. RTL871X: rtl8723bs_hal_deinit polling REG_HMETFR=0x0, cnt=
  289. RTL871X: rtl8723bs_hal_deinit: write rpwm=
  290. RTL871X: rtl8723bs_hal_deinit polling 0x100=0xea, cnt=
  291. RTL871X: polling done when entering IPS, check result : 0x100=0xea, cnt=, MAC_1cc=0xea
  292. RTL871X: <=== rtw_ips_pwr_down..................... in 70ms
  293.  
  294. root@android:/ # netcfg
  295. lo UP 127.0.0.1/ 0x00000049 :::::
  296. can0 DOWN 0.0.0.0/ 0x00000080 :::::
  297. can1 DOWN 0.0.0.0/ 0x00000080 :::::
  298. tunl0 DOWN 0.0.0.0/ 0x00000080 :::::
  299. sit0 DOWN 0.0.0.0/ 0x00000080 :::::
  300. ip6tnl0 DOWN 0.0.0.0/ 0x00000080 :::::
  301. wlan0 UP 0.0.0.0/ 0x00001043 :a5:::6e:

I.MX6 AW-NB177NF WIFI 驱动移植问题的更多相关文章

  1. EP-N8530S USB WIFI 驱动移植

    /*********************************************************************** * EP-N8530S USB WIFI 驱动移植 * ...

  2. wifi 驱动移植范例

    .改Makefile:  里面没有dm6441平台的,我看到有dm6446的,所以就在这里改了 ifeq ($(PLATFORM),DM6446) LINUX_SRC = /root/work/lin ...

  3. android wifi驱动移植详细过程

    转自:http://bbs.imp3.net/thread-10558924-1-1.html 对于刚入手android没多久的人来说,android wifi 驱动的移植确实还是有难度的,不过参考了 ...

  4. Android平台开发-WIFI 驱动移植 -- 详细

    一.WIFI的基本架构(代码路径)     1.WIFI Settings应用程序:       packages/apps/Settings/src/com/android/settings/wif ...

  5. wifi驱动移植

    目标板:Hi3518 内核版本:linux3.0.8   1.修改makefile #PLATFORM = PC //注释掉 PLATFORM = HI3518 //支持平台 ifeq ($(PLAT ...

  6. I.MX6 WIFI wireless_tools 移植

    /******************************************************************************** * I.MX6 WIFI wirel ...

  7. WIFI驱动的移植 realtek 8188

    一般我们拿到的android源代码中wifi应用层部分是好的, 主要是wifi芯片的驱动要移植并添加进去. wifi驱动的移植, 以realtek的8188etv为例到官网下载相应的驱动, 解压后可以 ...

  8. I.MX6 SHT20 Linux 驱动移植

    /*********************************************************************** * I.MX6 SHT20 Linux 驱动移植 * ...

  9. Android wifi驱动的移植 realtek 8188

    Android wifi驱动的移植 一般我们拿到的android源代码中wifi应用层部分是好的, 主要是wifi芯片的驱动要移植并添加进去. wifi驱动的移植, 以realtek的8188etv为 ...

随机推荐

  1. Yii 安装学习

    (1)打开yii官方网站: http://www.yiichina.com (2)点击下载,跳转到下载页面: (3)找到从归档文件安装,新手学习,使用[ Yii2的基本应用程序模板]: (4)下载解压 ...

  2. HTML网页滚动加载--mark一下

    console控制台: >: function stroll(){ window.scrollTo(, document.body.scrollHeight); }; >: window. ...

  3. Codeforces 515E Drazil and Park (ST表)

    题目链接 Drazil and Park 中文题面 传送门 如果他选择了x和y,那么他消耗的能量为dx + dx + 1 + ... + dy - 1 + 2 * (hx + hy). 把这个式子写成 ...

  4. Codeforces Round #320 (Div. 2) [Bayan Thanks-Round]

    一部分题解,算是自己SB了 上午的TC 也是这样 写好了代码,却一直没注意细节,然后以为错了. 此处省100字,ps 貌似紫了,作为一个老菜鸡,终于紫了 A,B 都是语文题 C: 给以一个三角形一样的 ...

  5. 《深入理解mybatis原理》 MyBatis的二级缓存的设计原理

    MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能.本文将全面分析MyBatis的二级缓存的设计原理. 如上图所示,当开一个会话时,一个SqlS ...

  6. systemtap notes

    systemtap notes -- 10 June 2014 1 Systemtap systemtap是红帽开发的一款分析工具,如果你需要使用的话,最好在redhat的系统上,在 Ubuntu上兼 ...

  7. spring工具类获取bean

    import org.springframework.web.context.ContextLoader; import org.springframework.web.context.WebAppl ...

  8. Mysql 性能优化20个原则(4)

    16. 垂直分割 “垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的.(以前,在银行做过项目,见过一张表有100多个字段,很恐怖) 示例一:在 ...

  9. Mysql 性能优化20个原则(3)

    12. Prepared Statements Prepared Statements很像存储过程,是一种运行在后台的SQL语句集合,我们可以从使用 prepared statements 获得很多好 ...

  10. 基于源码学习-fighting

    今天逛着逛着,看到个培训网站,点进去和客服人员聊了一下.接着,看了看他们的培训课程,想了解一下 嵌入式开发的. (人就是要放空自己,把自己当做什么都不会,当着个婴儿[小学生]一般认真,要学什么知识就是 ...