昨年記事化したPi Zero WじゃないPi Zero rev1.3を5GHz無線LAN対応にしてみました・・・の2017年版です。
最新のRASPBIAN STRETCH LITEに対応しています。
2017年度版と言いつつ、昨年のカーネルフルコンパイルする手法から、必要なモジュールをコンパイルする手法(前回記事のPi2/3で行った方法を踏襲)へ変更し、Pi Zeroでも圧倒的に作業時間短縮されました!(一日仕事だったのが1~2時間くらいで済む様になりました)
Pi Zeroしか持ってない人は前回記事との差分読み比べなんてしたくないでしょうから、Pi Zero用として改めてほぼ同内容を記述しています。(て、手抜きって言わないでw)
なので、前回のPi2/3用を読んだ方には目新しい所はありません。悪しからず。m(__)m
ご参考その1:2016年版のRASPBIAN JESSIE LITE対応版はコチラ↓
ご参考その2:前回記事のPi2/3の記事(RASPBIAN STRETCH LITE版です)はコチラ↓
対象環境
対象ハードウェア: Pi Zeroシリーズ
前回記事ではARMv7コアのPi2/3向けでしたが、今回はARMv6コアのPi Zeroシリーズに向けています。
今回はカメラI/F付きのPi Zero rev1.3を使いました。
試してはいませんが、同一コアのPi Zero Wでも使えると思います。 もっとも、Pi Zero Wは元からWiFi載っているのであまり意味はないかもしれませんが。。
Amazonのマーケットプレイスでも出品されているのですが、非常に割高な値付けになってるので、個人的にはあまりおススメしません。
日本国内だとコチラ↓のスイッチサイエンスさんあたりが安心ですかね。 もっとも大人気商品なのか大抵在庫無いんですけどね。(;^ω^)
Pi Zero rev1.3(旧モデルでWiFi/BT無し)
Pi Zero W(最新モデルで2.4GHz帯WiFi&BT付き)
どうしても割安でという事なら、海外通販になりますがPayPalも使えるPimoroniあたりがおススメです。 私はいつもPimoroniで買ってますが、一番安い発送方法でも1~2週間で手元に届きます。
Pi Zero rev1.3(旧モデルでWiFi/BT無し)
Pi Zero W(最新モデルで2.4GHz帯WiFi&BT付き)
5GHz WiFiな無線LANドングルはお馴染みの11ac対応GW-450D2です。(旧版のGW-450Dでも動きました)
microSDカードは信頼?の東芝製 8GBです。
なぜ8GBかは・・・前回記事でも触れましたが、イメージバックアップする時に小さい容量の方が良いという考えからです。
有線LAN USBアダプタ
物ぐさ太郎として、今回もキーボード・モニタレスでセットアップする関係上、最初は有線LANベースで作業を行います。
Pi Zeroで遊ぶなら有線LANアダプタくらい持っておいても損はないと思いますので、紹介しておきますね。
ちなみに、USB HUBタイプなら、作業途中で無線LAN USBアダプタが正しく動いているかを差し替えずに一緒に確認出来るので、オススメです。
私が使ってるのはコレ。USB3.0対応な上コンパクトなのでノートPCのお供にも使えるので便利です。(USB3.0対応ですが、Piで認識してくれました )
尚、有線LAN USBアダプタは、お使いのルーターのDHCP機能でMACアドレスからIP割り当てしておきましょう。
IP指定しない場合は、Pi ZeroへHDMIモニタを繋いでコマンドラインでIP取得する必要が出ますので、とても面倒です。 なので、本記事上では、IPアドレスが事前に分かっている物としています。 悪しからずご了承ください。
microUSBホスト変換ケーブル(or アダプタ)
Pi ZeroへUSBアダプタ機器を繋ぐのに必要です。
通常のホスト変換ケーブルも良いのですが、超小型のホスト変換アダプタだと、よりPi Zeroの小ささを活かせます。 凄くミニマム感が出ますので個人的にはお勧めです。
但し、この超小型ホスト変換アダプタを使うと、給電用のmicroUSBケーブルと若干干渉しますので、注意が必要です。 なので、給電用microUSBケーブルにはL型タイプを使った方が良いでしょう。 ※L型の向きに注意です!逆向きだと余計に干渉します
私が使ってるのはコチラ↓です。 30cm、91cm、1.8mと幾つかのケーブル長が選べますので、お好みに合わせてチョイスしましょう。
対象RASPBIAN: STRECTH LITE
2017年8月のメジャーバージョンアップで登場した最新RASPBIANのSTRECTH LITEを使います。
事前に公式↓からダウンロードしておいてください。
尚、9/15時点では9/7付け版が最新でした。
作業概要
基本は前回記事の踏襲ですが、一部、Pi ZeroのARMv6コア用に書き換えてあります。
大雑把な流れはこんな感じです。
- microSDカードへRASPBIAN STRETCH LITEを書き込む
- 有線LANでSSH接続して初期設定
- Linuxソースのダウンロードと関連モジュールのビルド
- ドライバソースへのパッチ当てとビルド&インストール
- 無線LANの接続設定
所用時間はPi Zeroでも2時間掛かってないと思います。(離席してたので、正確な時間は不明)
昨年記事ではカーネルのフルビルドして丸一日仕事でしたが、今回は関連モジュールのビルドだけにしてるので、かなり時間短縮できました!!(先達に感謝です!)
尚、前回同様に、物ぐさ太郎の矜持として、キーボード、モニタレスでセットアップ作業しております。
なので、事前に有線LANアダプタのIPアドレス、無線LANドングルGW-450D2のIPアドレスは把握しておく必要が有ります。 ルーターなどで、MACアドレスからIPを固定割り当てする様にしておけば問題ないでしょう。
では、作業を始めましょう。
microSDカードへRASPBIAN STRETCH LITEを書き込む
イメージファイルの書き込み
公式からダウンロードしたRASPBIANをmicroSDカードへ書き込みます。
私は、イメージ書き込みには「Win32DiskImager」というアプリを使っておりますが、使用方法が分からない場合は、コチラ↓を参考に。
SSH接続の為の事前準備
最近のRASPBIANでは、そのままだとSSH接続が使えない状態になっています。(セキュリティ対策の一環??)
コチラによると、microSDカードの/boot/直下にsshという名前で拡張子無しの空ファイルを作っておけば、RaspberryPiで起動させた際に自動的にSSH接続が有効になるみたいなので、PCから外す前にファイルを作っておきましょう。
有線LANでSSH接続して初期設定
有線LANを繋いで起動させ、PCからSSH接続する
先程イメージファイルを書き込んだmicroSDカードを対象のPi Zeroへセットし、有線LANアダプタを繋いで、有線LANも繋いで起動させます。
(写真では気が早くGW-450D2も繋いでおりますが、繋いだまま作業しても問題なしです)
事前に判明している有線LANのIPアドレスに対し、PCからTera TermなどのターミナルソフトでSSH接続します。(正しいIPアドレスで、先のSSH有効化処置を行ってあれば、ちゃんと繋がる筈です)
ターミナルソフトが分からない方は、コチラ↓を参考に。
初期設定を行う
SSH接続で初期ユーザー「pi」でログインしているものとします。
下記コマンドで初期設定を行います。
$ sudo raspi-config
下記の項目を修正してください。
[Change User Password]
「pi」ユーザーのパスワードをデフォルトのまま使うのは、セキュリティリスクとなります。
後ほど、ユーザー名を「pi」から変更する作業なども行いますが、初期工程は「pi」ユーザーで進めますので、最初にデフォルトパスワードを変更しておきましょう。
[Localisation Options] ->[Change Locale]
「en_us.UTF-8」「ja_jp.UTF8」「ja_jp.EUC-JP」を追加して、
default system localを「ja_ja.UTF8」に変更します。
[Localisation Options] ->[Change Timezone]
「Asia」→「Tokyo」を選択。
[Localisation Options] ->[Change WiFi Country]
「JP Japan」を選択。
以上の項目を修正したら、Finishを選んで再起動しましょう。
一通りアップデートを掛ける
再起動後、もう一度「pi」ユーザーでSSH接続します。(パスワード変更した場合は新しいパスワードを入れて下さい)
まずは、下記コマンドで一通りアップデートをしておきます。
$ sudo apt-get update $ sudo apt-get -y dist-upgrade $ sudo rpi-update
rebootを促されるので、一応再起動しておきましょう。
$ sudo reboot
もう一度「pi」ユーザーでSSH接続し、下記コマンドで必要なプログラムをインストールします。
$ sudo apt-get install gcc make bc screen ncurses-dev git
Lunixソースのダウンロードと関連モジュールのビルド
カーネルバージョンを確認する
下記コマンドでカーネルのバージョンを確認します。
$ uname -r
2017/09/15時点では、「4.9.50+」と返ってきました。
カーネルソースと関連モジュールを用意する
作業フォルダへ移動します。
$ cd /usr/src
カーネルソースを取得します。もし先に「uname -r」で確認したカーネルバージョンが4.9系列じゃなければ、赤字部分をバージョンに合う様に修正しましょう。
$ sudo wget https://github.com/raspberrypi/linux/archive/rpi-4.9.y.tar.gz
一緒に、モジュールチェックファイルも取得します。
$ sudo wget https://github.com/raspberrypi/firmware/raw/master/extra/Module.symvers
先程取得したカーネルソースを展開します。(赤字部分は先程のバージョンに合う様に修正しましょう)
$ sudo tar xvfz rpi-4.9.y.tar.gz
シンボリックリンクを作成します。(赤字部分は先程のバージョンに合う様に修正しましょう)
$ sudo ln -s /usr/src/linux-rpi-4.9.y/ /lib/modules/`uname -r`/build
モジュールビルド用フォルダに移動します。
$ cd /lib/modules/`uname -r`/build
makeコンフィギュレーションを初期化します。
$ sudo make mrproper
暫し待たされます・・・。
config.gzを準備します。
$ sudo modprobe configs
コンフィギュレーションを作成します。
$ sudo sh -c 'gzip -dc /proc/config.gz > .config'
バージョンチェックで刎ねられない様に、作成した「.config」を修正します。
$ sudo vi .config
37行目を下記の様に修正します。(赤字部分は先程確認したカーネルバージョンに合う様に修正しましょう)
CONFIG_LOCALVERSION=""
↓
CONFIG_LOCALVERSION="+"
修正後、上書き保存しましょう。
続いて、関連ファイルをmakeします。
$ sudo make modules_prepare
暫し待たされます・・・。
ドライバソースへのパッチ当てとビルド&インストール
Planex公式ドライバを入手する
コチラ↓から、GW-450DのPlanex公式Linux用ドライバをダウンロードします。
取得したzipファイル中の「mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2」を、RaspberryPiへscpコマンドなどで転送します。 (Tera Termの場合は、対象のzipファイルをターミナルウィンドウへドラッグアンドドロップするとダイアログが出ますので、SCPボタンをクリックすればファイルが転送されます)
デフォルトだと、/home/pi/に転送されますので、確認します。
$ cd /home/pi $ ls
「mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2」がちゃんと存在するか確認した後、解凍します。
$ sudo tar xvjf mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2
Planex公式ドライバのソースにパッチをあてる
このPlanexドライバはそのままでは使えず、ソースファイルの修正が必要なのですが、修正用パッチを公開されてる方がいらっしゃいますので、有り難く使わせて頂く事にします。ありがたや~
ドライバ修正パッチを取得します。
$ git clone https://gist.github.com/moutend/cb35a37297910c99d3e2 gist
そのままだと、何故か$HOMEパスが通らないので、パッチを一部修正します。
$ vi ./gist/patch.sh
下記1行を追加して上書き保存します。
HOME=/home/pi
ドライバ修正パッチを実行します。
$ sudo ./gist/patch.sh
gcc-4.8を準備する
ドライバのコンパイルにはgcc-4.8あるいは4.9が必要ですが、gcc-4.9だとエラーチェックが厳しくてコンパイルが通らないので、gcc-4.8を使います。
ということで、gcc-4.8を取得します。
$ sudo apt-get -y install gcc-4.8
続いて、gcc-4.8の優先度を変更します。
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 60
ちゃんと、gcc-4.8が優先になったかを確認します。
$ gcc --version | head -n 1
2017/09/15時点では、「gcc (Raspbian 4.8.5-4) 4.8.5」と返ってきました。
ドライバをビルドし、ロードする
ドライバのファイルがあるディレクトリへ移動します。
$ cd ./mt7610u_wifi_sta_v3002_dpo_20130916/
続いて、make。
$ sudo make
ちょっと待たされます。 Pi Zero rev1.3で15分程度?待たされました。
インストールします。
$ sudo make install
モジュールをロードします。
$ sudo insmod /lib/modules/`uname -r`/kernel/drivers/net/wireless/mt7650u_sta.ko
カーネルの依存関係情報の更新。
$ sudo depmod -a
エディタで、/etc/modulesに追記します。
$ sudo vi /etc/modules
mt7650u_sta
無線LANの接続設定
ネットワーク設定を行う
$ sudo sh -c 'wpa_passphrase SSID パスフレーズ >> /etc/wpa_supplicant/wpa_supplicant.conf'
尚、このwpa_passphraseコマンドは、パスフレーズを暗号化してくれるのは良いのですが、何故か暗号化されてない平文のパスフレーズをそのまま併記してくれるとても親切且つ危険なコマンドなので、作成された「wpa_supplicant.conf」ファイルの平文部分を削除しておいた方が良いです。
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
$ sudo vi /etc/network/interfaces
auto ra0 allow-hotplug ra0 iface ra0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
$ sudo shutdown -h now
おまけ:セキュリティ対策とスピードテスト
rootパスワード設定
$ sudo passwd root
ユーザー名「pi」をオリジナルのユーザー名へ変更
$ sudo vi /etc/ssh/sshd_config
PermitRootLogin yes
$ sudo service ssh restart
$ exit
# usermod -l newuser pi # usermod -d /home/newuser -m newuser # groupmod -n newuser pi
# vi /etc/ssh/sshd_config
PermitRootLogin yes
# service ssh restart
# exit
スピードテスト
折角、5GHz WiFiに接続したんですから、どれくらい速度出てるのか確認したいのが人情というもの。
コチラ↓の過去記事でその辺触れてますので、ご参考に。
ちなみに、私の環境で試した結果は、
Download: 21.07 Mbit/s
Upload: 33.45 Mbit/s
という数値でした。
謝辞
参考にさせて頂いた諸々のサイトリンクです。
カーネルのフルビルド無しでモジュールビルドする方法を参考にさせて頂きました。
初期にSSH接続出来ない際の対応方法として、参考にさせて頂きました。
insmodで「insmod: ERROR: could not insert module ・・・:Invalid module format」のエラーが出て困り果てた際に、参考にさせて頂きました。
Planexドライバのパッチを公開されている方、有り難く活用させて頂きました。
セキュリティ対策について、参考にさせて頂きました。
有難うございました。m(__)m
Pi Zero W
microSD 8GB 東芝製
GW-450D2
USB3.0対応 有線LANアダプタ付きUSB HUB
超小型microUSBホスト変換アダプタ
microUSB 左向きL型ケーブル
コメント