dev.sanko
2023年3月22日 19時54分
お世話になっております。
Armadillo 640のwifi拡張モジュールであるAWL13のモード切替方法について質問がございます。
Armadillo 640のマニュアルを見たところ、APモード、STAモードの切替には'/etc/awlan/awl13.conf'を書き換えた後に再起動をするように書かれています。
再起動せずにAPモード↔STAモードを切り替えることは可能でしょうか?
コメント
dev.sanko
t_ohsawa様
ご回答ありがとうございます。
switch.shの手順を参考にモードの切替を行いましたが、上手くいきませんでした。
確認した手順は下記の通りです。
APモード→STAモードの切替
アクセスポイントへの接続確認
1)'/etc/awlan/awl13.conf'をAPモードにする。
2)'ln -srf /etc/opt/interfaces/test_ap /etc/network/interfaces'を実行。
3)再起動。
4)起動後、'systemctl restart dnsmasq.service'を実行。
5)'ifup awlan0'を実行。
6)'ifconfig awlan0 192.168.13.1 up'を実行。
7)PCからArmadillo 640にwifiで接続し、pingコマンドにて疎通確認完了。
STAモードへの切替
8)'ifconfig awlan0 192.168.13.1 down'を実行。
9)'ifdown awlan0'を実行。
10)'systemctl stop dnsmasq.service'を実行。
1 1)'/etc/awlan/awl13.conf'をSTAモードにする。
12)'ln -srf /etc/opt/interfaces/test_station /etc/network/interfaces'を実行。
13)'/etc/awlan/awl13-usb-firmware-load.sh awlan0'を実行。
14)'ifup awlan0'を実行。
15)アクセスポイントへの接続が確認できず。
ただし、15)のあとに再起動して、'ifup awlan0'を実行すれば、アクセスポイントへ接続されます。
また、STAモード→APモードの切替も試しましたが、上手くいきませんでした。
手順に誤り等はありますでしょうか。
'/etc/opt/interfaces/test_station'
# interfaces(5) file used by ifup(8) and ifdown(8) auto lo iface lo inet loopback iface eth0 inet dhcp iface awlan0 inet dhcp pre-up iwpriv awlan0 set_psk "sta_pass" pre-up iwpriv awlan0 set_cryptmode WPA2-AES pre-up iwconfig awlan0 essid "sta_ssid" wireless-mode managed
'/etc/opt/interfaces/test_ap'
# interfaces(5) file used by ifup(8) and ifdown(8) auto lo iface lo inet loopback iface eth0 inet dhcp iface awlan0 inet static address 192.137.13.1 netmask 255.255.255.0 network 192.137.13.0 broadcast 192.137.13.255 pre-up iwpriv awlan0 set_psk "ap_pass" pre-up iwpriv awlan0 set_cryptmode WPA2-AES pre-up iwconfig awlan0 essid "ap_ssid" pre-up iwconfig awlan0 channel 1 wireless-mode master
dev.sanko
お世話になっております。
iw dev
で見る限り、Masterモードのままになっているため、モード切替ができていないようです。
過去のフォーラムを見ると、AWL13の電源を切ったり、モジュールの再読み込みが必要なように見受けられます。
そのような処理を行わないと実現できないのでしょうか。
https://armadillo.atmark-techno.com/forum/armadillo/1044
それとも、Armadillo640は再起動を行わないとモードを切り替えれないようになっているのでしょうか?
以上、よろしくお願いいたします。
at_kojiro.yamada
横から失礼します。
↑ のswitch.sh の前にモジュールのリセットが必要だったと思います。
最初の段階で提示できず申し訳ありません。
ただ標準の armadillo-640_con9_awl13_rtc[VERSION].dtb では Armadillo-640 の再起動なしに AWL13 をリセットできません。
Armadillo-640で再起動を必要としている理由を簡単にあげると、以下のとおりです。
* AWL13 は起動直後は ファームウェアロード待ち状態になる
* ファームウェアロード後は ファームウェアロード機能は失われる
* Armadillo-640 では AWL13 のpower enable pin を gpio reset driver に渡しているので、ユーザーランドからはリセットできない
(このドライバーはLinuxカーネルの起動時に1度だけリセット信号のパルスを出力し、その後は何もしない)
armadillo-640_con9_awl13_rtc.dts の wlan_pwren_b_reset を消して gpio3_io25 をユーザーランド側から export して使えば、awl13 の電源をOFF->ONすることができます。
その後でファームウェアの再ロードができるようになると思います。
gpio3_io25 をユーザーランド側から export して使う場合は、gpio reset driverのかわりにユーザーランド側でGPIOを操作してリセット信号を出力する必要があります。
dev.sanko
at_ohsawa
2023年3月23日 12時53分
/etc/network/interfacesと同じ階層にap向けとsta向けに
interfaces_apとinterfaces_staを、
/etc/awlan/awl13.confについても同様に
awl13.conf_apとawl13.conf_sta
をそれぞれ用意した上で、
添付のスクリプトで./switch apのように切り替えれると思いますよ。
スクリプトの末尾にコメントで引数が入ったときの実行の仕組みが書いて
あるので読んでみてください。