Connecting to the Internet over USB WiFi Print

 

This application note shows how to implement a USB WiFi secure client with the i.MX RT1170 running Linux. The functionality described below is available from the rootfs.uImage project provided by Emcraft for NXP i.MX RT1170 EVK board.

Emcraft tested the functionality documented below using the ComFast CF-WU815N adapter (based on the RT5370 chipset). If you are using some different USB WiFi dongle, then it may require enabling/porting/implementing the appropriate device drivers in the Linux kernel.

Disconnect Ethernet cable, and disable the eth0 interface:

/ # ifconfig eth0 down

Plug-in the USB WiFi device to the USB OTG port (USB1 or USB2 interface connector on the NXP i.MX RT1170 EVK board). The system will print the following to the console:

ci_hdrc ci_hdrc.0: EHCI Host Controller
ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
usb 1-1: new high-speed USB device number 2 using ci_hdrc
usb 1-1: reset high-speed USB device number 2 using ci_hdrc
ieee80211 phy0: rt2x00_set_rt: Info - RT chipset 3070, rev 0201 detected
ieee80211 phy0: rt2x00_set_rf: Info - RF chipset 0005 detected

Start wpa_supplicant to be able to connect to WiFi access points:

/ # wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -B
Successfully initialized wpa_supplicant
ieee80211 phy0: rt2x00lib_request_firmware: Info - Loading firmware file
'rt2870.bin'
ieee80211 phy0: rt2x00lib_request_firmware: Info - Firmware detected -
version: 0.29

Scan for available WiFi access points:

/ # wpa_cli scan
Selected interface 'wlan0'
OK
/ # wpa_cli scan_results
Selected interface 'wlan0'
bssid / frequency / signal level / flags / ssid
34:60:f9:28:2e:61 2447 -29 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] DACHA2020_EXT
74:4d:28:e4:59:c4 2447 -47 [WPA2-PSK-CCMP][ESS] DACHA2020

Connect to the access point of your choice. Let's use DACHA2020 in our example. Create a new wireless network:

/ # wpa_cli add_network
Selected interface 'wlan0'
1

The number reported in the command above (1) is the identifier that must be used in the commands below. Configure the wireless network specifying the access point name and the password:

/ # wpa_cli set_network 1 ssid '"DACHA2020"'
Selected interface 'wlan0'
OK
/ # wpa_cli set_network 1 psk '"change-me"'
Selected interface 'wlan0'
OK

Start the wireless network, obtain its status:

/ # wpa_cli enable_network 1 Selected interface 'wlan0' wlan0: authenticate with 74:4d:28:e4:59:c4 OK wlan0: send auth to 74:4d:28:e4:59:c4 (try 1/3) wlan0: authenticated wlan0: associate with 74:4d:28:e4:59:c4 (try 1/3) wlan0: RX AssocResp from 74:4d:28:e4:59:c4 (capab=0x431 status=0 aid=1) wlan0: associated / # wpa_cli status Selected interface 'wlan0' bssid=74:4d:28:e4:59:c4 ssid=DACHA2020 id=1 mode=station pairwise_cipher=CCMP group_cipher=CCMP key_mgmt=WPA2-PSK wpa_state=COMPLETED address=00:26:5a:11:ca:73 / # ifconfig wlan0 wlan0 Link encap:Ethernet HWaddr 00:26:5A:11:CA:73 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:457 errors:0 dropped:245 overruns:0 frame:0 TX packets:4 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:92797 (90.6 KiB) TX bytes:554 (554.0 B)

Configure the wireless networking using the access point DHCP server:

/ # udhcpc -i wlan0 / # ifconfig wlan0 wlan0 Link encap:Ethernet HWaddr 00:26:5A:11:CA:73 inet addr:192.168.88.56 Bcast:192.168.88.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:701 errors:0 dropped:363 overruns:0 frame:0 TX packets:9 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:129980 (126.9 KiB) TX bytes:1492 (1.4 KiB) / # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default router.lan 0.0.0.0 UG 0 0 0 wlan0 192.168.88.0 * 255.255.255.0 U 0 0 0 wlan0

Validate the Internet connectivity:

/ # ping google.com -c 3 PING google.com (216.58.210.174): 56 data bytes 64 bytes from 216.58.210.174: seq=0 ttl=110 time=53.367 ms 64 bytes from 216.58.210.174: seq=1 ttl=110 time=51.246 ms 64 bytes from 216.58.210.174: seq=2 ttl=110 time=59.272 ms --- google.com ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 51.246/54.628/59.272 ms

The access point parameters are specified in the /etc/wpa_supplicant.conf file. In this case the connection will be established automatically, and the procedure will look like this:

usb 1-1: new high-speed USB device number 2 using ci_hdrc usb 1-1: reset high-speed USB device number 2 using ci_hdrc ieee80211 phy0: rt2x00_set_rt: Info - RT chipset 5390, rev 0502 detected ieee80211 phy0: rt2x00_set_rf: Info - RF chipset 5370 detected ieee80211 phy0: Selected rate control algorithm 'minstrel_ht' / # ifconfig eth0 down / # vi /etc/wpa_supplicant.conf / # wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -B usb 1-1: new full-speed USB device number 3 using ci_hdrc usb 1-1: not running at top speed; connect to a high speed hub usb 1-1: reset full-speed USB device number 3 using ci_hdrc ieee80211 phy1: rt2x00_set_rt: Info - RT chipset 3070, rev 0201 detected ieee80211 phy1: rt2x00_set_rf: Info - RF chipset 0005 detected ieee80211 phy1: rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin' ieee80211 phy1: rt2x00lib_request_firmware: Info - Firmware detected - version: 0.29 wlan0: authenticate with 74:4d:28:e4:59:c4 wlan0: send auth to 74:4d:28:e4:59:c4 (try 1/3) wlan0: authenticated wlan0: associate with 74:4d:28:e4:59:c4 (try 1/3) wlan0: RX AssocResp from 74:4d:28:e4:59:c4 (capab=0x431 status=0 aid=1) wlan0: associated / # udhcpc -i wlan0 / # ping google.com -c 3 PING google.com (216.58.210.174): 56 data bytes 64 bytes from 216.58.210.174: seq=0 ttl=110 time=45.317 ms 64 bytes from 216.58.210.174: seq=1 ttl=110 time=77.190 ms 64 bytes from 216.58.210.174: seq=2 ttl=110 time=61.190 ms --- google.com ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 45.317/61.232/77.190 ms

You may edit the wpa_supplicant.conf file right in the device console. Please note however that this file is located in the initramfs, so to preserve changes over reboots you should: