VyOS で作ったルータに 無線 AP 機能を追加してみる :その2

んでもって、順調に試行錯誤しておりました。

果たして、うまくいくんでしょうか…。
#まずは、 VyOS のビルド環境を作るところ始めにゃいかん。

[From VyOS で作ったルータに 無線 AP 機能を追加してみる :その1 - Soukaku's HENA-CHOKO Blog]

とりあえず、ビルド用に準備した仮想マシンの設定(一部)

まずは、環境を整えるところから

いきなり実機でやるのも怖いので、 VirutlBox に "Other Linux(32bit)" な仮想マシンを作成して、そこに VyOS をインストールして、

で、ドライバのソースコードが手に入るとしても、それをコンパイルできる環境がないとダメなわけですが、 VyOS 上で make する分にしても、いきなり実機でやるのも怖いので、 VirutlBox に "Other Linux(32bit)" な仮想マシンを作成して、そこに VyOS をインストール。(勿論最低限のネットワークの設定と ssh の有効化をしたうえで、パッケージの設定として

configure
set system package repository squeeze components main
set system package repository squeeze distribution squeeze
set system package repository squeeze url http://cdn.debian.or.jp/debian
commit
save

を追加。あとは、普通にDebian のように make やら gcc をインストールしてあげれば、準備は OK。

$ sudo aptitude install make gcc
The following NEW packages will be installed:
  binutils{a} cpp{a} cpp-4.4{a} gcc gcc-4.4{a} libgomp1{a} libmpfr4{a} make
The following packages are RECOMMENDED but will NOT be installed:
  libc6-dev
0 packages upgraded, 8 newly installed, 0 to remove and 11 not upgraded.
Need to get 11.0 MB of archives. After unpacking 26.7 MB will be used.
Do you want to continue? [Y/n/?]

とりあえず、コレでソースからビルドすることは出来るようになった。
だがしかし、これでソースからドライバがビルで出来るかというと

$ make
make ARCH=i386 CROSS_COMPILE= -C /lib/modules/3.13.11-1-586-vyos/build M=/home/soukaku/RTL8192EU_linux_v4.3.1_10675.20140303/driver/rtl8192EU_linux_v4.3.1_10675.20140303  modules
make: *** /lib/modules/3.13.11-1-586-vyos/build: No such file or directory.  Stop.
make: *** [modules] Error 2

というエラーが出て、 make が通らない…。


エラーメッセージにある通りチェックをしてみると、確かに必要なファイルが格納されていると思われるディレクトリがない!

$ ls -l /lib/modules/3.13.11-1-586-vyos/
total 1933
drwxr-xr-x 9 root root    128 Mar 25 09:35 kernel
-rw-r--r-- 1 root root 610372 Mar 25 09:37 modules.alias
-rw-r--r-- 1 root root 579925 Mar 25 09:37 modules.alias.bin
-rw-r--r-- 1 root root 132579 Mar 25 09:37 modules.dep
-rw-r--r-- 1 root root 211628 Mar 25 09:37 modules.dep.bin
-rw-r--r-- 1 root root    264 Mar 25 09:37 modules.devname
-rw-r--r-- 1 root root    162 Mar 25 09:37 modules.softdep
-rw-r--r-- 1 root root 195240 Mar 25 09:37 modules.symbols
-rw-r--r-- 1 root root 246507 Mar 25 09:37 modules.symbols.bin

ソースコードかヘッダファイルを手に入れればなんとか行けるんだろうなぁ、という感触はあったので、

と、呟いてみたところ、いつくかのやり取りを経て、以下の様なアドバイスを頂いた。

で、もって早速インストール。

$ sudo su -
# aptitude install linux-vyatta-kbuild
The following NEW packages will be installed:
  linux-vyatta-kbuild
0 packages upgraded, 1 newly installed, 0 to remove and 11 not upgraded.
Need to get 98.8 MB of archives. After unpacking 375 MB will be used.
Need to get 98.8 MB of archives. After unpacking 375 MB will be used.
Get:1 http://packages.vyos.net/vyos/ helium/main linux-vyatta-kbuild i386 3.13.11-1+vyos1+helium8 [98.8 MB]
Fetched 98.8 MB in 7min 11s (229 kB/s)
Selecting previously deselected package linux-vyatta-kbuild.
(Reading database ... 39304 files and directories currently installed.)
Unpacking linux-vyatta-kbuild (from .../linux-vyatta-kbuild_3.13.11-1+vyos1+helium8_i386.deb) ...
Setting up linux-vyatta-kbuild (3.13.11-1+vyos1+helium8) ...

実は、これだけではビルドが出来ないので、

# cd /lib/modules/3.13.11-1-586-vyos/
# ln -s /usr/src/linux-images/debian/build/build-i386-none-586-vyos build
# ls -l
total 1933
lrwxrwxrwx 1 root root     58 May  8 23:28 build -> /usr/src/linux-images/debian/build/build-i386-none-586-vyos
drwxr-xr-x 9 root root    128 Mar 25 09:35 kernel
-rw-r--r-- 1 root root 610372 Mar 25 09:37 modules.alias
-rw-r--r-- 1 root root 579925 Mar 25 09:37 modules.alias.bin
-rw-r--r-- 1 root root 132579 Mar 25 09:37 modules.dep
-rw-r--r-- 1 root root 211628 Mar 25 09:37 modules.dep.bin
-rw-r--r-- 1 root root    264 Mar 25 09:37 modules.devname
-rw-r--r-- 1 root root    162 Mar 25 09:37 modules.softdep
-rw-r--r-- 1 root root 195240 Mar 25 09:37 modules.symbols
-rw-r--r-- 1 root root 246507 Mar 25 09:37 modules.symbols.bin

とシンボリックリンクを作ってやっと、準備完了、と。

では、ビルドしてみましょ!

と前置きが長くなりましたが、まずは GW-300S 用に Planex が用意しているソースをビルド。
サイトからドライバのアーカイブをダウンロードしたら、ビルド用に用意した仮想マシン上の VyOS に転送します。

転送先で、ZIP形式のアーカイブファイルを解凍。

vyos@vyos:~$ unzip RTL8192EU_linux_v4.3.1_10675.20140303.zip
Archive:  RTL8192EU_linux_v4.3.1_10675.20140303.zip
----- snip ----- snip -----
  inflating: RTL8192EU_linux_v4.3.1_10675.20140303/wpa_supplicant_hostapd/wpa_supplicant_8_kk_4.4_rtw_r10450.20140220.tar.gz
  inflating: RTL8192EU_linux_v4.3.1_10675.20140303/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gz

で、解凍して展開されたディレクトリに移動して

vyos@vyos:~$ cd RTL8192EU_linux_v4.3.1_10675.20140303/
vyos@vyos:~/RTL8192EU_linux_v4.3.1_10675.20140303$ sudo chmod 755 install.sh
vyos@vyos:~/RTL8192EU_linux_v4.3.1_10675.20140303$ ls -l
total 88
-rw-r--r-- 1 vyos users 21751 May  8 23:50 ReleaseNotes.pdf
drwxrwxrwx 2 vyos users  4096 May  8 01:55 WiFi_Direct_User_Interface
drwxrwxrwx 2 vyos users  4096 May  8 01:55 android_ref_codes_JB_4.1
drwxrwxrwx 2 vyos users  4096 May  8 01:55 android_ref_codes_JB_4.2
drwxrwxrwx 2 vyos users  4096 May  8 01:55 android_ref_codes_JB_4.3
drwxrwxrwx 2 vyos users  4096 May  8 01:55 android_ref_codes_KK_4.4
drwxrwxrwx 2 vyos users  4096 May  8 01:55 android_reference_codes
drwxrwxrwx 2 vyos users  4096 May  8 01:55 android_reference_codes_ICS_nl80211
drwxrwxrwx 2 vyos users  4096 May  8 01:55 document
drwxrwxrwx 3 vyos users  4096 May  8 01:59 driver
-rwxr-xr-x 1 vyos users  3106 May  8 23:50 install.sh
drwxrwxrwx 2 vyos users  4096 May  8 01:55 mp_tools
-rw-r--r-- 1 vyos users  9441 May  8 23:50 readme.txt
drwxrwxrwx 2 vyos users  4096 May  8 01:55 wireless_tools
drwxrwxrwx 2 vyos users  4096 May  8 01:55 wpa_supplicant_hostapd

"sudo ./install.sh"を実行!

vyos@vyos:~/RTL8192EU_linux_v4.3.1_10675.20140303$ sudo ./install.sh
##################################################
Realtek Wi-Fi driver Auto installation script
Novembor, 21 2011 v1.1.0
##################################################
Decompress the driver source tar ball:
	rtl8192EU_linux_v4.3.1_10675.20140303.tar.gz
rtl8192EU_linux_v4.3.1_10675.20140303/
rtl8192EU_linux_v4.3.1_10675.20140303/clean
rtl8192EU_linux_v4.3.1_10675.20140303/core/
----- snip ----- snip -----
make[1]: Leaving directory `/usr/src/linux-images/debian/build/build-i386-none-586-vyos'
##################################################
Compile make driver ok!!
##################################################
Authentication requested [root] for remove driver:
Authentication requested [root] for insert driver:

と、後はコマンド任せで OK と思っていたら、ターミナルの応答がなくなる。
仮想マシンのコンソールを見ると、無情にも "kernel panic" の文字列が…。 orz

一応、 "kernel panic" 起こしても再起動され、ちゃんと起動してきたので、改めてログイン。ドライバがちゃんと出来上がっているか確認してみると…。

vyos@vyos:~$ ls -l /lib/modules/3.13.11-1-586-vyos/kernel/drivers/net/wireless/8192eu.ko
-rw-r--r-- 1 root root 809156 May  8 13:32 /lib/modules/3.13.11-1-586-vyos/kernel/drivers/net/wireless/8192eu.ko

をぉ、ちゃんと出来上がって、然るべきところに配置されている〜。

仮想マシンに対してGW-300Sを有効化

ドライバがロードされるかを確認するために、VrtualBox を動かしている Mac のUSB ポート に GW-300S を刺してみると…。


[  756.990220] usb 1-1: new high-speed USB device number 3 using ehci-pci
[  757.233575] usb 1-1: New USB device found, idVendor=2019, idProduct=ab33
[  757.233581] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  757.233596] usb 1-1: Product: GW-300S KATANA
[  757.233600] usb 1-1: Manufacturer: Planex Communications Inc.
[  757.233603] usb 1-1: SerialNumber: 0022CFF3845E
[  757.302109] RTL871X:
[  757.302109] usb_endpoint_descriptor(0):
[  757.302114] RTL871X: bLength=7
[  757.302116] RTL871X: bDescriptorType=5
[  757.302118] RTL871X: bEndpointAddress=84
[  757.302120] RTL871X: wMaxPacketSize=512
[  757.302121] RTL871X: bInterval=0
[  757.302123] RTL871X: RT_usb_endpoint_is_bulk_in = 4
[  757.302125] RTL871X:
[  757.302125] usb_endpoint_descriptor(1):
[  757.302128] RTL871X: bLength=7
[  757.302129] RTL871X: bDescriptorType=5
[  757.302131] RTL871X: bEndpointAddress=5
[  757.302133] RTL871X: wMaxPacketSize=512
[  757.302134] RTL871X: bInterval=0
[  757.302136] RTL871X: RT_usb_endpoint_is_bulk_out = 5
[  757.302138] RTL871X:
[  757.302138] usb_endpoint_descriptor(2):
[  757.302141] RTL871X: bLength=7
[  757.302142] RTL871X: bDescriptorType=5
[  757.302144] RTL871X: bEndpointAddress=6
[  757.302146] RTL871X: wMaxPacketSize=512
[  757.302147] RTL871X: bInterval=0
[  757.302149] RTL871X: RT_usb_endpoint_is_bulk_out = 6
[  757.302151] RTL871X:
[  757.302151] usb_endpoint_descriptor(3):
[  757.302153] RTL871X: bLength=7
[  757.302155] RTL871X: bDescriptorType=5
[  757.302157] RTL871X: bEndpointAddress=87
[  757.302159] RTL871X: wMaxPacketSize=64
[  757.302160] RTL871X: bInterval=3
[  757.302162] RTL871X: RT_usb_endpoint_is_int_in = 7, Interval = 3
[  757.302164] RTL871X:
[  757.302164] usb_endpoint_descriptor(4):
[  757.302167] RTL871X: bLength=7
[  757.302168] RTL871X: bDescriptorType=5
[  757.302170] RTL871X: bEndpointAddress=8
[  757.302172] RTL871X: wMaxPacketSize=512
[  757.302174] RTL871X: bInterval=0
[  757.302175] RTL871X: RT_usb_endpoint_is_bulk_out = 8
[  757.302178] RTL871X: nr_endpoint=5, in_num=2, out_num=3
[  757.302178]
[  757.302180] RTL871X: USB_SPEED_HIGH
[  757.315689] RTL871X: CHIP TYPE: RTL8192E
[  757.315724] RTL871X: register rtw_netdev_ops to netdev_ops
[  757.320369] RTL871X: ReadChipVersion192e 0xF0 = 0xc441135
[  757.320377] RTL871X: Chip Version Info: CHIP_8192E_Normal_Chip_SMIC_B_CUT_2T2R_RomVer(0)
[  757.320379] RTL871X: RF_Type is 2!!
[  757.320383] RTL871X: _ConfigChipOutEP_8192E OutEpQueueSel(0x07), OutEpNumber(3)
[  757.320385] RTL871X: ====> ReadAdapterInfo8192EU
[  757.335962] RTL871X: Boot from EFUSE, Autoload OK !
[  762.279034] RTL871X: EEPROM ID=0x8129
[  762.279047] RTL871X: VID = 0x2019, PID = 0xAB33
[  762.279055] RTL871X: Customer ID: 0x00, SubCustomer ID: 0xCD
[  762.279065] RTL871X: hal_ReadMACAddress_8192EU MAC Address from EFUSE = 00:22:cf:f3:84:5e
[  762.279076] RTL871X: EEPROMRegulatory = 0x1 TxPwrCalibrateRate=0x0
[  762.279083] RTL871X: Board Type: Dongle or WIFI only Module
[  762.279091] RTL871X: mlmepriv.ChannelPlan = 0x20
[  762.279098] RTL871X: CrystalCap: 0x29
[  762.279105] RTL871X: ThermalMeter = 0x1a
[  762.279113] RTL871X: SWAS: bHwAntDiv = 0, TRxAntDivType = 0
[  762.279121] RTL871X: pHalData->PAType_2G is 0x0, pHalData->ExternalPA_2G = 0
[  762.279128] RTL871X: pHalData->LNAType_2G is 0x0, pHalData->ExternalLNA_2G = 0
[  762.279135] RTL871X: ReadAdapterInfo8192EU <====
[  762.332630] RTL871X: init_channel_set ChannelPlan ID 20 Chan num:13
[  762.333363] RTL871X: can't get autopm:
[  762.333376] RTL871X: rtw_macaddr_cfg MAC Address  = 00:22:cf:f3:84:5e
[  762.333380] RTL871X: bDriverStopped:1, bSurpriseRemoved:0, bup:0, hw_init_completed:0
[  762.333713] RTL871X: _rtw_drv_register_netdev, MAC Address (if1) = 00:22:cf:f3:84:5e

このように、dmesg にログが記録されていて、"show interface" や "lsmod" の結果でも "wlan0" や "8192eu" という文字列が見えるので、あとは設定をしていくだけ、となりました。

vyos@vyos:~$ show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             172.16.0.106/24                   u/u
lo               127.0.0.1/8                       u/u
                 ::1/128
wlan0            -                                 A/D
vyos@vyos:~$ lsmod | grep 8192eu
8192eu                650460  0

ところがですね…

さぁ、同じ手順で実機でもビルドすればいいんだから「楽勝だせ」と思って、実機でも同じ手順を踏んでみたのですけど、ドライバは出来上がり、所定の位置に配置もされるにもかかわらず、 GW-300S を認識してくれない。
画面に残るエラーメッセージ(下記のもの)からすると、モジュールとして認識させる処理のあたりで、失敗しているようには思えるのですけどね…。

 ----- snip ----- snip -----
make[1]: Leaving directory `/usr/src/linux-images/debian/build/build-i386-none-586-vyos'
##################################################
Compile make driver ok!!
##################################################
Authentication requested [root] for remove driver:
ERROR: Module 8192eu does not exist in /proc/modules
Authentication requested [root] for insert driver:

更に何度繰り返してもダメなので、実機でのビルドを成功させることは、一旦断念。
ダメ元で、仮想マシンでビルドしたドライバを実機側にコピー後、再起動したら認識してくれるようになりました。(何故だ…。)

ということで、次回のエントリでは、 VyOS への設定を行っていくことにします。

#流石に普段からルータとして使っているマシンの上で試行錯誤するのは、ちょっと怖いので、原因追求は別の機会に持ち越し、ということで。

トラックバック(2)

前回のエントリーで、ドライバも組み込めて認識できるようなったので ということで、... 続きを読む

ということで、先のエントリーでどれにしょうかといっていた無線 LAN アダプタ... 続きを読む

コメントする