前回、libnlとiwのクロスコンパイルが出来たので、iwコマンドを使った無線LAN初期化を試してみる。

【関連記事】
【組込ボードで無線LAN】②(無線LANカードN-6300を組込ボードに接続するには?)
【組込ボードで無線LAN】⑧(iwのビルド:後編-1)【組込ボードで無線LAN】⑰(QCA9377-5を挿してみた)
【組込ボードで無線LAN】㉒(backportをビルドしてみる)
【組込ボードで無線LAN】㉓(backportをビルドしてみる‐2)
  • iwを使った無線LAN管理
【組込ボードで無線LAN】⑤(BD-SABRE-LITEで無線LANの初期化をしたい)を読み直す。Linuxの無線LANについて書いてあるワイヤレス設定を読みながら進めてみる。

①ドライバーの状態について確認する
PCIブリッジとN-6300のドライバがPCIデバイスとして認識されている。
# lspci -k
00:00.0 PCI bridge: Synopsys, Inc. Device abcd (rev 01)
        Kernel driver in use: pcieport
01:00.0 Network controller: Intel Corporation Centrino Ultimate-N 6300 (rev 35)
        Subsystem: Intel Corporation Centrino Ultimate-N 6300 3x3 AGN
        Kernel driver in use: iwlwifi
        Kernel modules: iwlwifi
②ip linkと打ち込み無線LANインタフェース(例えばwlan0)が生成されているか見る
wlan0が出来ている。
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: can0: <NOARP40000> mtu 16 qdisc noop qlen 10
    link/[280]
3: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether xx:xx:xx:xx:xx:xxbrd ff:ff:ff:ff:ff:ff
4: sit0@NONE: <NOARP> mtu 1480 qdisc noop
    link/sit 0.0.0.0 brd 0.0.0.0
5: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
③念のためFirmwareがロードされているか確認する
iwlwifi(ver 9.221.4.1 build 25532 )が動作モード(op_mode)iwldvmで起動している。
# dmesg | grep firmware
imx-sdma 20ec000.sdma: loaded firmware 3.1
usbserial: USB Serial support registered for Keyspan - (without firmware)
egalax_ts 2-0004: Failed to read firmware version
ili210x_i2c 2-0041: Failed to get firmware version, err: -5
iwlwifi 0000:01:00.0: loaded firmware version 9.221.4.1 build 25532 op_mode iwldvm
さらにiwlwifiの情報を得るにはこんな感じ。
# dmesg | grep iwlwifi
iwlwifi 0000:01:00.0: loaded firmware version 9.221.4.1 build 25532 op_mode iwldvm
iwlwifi 0000:01:00.0: CONFIG_IWLWIFI_DEBUG disabled
iwlwifi 0000:01:00.0: CONFIG_IWLWIFI_DEBUGFS disabled
iwlwifi 0000:01:00.0: CONFIG_IWLWIFI_DEVICE_TRACING disabled
iwlwifi 0000:01:00.0: Detected Intel(R) Centrino(R) Ultimate-N 6300 AGN, REV=0x74
iwlwifi 0000:01:00.0: L1 Disabled - LTR Disabled
さて、危うくスルーするとこだったが動作モードのiwldvmとは何だろう。iwldvmでGoogle検索したらiwlwifiがヒットした。iwlwifi(Intelの無線LANドライバ)について詳しく解説されている。

で、iwldvmだが、どうもIntelの無線LANファームはIntel Wireless WiFi DVM Firmware supportIntel Wireless WiFi MVM Firmware supportという2つの種類があるみたい。Linux WirelessのIntel無線LANファームウェアのリストを見るとチップ型番によりDVM、MVMが決まってる様子。で、DVMが何なのかはよく分からなかった。

1


ここまでは【組込ボードで無線LAN】⑤(BD-SABRE-LITEで無線LANの初期化をしたい)で既に出来ていた。いよいよ無線LANとしての動作を確認する。

  • N-6300を無線LAN子機(STA)として動作させてみる
さらにワイヤレス設定を読み進める。ヒントにもある通りまずは手動で接続を試行すべきとのこと。自宅の無線LAN親機(AP)はWPAなのでiwとwpa_supplicantが必要みたい。

1

①無線LANインタフェースの名前を調べる
すでにip linkでも確認していたが、iwで改めて確認。wlan0として認識されている。
# ./iw dev
phy#0
        Interface wlan0
                ifindex 5
                wdev 0x1
                addr 3c:a9:f4:8b:fe:d0
                type managed
②リンクの状態を確認する
未接続だ。
# ./iw dev wlan0 link
Not connected.
③インタフェース有効化(通常は不要らしいが…)
なんかエラー出た。
# ip link set wlan0 up
ip: SIOCSIFFLAGS: Operation not possible due to RF-kill
どうも典型的な現象らしい。
1

#Rfkillによるブロックを読み、rfkill listを実行。Soft blocked: yes、Hard blocked: noなので物理的にOFFされているわけではなく、ソフト(カーネル)でブロックされているだけみたい。
# rfkill list
0: phy0: wlan
        Soft blocked: yes
        Hard blocked: no
ソフトブロックを解除するには、こうするらしい。
# rfkill unblock wifi
再びrfkill listを実行したところ、ソフトブロックが解除されていた。
# rfkill list
0: phy0: wlan
        Soft blocked: no
        Hard blocked: no
④再びインタフェース有効化
ワオワオ。今度は動いた。
# ip link set wlan0 up
iwlwifi 0000:01:00.0: L1 Disabled - LTR Disabled
iwlwifi 0000:01:00.0: Radio type=0x0-0x3-0x1
iwlwifi 0000:01:00.0: L1 Disabled - LTR Disabled
iwlwifi 0000:01:00.0: Radio type=0x0-0x3-0x1
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
④インタフェースが立ち上がってるか確認
UPされている。
# ip link show wlan0
5: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
⑤無線LAN親機(AP)をスキャンする
APが見つかった。(MACアドレスとかSSIDは一部マスクした)
./iw dev wlan0 scan
SS xx:xx:xx:xx:xx:xx(on wlan0)
        TSF: 6365888411648 usec (73d, 16:18:08)
        freq: 5200
        beacon interval: 100 TUs
        capability: ESS Privacy SpectrumMgmt (0x0111)
        signal: -60.00 dBm
        last seen: 0 ms ago
        Information elements from Probe Response frame:
        SSID: W04_xxxxxxxxxxxx_5G
        Supported rates: 6.0* 9.0 12.0* 18.0 24.0* 36.0 48.0 54.0
        DS Parameter set: channel 40
        HT capabilities:
                Capabilities: 0x6e
                        HT20/HT40
                        SM Power Save disabled
                        RX HT20 SGI
                        RX HT40 SGI
                        No RX STBC
                        Max AMSDU length: 3839 bytes
                        No DSSS/CCK HT40
                Maximum RX AMPDU length 32767 bytes (exponent: 0x002)
                Minimum RX AMPDU time spacing: 4 usec (0x05)
                HT RX MCS rate indexes supported: 0-7, 32
                HT TX MCS rate indexes are undefined
        HT operation:
                 * primary channel: 40
                 * secondary channel offset: below
                 * STA channel width: any
                 * RIFS: 0
                 * HT protection: no
                 * non-GF present: 1
                 * OBSS non-GF present: 0
                 * dual beacon: 0
                 * dual CTS protection: 0
                 * STBC beacon: 0
                 * L-SIG TXOP Prot: 0
                 * PCO active: 0
                 * PCO phase: 0
        WPA:     * Version: 1
                 * Group cipher: TKIP
                 * Pairwise ciphers: TKIP CCMP
                 * Authentication suites: PSK

        RSN:     * Version: 1
                 * Group cipher: TKIP
                 * Pairwise ciphers: TKIP CCMP
                 * Authentication suites: PSK
                 * Capabilities: 1-PTKSA-RC 1-GTKSA-RC (0x0000)
        WMM:     * Parameter version 1
                 * BE: CW 15-1023, AIFSN 3
                 * BK: CW 15-1023, AIFSN 7
                 * VI: CW 7-15, AIFSN 2, TXOP 3008 usec
                 * VO: CW 3-7, AIFSN 2, TXOP 1504 usec
        BSS Load:
                 * station count: 1
                 * channel utilisation: 3/255
                 * available admission capacity: 31250 [*32us]
        VHT capabilities:
                VHT Capabilities (0x31c00020):
                        Max MPDU length: 3895
                        Supported Channel Width: neither 160 nor 80+80
                        short GI (80 MHz)
                        +HTC-VHT
                        RX antenna pattern consistency
                        TX antenna pattern consistency
                VHT RX MCS set:
                        1 streams: MCS 0-9
                        2 streams: not supported
                        3 streams: not supported
                        4 streams: not supported
                        5 streams: not supported
                        6 streams: not supported
                        7 streams: not supported
                        8 streams: not supported
                VHT RX highest supported: 292 Mbps
                VHT TX MCS set:
                        1 streams: MCS 0-9
                        2 streams: not supported
                        3 streams: not supported
                        4 streams: not supported
                        5 streams: not supported
                        6 streams: not supported
                        7 streams: not supported
                        8 streams: not supported
                VHT TX highest supported: 292 Mbps
        VHT operation:
                 * channel width: 1 (80 MHz)
                 * center freq segment 1: 42
                 * center freq segment 2: 0
                 * VHT basic MCS set: 0xfffe
⑥無線LAN(親機)に繋ぐためのwpa_supplicant設定

iwを使ってWPAの無線LAN(親機)に繋ぐには、wpa_supplicantを使う必要がある。wpa_supplicantの設定ファイルを開いたところ、最初はなにも設定されていない。
# vi /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1

network={
        key_mgmt=NONE
}
Linuxでwpa_supplicantを使ってWPA2の無線LANに接続する方法を読み、自宅の無線LAN(親機)のSSIDとパスフレーズ(psk)を指定。
# vi /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
    ssid="W04_xxxxxxxxxxxx_5G"
    key_mgmt=WPA-PSK
    proto=WPA WPA2
    pairwise=CCMP TKIP
    group=CCMP TKIP WEP104 WEP40
    psk="xxxxxxxxxxxx"
}
⑦wpa_supplicantを起動
成功したみたい。
#  wpa_supplicant -D nl80211,wext -i wlan0 -c /etc/wpa_supplicant.conf
Successfully initialized wpa_supplicant
wlan0: SME: Trying to authenticatwlan0: authenticate with xx:xx:xx:xx:xx:xx
e with xx:xx:xx:xx:xx:xx (SSID='W04_xxxxxxxxxxxx_5G' freq=5200 MHz)
wlan0: send auth to xx:xx:xx:xx:xx:xx (try 1/3)
wlan0: authenticated
wlan0: Trying to associate with xx:xx:xx:xx:xxxxfe (SSID='W04_xxxxxxxxxxxx_5G' freq=5200 MHz)
wlan0: associate with xx:xx:xx:xx:xx:xx(try 1/3)
wlan0: RX AssocResp from xx:xx:xx:xx:xx:xx(capab=0x111 status=0 aid=1)
IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
wlan0: associated
wlan0: Associated with xx:xx:xx:xx:xx:xx
wlan0: WPA: Key negotiation completed with xx:xx:xx:xx:xx:xx[PTK=CCMP GTK=TKIP]
wlan0: CTRL-EVENT-CONNECTED - Connection to xx:xx:xx:xx:xx:xxcompleted [id=0 id_str=]
Ctrl+Cで抜けたら、リンクが切れた。
wlan0: deauthenticating from xx:xx:xx:xx:xx:xx by local choice (reason=3)
cfg80211: Calling CRDA to update world regulatory domain
wlan0: CTRL-EVENT-DISCONNECTED bssid=xx:xx:xx:xx:xx:xxreason=3 locally_generated=1
wlan0: CTRL-EVENT-TERMINATING
&を付けてバックグラウンド起動しなければ。
#  wpa_supplicant -D nl80211,wext -i wlan0 -c /etc/wpa_supplicant.conf &
(省略)
⑧再びリンク状態を取得
繋がった。
# ./iw dev wlan0 link
Connected to ac:84:c6:cc:31:fe (on wlan0)
        SSID: W04_xxxxxxxxxxxx_5G
        freq: 5200
        RX: 45180 bytes (367 packets)
        TX: 533 bytes (5 packets)
        signal: -61 dBm
        rx bitrate: 24.0 MBit/s
        tx bitrate: 6.0 MBit/s

        bss flags:      short-slot-time
        dtim period:    0
        beacon int:     100
⑨IPアドレスを振る
自宅の無線LAN親機(AP)はDHCPサーバだが、組込Linuxボードにdhcpが入ってないので静的IPを設定した。うちのセグメントは192.168.100.xなのでこんな感じ。
# ip addr add 192.168.100.222/24 dev wlan0
# ip route add default via 192.168.100.1
⑩IPアドレスを確認する
IPアドレスは無事振れた様子。

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: can0: <NOARP40000> mtu 16 qdisc noop qlen 10
    link/[280]
3: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether xx:xx:xx:xx:xx:xxbrd ff:ff:ff:ff:ff:ff
4: sit0@NONE: <NOARP> mtu 1480 qdisc noop
    link/sit 0.0.0.0 brd 0.0.0.0
5: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.222/24 scope global wlan0
       valid_lft forever preferred_lft forever
    inet6 xxxx:xxx:xxxx:xxx:xxxx:xxxx:xxxx:xxxx/64 scope global dynamic
       valid_lft 7004sec preferred_lft 3404sec
    inet6 xxxx::xxxx:xxxx:xxxx:xxxx/64 scope link
       valid_lft forever preferred_lft forever

⑪無線LAN親機(AP)にPINGを打ってみる
無線LAN親機(AP)のIPアドレス(192.168.100.1)に対してPINGが通った。
# ping 192.168.100.1
PING 192.168.100.1 (192.168.100.1): 56 data bytes
64 bytes from 192.168.100.1: seq=0 ttl=64 time=17.649 ms
64 bytes from 192.168.100.1: seq=1 ttl=64 time=37.288 ms
64 bytes from 192.168.100.1: seq=2 ttl=64 time=10.136 ms
64 bytes from 192.168.100.1: seq=3 ttl=64 time=29.372 ms
(以下略)

⑫無線LAN親機(AP)から切断
リンク断した。
# ip link set wlan0 down
wlan0: deauthenticating from xx:xx:xx:xx:xx:xx by local choice (reason=3)
wlan0: CTRL-EVENT-DISCONNECTED bssid=xx:xx:xx:xx:xx:xx reason=3 locally_generated=1
cfg80211: Calling CRDA to update world regulatory domain
wpa_supplicantのプロセスIDを調べて。
♯ ps | grep wpa_supplicant
  806 root      6364 S    wpa_supplicant -D nl80211,wext -i wlan0 -c /etc/wpa_
  822 root      2660 S    grep wpa_supplicant
killした。
# kill -9 806

次回はN-6300を無線LAN親機(AP)にしてみよう。

続く

IMG_20190921_080700


スポンサードリンク