Linux下移植wifi网卡驱动(RTL8723)

硬件:韦老师的开发板IMX6ULL 内核版本:4.15(自己移植) 这次实验是在自己移植的内核上面加入RTL8723驱动 问题一:如何获取RTL8723驱动? 在韦老师给我们的程序中能够使用wifi,因此韦老师...

硬件:韦老师的开发板IMX6ULL

内核版本:4.15(自己移植)

这次实验是在自己移植的内核上面加入RTL8723驱动

问题一:如何获取RTL8723驱动?

在韦老师给我们的程序中能够使用wifi,因此韦老师肯定是移植好了wifi驱动,我们可以直接在韦老师提供的内核中找到RTL8723的驱动文件。、

路径为:\drivers\net\wireless\rtl8723BU

所以我们要做的是把rtl8723BU文件夹拷贝到我们移植的内核中去。

问题二:如何使RTL8723驱动生效?

拷贝后我们就要让内核加载这个驱动,或者我们把它编译成模块。

因此我们就需要修改\drivers\net\wireless\这个目录下的Makefile和Kconfig文件

观察韦老师提供的内核我么可以发现只需要做简单的修改

在Kconfig文件中添加以下部分

source "drivers/net/wireless/rtl8723BU/Kconfig"

这样我们就可以在make menuconfig中配置这个驱动

在Makefile文件中添加以下部分

obj-$(CONFIG_RTL8723BU)           += rtl8723BU/

问题三:接下来是不是要make menuconfig?

如题,我们接下来就make menuconfig

但是我们不仅要加载这个驱动,还需要配置内核使其支持wifi和usb,因为RTL8723是通过USB接在IMX6UL上面的

1.支持USB设备

attachments-2020-04-GTGftHqd5e9c53083798d.png2.支持WIFI设备

attachments-2020-04-PzTP6y4Z5e9c531fe150b.png3.支持无线网络IEEE 802.11

attachments-2020-04-wJ3b2JKx5e9c533d9bec3.png最后是我们的RTL8723
attachments-2020-04-kXwZeHC65e9c53b1180cf.png我们选择将其编译为模块
路径位Device Drivers
             Network device support
                 Wireless LAN
                      Realtek 8723B USB WiFi
然后我们编译内核
make XXXconfig(XXXconfig是你自己的配置文件)
make zImage
make modules就会生成8723bu.ko
attachments-2020-04-bky54SON5e9c54a1ce190.png

问题四:如何加载?

把上一步生成的8723bu.ko和zImage文件放到板子上去

重启执行insmod 8723bu.ko 

然后ifconfig -a

如果出现 wlan0则移植成功

attachments-2020-04-IBBLYQuz5e9c555be633c.png

当然一般是不会出现 wlan0,也就是说一般不会成功

问题五:为何不成功?

attachments-2020-04-Xqxc0kq65e9c55ba2f103.png
attachments-2020-04-Bcrevoot5e9c55a54fc75.png观察电路图就会发现wifi的3.3V受74HC595控制
拿电压表测量就会发现RTL8723没有电压,因此我们就要控制74HC595。

问题六:如何控制74HC595?

通过学习发现这个芯片控制也很简单。
于是我就自己写了一个驱动,编译,加载,一套操作下来RTL8723是有电了,但是USB芯片复位了。
也就是说由于我操作这个芯片导致USB复位。
解决方法肯定是在加载USB驱动前控制这个芯片。
韦老师是怎么做的呢。
观察设备树发现以下内容
attachments-2020-04-lkh8gUDn5e9c572254380.png也就是说我们发现内核好像使用了这个74HC595芯片
这下就简单了,我们全局搜索compatible属性
搜索 fairchild,74hc595 发现gpio-74x164.c这个文件下使用了这个节点
attachments-2020-04-kuVi9SO75e9c57e46df73.png
然后我们试着在probe函数下增加打印信息看内核启动是否用到这个文件。
attachments-2020-04-BR9Pw6am5e9c583f58563.png启动发现并没有用到这个文件。
原因是没有将这个驱动配置进内核。
我们make menuconfig 观察一下

Device Drivers
    GPIO Support
      SPI GPIO expanders
发现74x164 serial-in/parallel-out 8-bits shift register  没有被选中
然后我们将其选中

attachments-2020-04-GjYUzRie5e9c58fb16c50.png
同样
Device Drivers
 SPI support
  User mode SPI device driver support    
将User mode SPI device driver support 选中
attachments-2020-04-2oyRkEvy5e9c5959684ce.png然后重新编译内核,启动加载,发现

printk("cd %s\n",__FUNCTION__);

这条消息执行了

因此我们就可以修改gpio-74x164.c这个文件达到在USB驱动加载之前控制74HC595的目的

幸运的是gpio-74x164.c这个文件帮我们做好了,我们可以直接使用,因为这个时候wifi已经有电了

加载wifi驱动

ifconfig -a

就会发现已经有wlan0了

问题七:如何测试WIFI?

移植wpa_supplicant

这个网上教程比较多所以就不做介绍了。











  • 发表于 2020-04-19 22:09
  • 阅读 ( 612 )
  • 分类:经验分享

0 条评论&回复

请先 登录 后评论
正是在下
正是在下

4 篇文章

作家榜 »

  1. 百问网-周老师 18 文章
  2. st_ashang 14 文章
  3. 渐进 12 文章
  4. zxq 11 文章
  5. helloworld 8 文章
  6. 谢工 5 文章
  7. Litchi_Zheng 5 文章
  8. 星星之火 5 文章