wifiembedded-linuxfirmwareaccess-pointhostapd

Create Access Point with mwifiex_pcie driver


My configuration :
- i.MX6Quad
- kernel stable 5.5.6
- wifi module : mwifiex_pcie
- firmware : pcieuart8997_combo_v4.bin (from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/)

I'm trying to create a access point but when i'm launch hostapd, I always get same error from the firmware :

$ hostapd -B /etc/hostapd.conf
Configuration file: /etc/hostapd.conf
[  855.225833] mwifiex_pcie 0000:01:00.0: CMD_RESP: cmd 0xf7 error, result=0x2
mlan0: interface state UNINITIALIZED->COUNTRY_UPDATE

Process used :
1) Load wifi module

$ modprobe mwifiex_pcie
[ 300.412095] mwifiex_pcie 0000:01:00.0: enabling device (0140 -> 0142)
[ 300.418982] mwifiex_pcie: PCI memory map Virt0: 52dcd608 PCI memory map Virt2: 6cc1cdc2
[ 301.422006] mwifiex_pcie 0000:01:00.0: info: FW download over, size 632240 bytes
[ 302.262589] mwifiex_pcie 0000:01:00.0: WLAN FW is active
[ 302.324072] mwifiex_pcie 0000:01:00.0: Unknown api_id: 3
[ 302.329794] mwifiex_pcie 0000:01:00.0: Unknown api_id: 4
[ 302.335983] mwifiex_pcie 0000:01:00.0: Unknown GET_HW_SPEC TLV type: 0x217
[ 302.375282] mwifiex_pcie 0000:01:00.0: info: MWIFIEX VERSION: mwifiex 1.0 (16.68.1.p179)
[ 302.383574] mwifiex_pcie 0000:01:00.0: driver_version = mwifiex 1.0 (16.68.1.p179)

2) Set interfaces

$ ip link set mlan0 up
$ /sbin/ifup -a
$ ifconfig mlan0
 mlan0     Link encap:Ethernet  HWaddr C0:EE:XX:XX:XX:XX  
          inet addr:192.168.0.5  Bcast:0.0.0.0  Mask:255.255.255.0
          UP 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 (0.0 B)  TX bytes:0 (0.0 B)

My interfaces file :

auto lo
iface lo inet loopback

auto mlan0
iface mlan0 inet static
address 192.168.0.5
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 8.8.8.8 8.8.4.4 192.168.0.1

3) Configure hostapd.conf

# interface wlan du Wi-Fi
interface=mlan0

# nl80211 avec tous les drivers Linux mac80211 
driver=nl80211

# Nom du spot Wi-Fi
ssid=my_access_point

# mode Wi-Fi (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g)
hw_mode=g
country_code=FR

# AC
ieee80211d=1
channel=6
macaddr_acl=0

# Wi-Fi authentication required
auth_algs=1

# Beacon interval in kus (1.024 ms)
beacon_int=100

# DTIM (delivery trafic information message) 
dtim_period=2

# Maximum number of stations allowed in station table
max_num_sta=255

# Fragmentation threshold; 2346 = disabled (default)
fragm_threshold=-1

logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2i

wpa=2
wpa_passphrase=wifipassword
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

4) Launch hostapd

hostapd -B /etc/hostapd.conf
Configuration file: /etc/hostapd.conf
[  855.225833] mwifiex_pcie 0000:01:00.0: CMD_RESP: cmd 0xf7 error, result=0x2
mlan0: interface state UNINITIALIZED->COUNTRY_UPDATE

Next I have a dump of firmware :

[  847.848390] mwifiex_pcie 0000:01:00.0: mwifiex_cmd_timeout_func: Timeout cmd id = 0xb0, act = 0x1
[  847.857885] mwifiex_pcie 0000:01:00.0: num_data_h2c_failure = 0
[  847.863914] mwifiex_pcie 0000:01:00.0: num_cmd_h2c_failure = 0
[  847.869835] mwifiex_pcie 0000:01:00.0: is_cmd_timedout = 1
[  847.875406] mwifiex_pcie 0000:01:00.0: num_tx_timeout = 0
[  847.880887] mwifiex_pcie 0000:01:00.0: last_cmd_index = 3
[  847.886344] mwifiex_pcie 0000:01:00.0: last_cmd_id: 0c 01 1e 00 20 00 b0 00 0c 01
[  847.893860] mwifiex_pcie 0000:01:00.0: last_cmd_act: 01 00 00 00 08 00 01 00 01 00
[  847.901458] mwifiex_pcie 0000:01:00.0: last_cmd_resp_index = 2
[  847.907320] mwifiex_pcie 0000:01:00.0: last_cmd_resp_id: 0c 81 1e 80 20 80 1e 80 0c 81
[  847.915266] mwifiex_pcie 0000:01:00.0: last_event_index = 4
[  847.920868] mwifiex_pcie 0000:01:00.0: last_event: 58 00 0b 00 0a 00 0b 00 0a 00
[  847.928292] mwifiex_pcie 0000:01:00.0: data_sent=0 cmd_sent=1
[  847.934066] mwifiex_pcie 0000:01:00.0: ps_mode=1 ps_state=0
[  847.942382] mwifiex_pcie 0000:01:00.0: ===mwifiex driverinfo dump start===
[  847.949646] mwifiex_pcie 0000:01:00.0: info: MWIFIEX VERSION: mwifiex 1.0 (16.68.1.p179) 
[  847.957861] mwifiex_pcie 0000:01:00.0: PCIE register dump start
[  847.963863] mwifiex_pcie 0000:01:00.0: pcie scratch register:
[  847.969757] mwifiex_pcie 0000:01:00.0: reg:0xcf0, value=0xfedcba00
[  847.969757] reg:0xcf8, value=0x12f00fc
[  847.969757] reg:0xcfc, value=0x19b9c07
[  847.969757] 
[  847.984976] mwifiex_pcie 0000:01:00.0: PCIE register dump end
[  847.990935] mwifiex_pcie 0000:01:00.0: ===mwifiex driverinfo dump end===
[  847.997659] mwifiex_pcie 0000:01:00.0: == mwifiex firmware dump start ==
[  849.768341] mwifiex_pcie 0000:01:00.0: cmd_wait_q terminated: -110
[  849.775003] mwifiex_pcie 0000:01:00.0: deleting the crypto keys
[  849.781719] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  849.788861] mwifiex_pcie 0000:01:00.0: deleting the crypto keys
[  849.795435] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  849.801870] mwifiex_pcie 0000:01:00.0: deleting the crypto keys
[  849.808277] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  849.814650] mwifiex_pcie 0000:01:00.0: deleting the crypto keys
[  849.857862] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  849.864329] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  849.870829] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  849.877206] mwifiex_pcie 0000:01:00.0: 11D: failed to enable 11D
[  849.883378] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  849.889816] mwifiex_pcie 0000:01:00.0: Failed to set AP configuration
[  849.896419] mwifiex_pcie 0000:01:00.0: Failed to start AP
[  849.902571] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  849.909010] mwifiex_pcie 0000:01:00.0: deleting the crypto keys
[  849.915294] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  849.921777] mwifiex_pcie 0000:01:00.0: deleting the crypto keys
[  849.928127] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  849.934501] mwifiex_pcie 0000:01:00.0: deleting the crypto keys
[  849.941019] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  849.947459] mwifiex_pcie 0000:01:00.0: deleting the crypto keys
[  849.999480] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  850.039425] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  850.045877] mwifiex_pcie 0000:01:00.0: mlan0: changing to 2 not supported
[  850.054252] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  850.061013] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  850.067634] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  850.074322] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  850.088987] mwifiex_pcie 0000:01:00.0: mlan0: changing to 2 not supported
[  850.096716] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  850.103094] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  850.109793] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state
[  850.116133] mwifiex_pcie 0000:01:00.0: PREP_CMD: FW is in bad state

Does anyone have any idea what could be causing this ? And how to fix it ? I've searched on many topics but I couldn't find something to resolve this.

Thank you for your time


Solution

  • If someone had the same issue, here the solution :

    1) Load wifi module

    modprobe mwifiex_pcie
    

    2) Set interfaces
    To create a access point with the mwifiex_pcie driver, we need to add another interface : uap0

    iw dev mlan0 interface add uap0 type __ap
    

    We should have : lo, mlan0 and uap0 with $ifconfig

    3) Then, configure your interfaces file and hostapd.conf file with the interface uap0

    Links used to resolve this :
    - http://linuxwireless.sipsolutions.net/en/users/Drivers/mwifiex/__v9.html