海思HI3516移植使用AP6181 BCM43362

备注

  • 平台:Hi3516dv300
  • WiFi:AP6181 (AP6XXX应该都差不多,我猜的);SDIO2.0接口(时钟设置在50M左右,其他 SDIO3.0的设置在150M左右,电压设置在1.8V)。
  • kernel:Linux4.9
  • 驱动:BCM通用驱动1.363.59

硬件连接

WL_REG_ON 内部电源调节开关(就是WIFI开关)
WL_HOST_WAKE 外部信号唤醒(这个引脚取决于配置,配置成OOB则使用,IB不使用)
SDIO SDIO连接在SDIO1上(设备树添加MMC2)

备注: 如果使用了GPIO11则要注意,GPIO11的使用与PMC有关,
PMC要处于工作状态,RTC也要处于工作模式,PWR控制寄存器也要设置PMC域上的GPIO复用使能。

开始

  1. 将源码解压到kernel中的 drivers/net/wireless/ 目录
  2. 修改wireless里面的Kconfig,添加 source “drivers/net/wireless/bcmdhd/Kconfig”
  3. 修改wireless里面的Makefile,添加obj-$(CONFIG_BCMDHD) += bcmdhd/
  4. 修改驱动源码里面的dhd_gpio.c,对应上面硬件的两个引脚。(海思GPIO,8个一组,引脚号:GPIO2_3,就是2*8+3=19。)

内核配置

  • Network support->Wireless,设置cfg80211和mac80211。
  • 如果要使用iwconfig,iwlist调试工具,需要配置WEXT.
  • AP6181需要配置IPV6,Network support->Networking options,设置The IPv6 protocol 。
  • MMC相关和GPIO相关的默认已经配置好了,可以不管。
  • Device Device->Network device support->wireless LAN,设置Broadcom FullMAC wireless cards support(设置为M,方便调试),下面设置固件路径和接口,中断类型与上面硬件的WL_HOST_WAKE是否使用设置IB和OOB.

设备树修改

  • 设备树文件在kernel,arch/arm/boot/dts,里面有一个dts,和dtsi,一般只需要修改dts即可。
  • 在dts里面将MMC2设置为*“okay”*。
  • 在dtsi的mmc2中添加属性mmc-hs200-1_8v
  • 若上面的配置中断类型设置为IB,内部中断,则需要在dtsi的mmc2属性中添加cap-sdio-irq

uboot修改

  • Hi3516的SDIO1默认是没有配置成的SDIO复用的(刚开始没注意,被坑了好久)。
  1. 在U-boot目录下编译出U-boot.bin,复制到osdrv/tools/pc/uboot_tools/
  2. tools/pc/hi_gzip编译一下gzip,把bin文件复制到arch/arm/cpu/armv7/hi3516cv500/hw_compressed/
  3. 修改配置表格,在pinout里面配置对应的管脚成SDIO,之后在main里面点击Generate reg bin file(需要宏,注意检查宏是否开启),会生成reg_info.bin。
  4. 将reg_info.bin复制到U-boot目录,重命名成 .reg
  5. 执行make ARCH=arm CROSS_COMPILE=arm-himix200-linux- u-boot-z.bin,生成的bin文件就是需要的U-boot。

调试

  • 编译内核和模块,烧录新的内核、U-boot、dtb(如果开始的U-boot没有传递设备树文件,这里要记得修改启动传参)
  • 加载ko,iwconfig(需要移植wireless_tools)或者ifconfig -a 查看是否有wlan0网口,有就初始化成功了。
  • ifconfig wlan0 up启动网口。看是否成功
  • 之后就可以移植wpa_supplicant,hostapd进一步调试。

你可能感兴趣的:(海思,嵌入式,linux,wifi,sdio,驱动程序)