SDIO WiFi 之 i.MX8QM 实例

关键字 :SDIOWIFIi.MX8QM

一、硬件信息

       我这里使用到的 i.MX8QM 硬件上有 3 路 SD3.0 接口,其中一路复用做了 eMMC5.1,设备名为 mmc0;有一路用作 SD1,设备名为 mmc1;还有一路连接 SDIO WiFi 模块(CBM252),设备名为 mmc2。下图为 WiFi 模块使用到的芯片引脚连接图。

 

 

 

 

二、SDIO WiFi 驱动介绍

SDIO 接口的 WiFi,首先,它是一个 SDIO 卡 设备,然后具备了 WiFi 的功能,所以 SDIO 接口的 WiFi 驱动就是在 WiFi 驱动外面套上了一个 SDIO 驱动的外壳。

 

SDIO 驱动仍然符合设备驱动的分层与分离思想。

       ① 设备驱动层(wifi 设备)
       ② 核心层(向上向下提供接口)
       ③ 主机驱动层(实现 SDIO 驱动)

 

设备驱动层的源码需要找 WiFi 模组厂商提供,将拿到的 WiFi 驱动源码放到 kernel 目录下:drivers/net/wireless/bcmdhd

 

Host:针对不同主机端的 SDHC、MMC 控制器的驱动,这部分需要由驱动工程师来完成;

Core:整个 MMC 的核心层,这部分完成不同协议和规范的实现,为 Host 层和设备驱动层提供接口函数。

 d

Core 层和 Host 层源码在 kernel 目录下:drivers/mmc


Core
层完成了 

① 不同协议和规范的实现
② 为 HOST 层的驱动提供了接口函数
③ 完成了 SDIO 总线注册
④ 对应 ops 操作
⑤ 以及支持 mmc 的代码

 

三、驱动移植

这里使用的 i.MX8 Android 软件版本是:imx-p9.0.0_2.1.0-auto-ga。

如下为 WiFi 模块厂商提供的移植包,根据移植包可以开始移植工作。

① 首先将移植包提供的文件拷贝到 Android 对应目录下:

    将 WiFi 驱动源码 driver 目录下的 bcmdhd 文件夹拷贝到 Android 的 kernel 目录下:vendor/nxp-opensource/kernel_imx/drivers/net/wireless/

    拷贝移植包 bin 中的 wl 到 vendor/nxp/imx-firmware/cyw-wifi-bt/ 目录

    拷贝移植包 FW 中的 fw_bcmdhd.bin、bcmdhd.cal 和 bcmdhd.clm_blob 到 vendor/nxp/imx-firmware/cyw-wifi-bt/DHD89359 目录

    拷贝移植包 config 中的 p2p_supplicant.conf、hostapd.conf 和 wpa_supplicant.conf 到 device/fsl/common/wifi 目录

    拷贝移植包文件夹 wpa_supplicant\wpa_supplicant_8 到 external 目录下替换

    拷贝移植包文件夹 wpa_supplicant\wpa_supplicant_8\libbcmdhd 目录下文件到hardware/broadcom/wlan/bcmdhd/wpa_supplicant_8_lib

 

② 在如下目录文件中添加配置代码:

vendor/nxp-opensource/kernel_imx/drivers/net/wireless/Makefile

# by pual
obj-$(CONFIG_BCMDHD) += bcmdhd/


vendor/nxp-opensource/kernel_imx/drivers/net/wireless/Kconfig

# by pual
source "drivers/net/wireless/bcmdhd/Kconfig"


vendor/nxp-opensource/kernel_imx/arch/arm64/configs/android_defconfig

CONFIG_WLAN_VENDOR_BROADCOM=y
CONFIG_BCMDHD=m
CONFIG_BCM4373=y
CONFIG_BCMDHD_SDMMC=y
CONFIG_BCMDHD_SDIO=y
CONFIG_BCMDHD_VENDOR_EXT=y
CONFIG_BCMDHD_WPA3=y

 

vendor/nxp-opensource/kernel_imx/arch/arm64/boot/dts/freescale/fsl-imx8qm-mek.dtsi

regulators {
reg_usdhc3_vmmc: usdhc3_vmmc {
compatible = "regulator-fixed";
regulator-name = "WLAN_EN";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
//gpio = <&gpio0 10 GPIO_ACTIVE_HIGH>;
off-on-delay = <4800>;
enable-active-high;
};
}

&iomuxc {
pinctrl_usdhc3_gpio: usdhc3grpgpio {
fsl,pins = <
SC_P_SCU_GPIO0_07_LSIO_GPIO1_IO03 0x18000020
SC_P_M41_I2C0_SCL_LSIO_GPIO0_IO10 0x18000020 //wifi enable
SC_P_QSPI1A_DQS_LSIO_GPIO4_IO22 0x18000020 //wifi bt vddio
SC_P_FLEXCAN2_TX_LSIO_GPIO4_IO02 0x18000020
//SC_P_ESAI1_TX4_RX1_LSIO_GPIO2_IO12 0x18000020
SC_P_USDHC2_CD_B_LSIO_GPIO4_IO12 0x00000021
SC_P_SPI3_SCK_LSIO_GPIO2_IO17 0x00000021
SC_P_SPI3_SDI_LSIO_GPIO2_IO19 0x18000021
SC_P_SPI3_CS0_LSIO_GPIO2_IO20 0x18000021

>;
};

pinctrl_usdhc3: usdhc3grp {
fsl,pins = <
SC_P_USDHC2_CLK_CONN_USDHC2_CLK 0x06000041
SC_P_USDHC2_CMD_CONN_USDHC2_CMD 0x00000021
SC_P_USDHC2_DATA0_CONN_USDHC2_DATA0 0x00000021
SC_P_USDHC2_DATA1_CONN_USDHC2_DATA1 0x00000021
SC_P_USDHC2_DATA2_CONN_USDHC2_DATA2 0x00000021
SC_P_USDHC2_DATA3_CONN_USDHC2_DATA3 0x00000021
//SC_P_USDHC2_RESET_B_CONN_USDHC2_RESET_B 0x00000020
SC_P_USDHC2_VSELECT_CONN_USDHC2_VSELECT 0x00000021
>;
};

pinctrl_usdhc3_100mhz: usdhc3grp100mhz {
fsl,pins = <
SC_P_USDHC2_CLK_CONN_USDHC2_CLK 0x06000040
SC_P_USDHC2_CMD_CONN_USDHC2_CMD 0x00000020
SC_P_USDHC2_DATA0_CONN_USDHC2_DATA0 0x00000020
SC_P_USDHC2_DATA1_CONN_USDHC2_DATA1 0x00000020
SC_P_USDHC2_DATA2_CONN_USDHC2_DATA2 0x00000020
SC_P_USDHC2_DATA3_CONN_USDHC2_DATA3 0x00000020
SC_P_USDHC2_VSELECT_CONN_USDHC2_VSELECT 0x00000020
>;
};

pinctrl_usdhc3_200mhz: usdhc3grp200mhz {
fsl,pins = <
SC_P_USDHC2_CLK_CONN_USDHC2_CLK 0x06000040
SC_P_USDHC2_CMD_CONN_USDHC2_CMD 0x00000020
SC_P_USDHC2_DATA0_CONN_USDHC2_DATA0 0x00000020
SC_P_USDHC2_DATA1_CONN_USDHC2_DATA1 0x00000020
SC_P_USDHC2_DATA2_CONN_USDHC2_DATA2 0x00000020
SC_P_USDHC2_DATA3_CONN_USDHC2_DATA3 0x00000020
SC_P_USDHC2_VSELECT_CONN_USDHC2_VSELECT 0x00000020
>;
};
}

&usdhc3 {
pinctrl-names = "default", "state_100mhz", "state_200mhz";
pinctrl-0 = <&pinctrl_usdhc3>, <&pinctrl_usdhc3_gpio>;
pinctrl-1 = <&pinctrl_usdhc3_100mhz>, <&pinctrl_usdhc3_gpio>;
pinctrl-2 = <&pinctrl_usdhc3_200mhz>, <&pinctrl_usdhc3_gpio>;
bus-width = <4>;
//cd-gpios = <&gpio4 12 GPIO_ACTIVE_LOW>;
//wp-gpios = <&gpio5 21 GPIO_ACTIVE_HIGH>;
vmmc-supply = <&reg_usdhc3_vmmc>;
wifi-host;
status = "okay";
};

 

③ 修改 Android 板配置文件:device/fsl/imx8q/mek_8q/BoardConfig.mk,如下:

BOARD_WLAN_DEVICE            := bcmdhd
WPA_SUPPLICANT_VERSION := VER_0_8_X
BOARD_WPA_SUPPLICANT_DRIVER := NL80211
BOARD_HOSTAPD_DRIVER := NL80211

BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE)
BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE)

WIFI_HIDL_FEATURE_DUAL_INTERFACE := true

BOARD_VENDOR_KERNEL_MODULES += \
$(KERNEL_OUT)/drivers/net/wireless/bcmdhd/bcmdhd.ko

 

device/fsl/imx8q/mek_8q/mek_8q.mk 文件下添加如下代码:

# by pual
# Copy wifi FW/wl binary/wpa_suuplicant.conf to board
PRODUCT_COPY_FILES += \
device/fsl/common/wifi/p2p_supplicant.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/p2p_supplicant.conf \
device/fsl/common/wifi/hostapd.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/hostapd.conf \
device/fsl/common/wifi/wpa_supplicant.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/wpa_supplicant.conf \
vendor/nxp/imx-firmware/cyw-wifi-bt/wl:system/bin/wl \
vendor/nxp/imx-firmware/cyw-wifi-bt/fw_bcmdhd.bin:$(TARGET_COPY_OUT_VENDOR)/etc/firmware/brcm/fw_bcmdhd.bin \
vendor/nxp/imx-firmware/cyw-wifi-bt/bcmdhd.cal:$(TARGET_COPY_OUT_VENDOR)/etc/firmware/brcm/bcmdhd.cal \
vendor/nxp/imx-firmware/cyw-wifi-bt/bcmdhd.clm_blob:$(TARGET_COPY_OUT_VENDOR)/etc/firmware/brcm/bcmdhd.clm_blob \

# by pual
# Add WiFi CY HAL library
PRODUCT_PACKAGES += \
libwpa_client \
lib_driver_cmd_bcmdhd \
android.hardware.wifi@1.0-service \
wifilogd \
wificond

 

device/fsl/imx8q/mek_8q/init.rc 文件下添加如下代码:

service wpa_supplicant /vendor/bin/hw/wpa_supplicant \
-iwlan0 -Dnl80211 \
-c/vendor/etc/wifi/wpa_supplicant.conf \
-m/vendor/etc/wifi/p2p_supplicant.conf \
-puse_p2p_group_interface=1p2p_device=1 \
-O/data/vendor/wifi/wpa/sockets \
-e/data/vendor/wifi/entropy.bin -g@android:wpa_wlan0
interface android.hardware.wifi.supplicant@1.0::ISupplicant default
interface android.hardware.wifi.supplicant@1.1::ISupplicant default
socket wpa_wlan0 dgram 660 wifi wifi
class main
disabled
oneshot

 

external/wpa_supplicant_8/hostapd/android.config 文件添加如下代码:

#by pual
CONFIG_CTRL_IFACE_HOSTAPD_HIDL=y

 

device/fsl/imx8q/mek_8q/manifest.xml 文件添加如下代码:


android.hardware.wifi
hwbinder
1.2

IWifi
default



android.hardware.wifi.supplicant
hwbinder
1.1

ISupplicant
default



android.hardware.wifi.hostapd
hwbinder
1.0

IHostapd
default

 

device/fsl/imx8q/mek_8q/BoardConfig.mk 文件添加如下代码:

WIFI_HIDL_FEATURE_DUAL_INTERFACE := true

 

⑨ 根据移植包更新补丁文件 cfg80211_wpa3_kernel_4_12_0

 

⑩ 完成以上工作后,开始编译,Android 目录下执行如下操作:

source build/envsetup.sh
lunch 33
make -j16

 

编译完成后将镜像烧录到开发板中。

 

注:

一、如果编译过程出现如下错误,解决方法如下

编译报错(一):

'drivers/net/wireless/bcmdhd/Kconfig:1:warning: ignoring unsupported character '

 

解决方法:

将 dos 格式文本转换成 unix 文本

sudo apt-get install dos2unix
dos2unix ./drivers/net/wireless/bcmdhd/Kconfig

 

编译报错(二):

scripts/kconfig/zconf.tab.c:2466:23: fatal error: zconf.lex.c: No such file

 

解决方法:

rm -rf out
cd vendor/nxp-opensource/kernel_imx
make mrproper
source build/envsetup.sh
lunch 33
make -j16

 

四、功能验证

启动开发板,启动 log 中可以看到设备已经创建完成

mmc2: new ultra high speed SDR104 SDIO card at address 0001

 

查看 mmc 设备节点,可以看到 mmc2 已经创建

mek_8q:/ # ls /sys/bus/mmc/devices/
mmc0:0001 mmc2:0001

 

如果节点没有顺利生成需要检查:

        ① 模块供电是否正常;
        ② 上电时序是否满足要求;
        ③ dts 中 usdhc 配置是否正确等等。

 

将上一节编译生成的 bcmdhd.ko 文件进行挂载:

insmod /vendor/lib/modules/bcmdhd.ko firmware_path=/vendor/etc/firmware/brcm/fw_bcmdhd.bin nvram_path=/vendor/etc/firmware/brcm/bcmdhd.cal clm_path=/vendor/etc/firmware/brcm/bcmdhd.clm_blob

 

挂载时如果出现如下报错:

[ 126.153587] type=1400 audit(1612757054.924:3017): avc: denied { module_load } for pid=4322 comm="insmod" path="/vendor/lib/modules/bcmdhd.ko" dev="dm-1" ino=474 scontext=u:r:su:s0 tcontext=u:object_r:vendor_file:s0 tclass=system permissive=1

 

解决方法:

① 在 device/fsl/imx8q/sepolicy/system_server.te 中添加:

allow su system_data_file:system { module_load };

 

② 修改以下目录中的 domain.te,

system/sepolicy/public/domain.te
system/sepolicy/prebuilts/api/28.0/public/domain.te

将 1314 行代码注释如下:

#neverallow * ~{ system_file vendor_file rootfs }:system module_load;

 

修改完成后,重新编译烧录再挂载:

mek_8q:/ #insmod /vendor/lib/modules/bcmdhd.ko firmware_path=/vendor/etc/firmware/brcm/fw_bcmdhd.bin nvram_path=/vendor/etc/firmware/brcm/bcmdhd.cal clm_path=/vendor/etc/firmware/brcm/bcmdhd.clm_blob

[ 100.077849] dhd_module_init in
[ 100.081196] Power-up adapter 'DHD generic adapter'
[ 100.087401] imx8qm-pinctrl iomuxc: pin_config_set op failed for pin 11
[ 100.093949] sdhci-esdhc-imx 5b030000.usdhc: Error applying setting, reverse things back
[ 100.103080] dummy_probe: enter
[ 100.106150] dummy_probe: func->num=0x1;
[ 100.110090] dummy_probe: class=0x0; vendor=0xffff; device=0xffff
[ 100.120511] dummy_probe: enter
[ 100.123575] dummy_probe: func->num=0x2;
[ 100.127525] dummy_probe: class=0x0; vendor=0xffff; device=0xffff
[ 100.136290] wifi_platform_set_power = 1, delay: 200 msec
[ 100.348092] wifi_platform_bus_enumerate device present 1
[ 100.371949] imx8qm-pinctrl iomuxc: pin_config_set op failed for pin 11
[ 100.378503] sdhci-esdhc-imx 5b030000.usdhc: Error applying setting, reverse things back
[ 100.387744] bcmsdh_sdmmc: bcmsdh_sdmmc_probe Enter
[ 100.398496] bcmsdh_sdmmc: bcmsdh_sdmmc_probe Enter
[ 100.403317] bus num (host idx)=2, slot num (rca)=1
[ 100.408291] found adapter info 'DHD generic adapter'
[ 100.413466] sdioh_attach: sd clock rate = 198000000
[ 100.419094] F1 signature read @0x18000000=0x17204373
[ 100.424254] sdioh_cis_read: func_cis_ptr[0]=0x10ac
[ 100.441946] sdioh_cis_read: func_cis_ptr[1]=0x1000
[ 100.461725] sdioh_cis_read: func_cis_ptr[2]=0x1038
[ 100.481247] F1 signature OK, socitype:0x1 chip:0x4373 rev:0x0 pkg:0x2
[ 100.488448] DHD: dongle ram size is set to 917504(orig 917504) at 0x160000
[ 100.495413] wifi_platform_prealloc: failed to alloc static mem section 7
[ 100.502239] wifi_platform_get_mac_addr
[ 100.506246] CFG80211-TRACE) wl_cfg80211_attach :In
[ 100.511059] CFG80211-DEBUG) wl_cfg80211_attach :func ffff8008f79edc08
[ 100.517569] CFG80211-DEBUG) wl_setup_wiphy :Setting interface combinations for common mode
[ 100.525880] CFG80211-DEBUG) wl_setup_wiphy :Registering custom regulatory)
[ 100.532799] CFG80211-INFO) wl_setup_wiphy : Registering Vendor80211
[ 100.539140] CFG80211-INFO) wl_cfgvendor_attach : Vendor: Register BRCM cfg80211 vendor cmd(0x67) interface
[ 100.551232] CFG80211-DEBUG) wl_init_priv_mem :Enter
[ 100.556242] CFG80211-DEBUG) wl_create_event_handler :Enter
[ 100.562155] CFG80211-DEBUG) wl_init_conf :Enter
[ 100.566825] CFG80211-DEBUG) wl_link_down :In
[ 100.571118] CFG80211-DEBUG) wl_setup_rfkill :Enter
[ 100.576794] CFG80211-DEBUG) wl_rfkill_set :Enter
[ 100.580101] CFG80211-DEBUG) wl_cfg80211_netdev_notifier_call :Enter state:5 ndevffff8008f6eb1000
[ 100.581511] CFG80211-DEBUG) wl_rfkill_set :
[ 100.590480] CFG80211-ERROR) wl_cfg80211_netdev_notifier_call : wdev null. Do nothing
[ 100.590484] CFG80211-DEBUG) wl_cfg80211_netdev_notifier_call :Enter state:1 ndevffff8008f6eb1000
[ 100.590495] CFG80211-ERROR) wl_cfg80211_netdev_notifier_call :
[ 100.594690] RF unblocked
[ 100.602464] wdev null. Do nothing
[ 100.623230] CFG80211-DEBUG) wl_cfg80211_netdev_notifier_call :Enter state:5 ndevffff8008f7e57000
[ 100.632222] CFG80211-ERROR) wl_cfg80211_netdev_notifier_call : wdev null. Do nothing
[ 100.640011] CFG80211-DEBUG) wl_cfg80211_netdev_notifier_call :Enter state:1 ndevffff8008f7e57000
[ 100.649035] CFG80211-ERROR) wl_cfg80211_netdev_notifier_call : wdev null. Do nothing
[ 100.656807] CFG80211-DEBUG) wl_cfg80211_netdev_notifier_call :Enter state:5 ndevffff8008f2ae7000
[ 100.665779] CFG80211-ERROR) wl_cfg80211_netdev_notifier_call : wdev null. Do nothing
[ 100.673543] CFG80211-DEBUG) wl_cfg80211_netdev_notifier_call :Enter state:5 ndevffff8008f7786000
[ 100.682537] CFG80211-ERROR) wl_cfg80211_netdev_notifier_call : wdev null. Do nothing
[ 100.690312] CFG80211-DEBUG) wl_cfg80211_netdev_notifier_call :Enter state:5 ndevffff8008f77eb000
[ 100.699284] CFG80211-ERROR) wl_cfg80211_netdev_notifier_call : wdev null. Do nothing
[ 100.707080] CFG80211-DEBUG) wl_cfg80211_netdev_notifier_call :Enter state:5 ndevffff8008f77ef000
[ 100.716061] CFG80211-ERROR) wl_cfg80211_netdev_notifier_call : wdev null. Do nothing
[ 100.723868] dhd_init_logstrs_array: Failed to open the file /installmedia/logstrs.bin
[ 100.732350] dhd_attach(): thread:dhd_watchdog_thread:10cd started
[ 100.738545] dhd_attach(): thread:dhd_dpc:10ce started
[ 100.743689] dhd_attach(): thread:dhd_rxf:10cf started
[ 100.748772] dhd_deferred_work_init: work queue initialized
[ 100.754561] dhd_init_logtrace_process(): thread:dhd_logtrace_thread:10d0 started
[ 100.762001] dhd_init_logtrace_process: thr_logtrace_ctl(4304) succedded
[ 100.769853] imx8qm-pinctrl iomuxc: pin_config_set op failed for pin 11
[ 100.776398] sdhci-esdhc-imx 5b030000.usdhc: Error applying setting, reverse things back
[ 100.785537] dhdsdio_probe_init: making DHD_BUS_DOWN
[ 100.798197] dhd_os_open_image1: /vendor/etc/firmware/brcm/fw_bcmdhd.bin (588784 bytes) open success
[ 100.863927] dhd_os_open_image1: /vendor/etc/firmware/brcm/bcmdhd.cal (2237 bytes) open success
[ 100.873160] dhdsdio_write_vars: Download, Upload and compare of NVRAM succeeded.
[ 100.949598] dhd_bus_init: enable 0x06, ready 0x06 (waited 0us)
[ 100.955495] si_get_pmu_reg_addr: addrRET: 18000670
[ 100.961445] dhdsdio_readshared: sdpcm_shared version 1 in dhd is different than sdpcm_shared version 0 in dongle
[ 100.972676] dhdsdio_readshared: sdpcm_shared version 1 in dhd is different than sdpcm_shared version 0 in dongle
[ 100.983702] Firmware version = wl0: Oct 5 2020 10:37:32 version 13.35.205.1 (r727312 CY) FWID 01-e06c80ca
[ 100.993459] wifi_platform_get_mac_addr
[ 101.003616] dhd_os_open_image1: /vendor/etc/firmware/brcm/bcmdhd.clm_blob (4400 bytes) open success
[ 101.013177] dhd_check_current_clm_data: ----- This FW is not included CLM data -----
[ 101.026207] dhd_check_current_clm_data: ----- This FW is included CLM data -----
[ 101.036151] Firmware up: op_mode=0x0005, MAC=88:bd:78:64:6b:22
[ 101.045231] Disable tdls_auto_op failed. -1
[ 101.050002] dhd_preinit_ioctls Set lpc failed -23
[ 101.057596] dhd_preinit_ioctls set keeplive failed -23
[ 101.063191] dhd_preinit_ioctls Set txbf failed -23
[ 101.068676] dhd_preinit_ioctls Set scancache failed -23
[ 101.074563] dhd_preinit_ioctls: event_log_max_sets: 25 ret: -23
[ 101.081277] dhd_preinit_ioctls: enable_memuse is failed ret=-23
[ 101.088410] dhd_iovar: GET failed. resp_buf NULL or length 0.
[ 101.094192] dhd_preinit_ioctls vht_features get failed -2
[ 101.108156] CLM version = Cypress.CYW89373Auto1.39.1
[ 101.140269] MACEVENT: WLC_E_IF, opcode:0x1 ifidx:0 role:0
[ 101.145787] dhd_rx_frame: net device is NOT registered. drop event packet
[ 101.152612] dhd_rx_frame: net device is NOT registered. drop event packet
[ 101.159452] dhd_rx_frame: net device is NOT registered. drop event packet
[ 101.166276] dhd_rx_frame: net device is NOT registered. drop event packet
[ 101.173273] rtt_do_get_ioctl: failed to send getbuf proxd iovar (CMD ID : 1), status=-23
[ 101.181736] dhd_rtt_init : FTM is not supported
[ 101.186899] dhd_rtt_ftm_config : failed to set config
[ 101.193083] dhd_ndo_get_version: failed, retcode = -23
[ 101.199033] dhd_wl_ioctl_get_intiovar: get int iovar wnm_bsstrans_resp failed, ERR -23
[ 101.206981] failed to get wnm_bsstrans_resp
[ 101.212033] failed to set WNM capabilities
[ 101.232789] dhd_preinit_ioctls: Failed to get preserve log # !
[ 101.238647] Time taken for FW download and F2 ready is: 368 msec
[ 101.244896] Dongle Host Driver, version 100.10.5.31 (r727288)
[ 101.244896] Compiled in drivers/net/wireless/bcmdhd
[ 101.255569] CFG80211-DEBUG) wl_cfg80211_netdev_notifier_call :Enter state:16 ndevffff8008f71a2000
[ 101.270235] CFG80211-INFO) wl_cfg80211_get_tx_power : device is not ready
[ 101.277315] CFG80211-DEBUG) wl_cfg80211_netdev_notifier_call :Enter state:5 ndevffff8008f71a2000
[ 101.286795] Register interface [wlan0] MAC: 88:bd:78:64:6b:22
[ 101.286795]
[ 101.296372] dhd_module_init out

 

查看当前 wlan0 网络设备信息

mek_8q:/ # ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr 88:bd:78:64:6b:22 Driver bcmsdh_sdmmc
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 TX bytes:0

 

设置网络参数

mek_8q:/ # ifconfig wlan0 192.168.43.65 netmask 255.255.255.0

 

启动 wlan0 网卡

mek_8q:/ # ifconfig wlan0 up                                                   
[ 135.166864] CFG80211-DEBUG) wl_cfg80211_netdev_notifier_call :Enter state:13 ndevffff8008f71a2000
[ 135.176003] CFG80211-DEBUG) wl_cfg80211_up :In
[ 135.185021] CFG80211-TRACE) wl_cfg80211_up :WLC_GET_VERSION=2
[ 135.190809] CFG80211-TRACE) wl_cfg80211_attach_post :In
[ 135.196681] CFGP2P-INFO) wl_cfgp2p_supported :
[ 135.196684] p2p is supported
[ 135.204132] CFG80211-DEBUG) __wl_cfg80211_up :In
[ 135.208775] CFG80211-TRACE) dhd_config_dongle :In
[ 135.217689] CFG80211-DEBUG) __wl_update_wiphybands :nchain=1
[ 135.239318] CFG80211-DEBUG) wl_construct_reginfo :HT80/160/80p80 center channel : 149
[ 135.247193] CFG80211-DEBUG) wl_construct_reginfo :HT80/160/80p80 center channel : 153
[ 135.255396] CFG80211-DEBUG) wl_construct_reginfo :HT80/160/80p80 center channel : 157
[ 135.263254] CFG80211-DEBUG) wl_construct_reginfo :HT80/160/80p80 center channel : 161
[ 135.275118] CFG80211-DEBUG) wl_update_vht_cap :wl_update_vht_cap 5GHz band vht_enab=1 vht_cap=0f805132 vht_rx_mcs_map=fffe vht_tx_mcs_map=fffe
[ 135.288334] CFG80211-INFO) __wl_cfg80211_up : wl version. Major: 6
[ 135.295856] CFG80211-ERROR) init_roam_cache : roamscan_mode iovar failed. -23
[ 135.303015] CFG80211-ERROR) wl_cfg80211_up : Failed to enable RCC.
[ 135.310254] dhd_set_scb_probe: max_scb_probe setting failed
[ 135.315867] [wlan0] tx queue started
[ 135.319936] CFG80211-DEBUG) wl_cfg80211_set_power_mgmt :Enter
[ 135.326074] CFG80211-DEBUG) wl_cfg80211_netdev_notifier_call :Enter state:1 ndevffff8008f71a2000

 

初始化 wpa_supplicant

/vendor/bin/hw/wpa_supplicant -iwlan0 -Dnl80211 -O/data/vendor/wifi/wpa/sockets -c/vendor/etc/wifi/wpa_supplicant.conf -m/vendor/etc/wifi/p2p_supplicant.conf -puse_p2p_group_interface=1p2p_device=1 -e/data/vendor/wifi/entropy.bin -ddd -B

 

扫描无线网络

mek_8q:/ # wpa_cli -i wlan0 scan

 

查看搜索结果,可以看到我手机打开的热点 “HUAWEI Mate 20 Pro (UD)”

mek_8q:/ # wpa_cli -i wlan0 scan_result
bssid / frequency / signal level / flags / ssid
9c:1c:12:eb:ea:14 5745 -56 [WPA-EAP-CCMP+TKIP][WPA2-EAP+FT/EAP-CCMP+TKIP][ESS] WPG-WIFI
9c:1c:12:eb:e3:d4 5825 -63 [WPA-EAP-CCMP+TKIP][WPA2-EAP+FT/EAP-CCMP+TKIP][ESS] WPG-WIFI
9c:1c:12:9d:d4:34 5765 -70 [WPA-EAP-CCMP+TKIP][WPA2-EAP+FT/EAP-CCMP+TKIP][ESS] WPG-WIFI
9c:1c:12:eb:ea:04 2412 -67 [WPA-EAP-CCMP+TKIP][WPA2-EAP+FT/EAP-CCMP+TKIP][ESS] WPG-WIFI
b4:0f:3b:a9:4c:a0 2437 -66 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] ATU_TEST_WIFI1
0a:da:0c:54:0f:ab 5805 -78 [WPA2-PSK-CCMP][WPS][ESS][P2P] DIRECT-QKCNSZ-116911-01msLL
6c:f3:7f:5a:79:94 5825 -80 [WPA-EAP-CCMP+TKIP][WPA2-EAP+FT/EAP-CCMP+TKIP][ESS] WPG-WIFI
9c:1c:12:eb:e3:c4 2462 -70 [WPA-EAP-CCMP+TKIP][WPA2-EAP+FT/EAP-CCMP+TKIP][ESS] WPG-WIFI
9c:1c:12:eb:e6:c4 2462 -78 [WPA-EAP-CCMP+TKIP][WPA2-EAP+FT/EAP-CCMP+TKIP][ESS] WPG-WIFI
c8:3a:35:43:e9:98 2462 -91 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
9c:1c:12:ec:4a:20 2437 -85 [WPA-EAP-CCMP+TKIP][WPA2-EAP+FT/EAP-CCMP+TKIP][ESS] WPG-WIFI
9c:1c:12:eb:ea:11 5745 -56 [ESS] WPG-Web
9c:1c:12:eb:e3:d1 5825 -63 [ESS] WPG-Web
9c:1c:12:9d:d4:31 5765 -70 [ESS] WPG-Web
9c:1c:12:eb:ea:01 2412 -67 [ESS] WPG-Web
9c:1c:12:eb:e3:c1 2462 -70 [ESS] WPG-Web
6c:f3:7f:5a:79:91 5825 -80 [ESS] WPG-Web
9c:1c:12:eb:e6:c1 2462 -78 [ESS] WPG-Web
88:40:3b:9a:ad:05 2412 -50 [WPA2-PSK-CCMP][ESS] HUAWEI Mate 20 Pro (UD)
d8:c7:c8:74:31:60 5785 -76 [WPA-EAP-CCMP+TKIP][WPA2-EAP+FT/EAP-CCMP+TKIP][ESS] WPG-WIFI
b4:0f:3b:a9:4c:98 2462 -71 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] ATU_Mouse_Test2
8a:62:ec:81:fa:6b 2437 -90 [WPA2-PSK-CCMP][ESS] realme GT
6c:f3:7f:5a:79:81 2462 -88 [ESS] WPG-Web

 

添加一个网络连接

mek_8q:/ # wpa_cli -i wlan0 add_network
0

 

连接手机热点

mek_8q:/ # wpa_cli -i wlan0 set_network 0 ssid '"HUAWEI Mate 20 Pro (UD)"'
OK
mek_8q:/ # wpa_cli -i wlan0 set_network 0 psk '"qq402931261"'
OK
mek_8q:/ # wpa_cli -i wlan0 enable_network 0

 

测试网络连接,可以 ping 通,说明网络连接正常

mek_8q:/ # ping -I wlan0 192.168.43.1
PING 192.168.43.1 (192.168.43.1) from 192.168.43.65 wlan0: 56(84) bytes of data.
64 bytes from 192.168.43.1: icmp_seq=1 ttl=64 time=84.8 ms
64 bytes from 192.168.43.1: icmp_seq=2 ttl=64 time=12.9 ms
64 bytes from 192.168.43.1: icmp_seq=3 ttl=64 time=67.5 ms
64 bytes from 192.168.43.1: icmp_seq=4 ttl=64 time=10.3 ms
64 bytes from 192.168.43.1: icmp_seq=5 ttl=64 time=10.2 ms

 

通过 Android 界面连接手机热点,挂载 ko 文件后打开 WiFi 设置,搜索网络

连接热点后可以看到打开百度网页正常

相关视频

i.MX8QM SDIO WiFi 驱动移植

介绍 i.MX8QM SDIO WiFi 驱动移植的过程以及移植过程中,需要注意的事项.(建议选择高清分辨率以上观看)

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论