Arduino Yun cheat sheet: Difference between revisions

 
(291 intermediate revisions by the same user not shown)
Line 4: Line 4:
:インターネットに接続して AWS 上にある time series database に計測データをストア。(いわゆる IoT ですかね 火暴)
:インターネットに接続して AWS 上にある time series database に計測データをストア。(いわゆる IoT ですかね 火暴)
:[https://aws.amazon.com/jp/iot/ AWS IoT] なるものも触ってみたかったし。
:[https://aws.amazon.com/jp/iot/ AWS IoT] なるものも触ってみたかったし。
ダガシカシ、簡単に Yun に移行できるかと思っていたら、なかなか結構大変(現在も学習中)なのでいろいろメモメモ。
ダガシカシ、簡単に Yun に移行できるかと思っていたら、なかなか結構大変(現在も学習中)なのでいろいろメモ。


== 諸注意 ==
== SRL LLC ==
Arduino Yun は Atmel ATmega32U4 Atheros AR9331 の二つのマイコンがあり、それぞれソフトウェアが稼働する。さらに開発環境のコンピュータもあるので、以下の記事中のコード等がどの環境の話かを区別できるように ('''Leonardo側で''') ('''OpenWrt側で''') ('''開発環境側で''') を入れるようにした。明らかに区別できるものは注記はいれていない。
:ATmega32U4 マイコン部をどう言うのがわかりやすいかを考えて、結局 Leonardo と呼びます。(微妙にちがってるんだけどね)
 
== で、どっち? ==
SRL:
SRL:
  [http://www.arduino.org/ http://www.arduino.org/]
  [http://www.arduino.org/ http://www.arduino.org/]
  [http://labs.arduino.org/Arduino%20Yun Arduino | Labs | Arduino Yún]
  [http://labs.arduino.org/Arduino%20Yun Arduino | Labs | Arduino Yún]
  [https://github.com/arduino-org https://github.com/arduino-org]
  [https://github.com/arduino-org https://github.com/arduino-org]
[http://download.arduino.org/products/YUN/YUN-V04(20150114).pdf Schematic]


LLC:
LLC:
Line 20: Line 17:
  [https://www.arduino.cc/en/Guide/ArduinoYun Arduino - ArduinoYun]
  [https://www.arduino.cc/en/Guide/ArduinoYun Arduino - ArduinoYun]
  [https://github.com/arduino https://github.com/arduino]
  [https://github.com/arduino https://github.com/arduino]
[https://www.arduino.cc/en/uploads/Main/arduino-Yun-schematic.pdf Schematics]
私がスイッチサイエンス社から購入した Yun は製造は SRL。Atheros AR9331 に組み込まれていたのが Linino ではなく OpenWrt-Yun なので LLC 。


私がスイッチサイエンス社から購入した Yun は製造は SRL 、Atheros AR9331 に組み込まれていたのが Linino ではなく OpenWrt-Yun なので LLC 。
:ということは、ソフトウェアは LLC を見た方が良いという判断か。
実際 github 上の動きをみても LLC のほうが好ましい。  
実際 github 上の動きをみても LLC のほうが好ましい。  
:IDE も LLC 版は Java8 に上がっている。
:IDE も LLC 版は Java8 に上がっている。
::ウェブサイトも LLC は https だし。
::ウェブサイトも LLC は https だし。
ソフトウェアは LLC を信頼したほうが良いと思われる。
ソフトウェアは LLC を信頼したほうが良いと思われる。(最近 SRL の github が活発になってきた。stay, tuned)
:以下の記述も LLC 版で書きます。
 
回路図も微妙に違うような...
 
'''朗報! Two Arduinos Become One [http://www.arduino.org/blog/two-arduinos-become-one http://www.arduino.org/blog/two-arduinos-become-one]'''
 
'''おや! LLC 版の Yún が変わった [https://www.arduino.cc/en/Main/ArduinoBoardYun Arduino Yún LininoOS]'''
:2016年12月2日にウェブサイトが更新された模様。SRL と LLC 和解の成果か。
::2014年10月以降に出荷された Yún は LininoOS だったと。(歴史改ざんしてる気がするwww)
::おそらく(大人の事情で) LLC で Yún の出荷がとまった(Web から消えた)のが 2014年10月ごろか...
::その後 LLC では Yún Shield なる製品が出荷されて LininoOS ではなく OpenWrt-Yun が載ってたはず。
::この Yún Shield も(大人の事情で)出荷がとまった(Web から消えた)が、現在は出荷されている。技適とれてないので日本では触れない。
:::なので'''本サイトの以下↓の情報は古い'''です。(LEDE + Arduino-OS + Ciao のファーム作るか...)
::::[[#Arduino_Y.C3.BAn_LininoOS_.E5.B7.AE.E5.88.86|差分を追っかけてみる]]
 
== 諸注意 ==
Arduino Yun は Atmel ATmega32U4 と Atheros AR9331 の二つのマイコンがあり、それぞれソフトウェアが稼働する。さらに開発環境のコンピュータもあるので、以下の記事中のコード等がどの環境の話かを区別できるように ('''"Leonardo"''') ('''"OpenWrt"''') ('''"開発環境"''') を入れるようにした。明らかに区別できるものは注記はいれていない。
:ATmega32U4 マイコン部をどう言うのがわかりやすいかを考えて、結局 '''Leonardo''' と呼ぶことにした。
 
検証機 ハードウェアは SRL 製。
 
ソフトウェアの情報は LLC に合わせている。
 
Arduino Yun の面白さ(逆に難しさ)はマイコン屋の知識と、UNIX屋・ネットワーク屋の知識と、Web屋の知識がすべて必要なところ。それぞれの専門家からみたら他方はブラックボックスに見えて理解の妨げになっているようだ。Arduino Yun の使い方・付き合い方は多方面から見てあげることが大切だ。


= 導入 =
= 導入 =
== 電源 ==
== 電源 ==
Uno では(ACアダプターからの)DC入力ジャック(5.5mm/2.1mm Center Plus | 7~12V) があったが Yun には無い。
Uno では(ACアダプターからの)DC入力ジャック(5.5mm/2.1mm Center Plus | 7~12V) があったが Yun には無い。
:micro-USB から 5V 供給するのが推奨。(びみょうに斜めに付く) PoE モジュールをつければ Ethernet RJ45ジャックから給電も可。VIN pin に定電圧レギュレータの5Vをいれるのも可。
 
#micro-USB から 5V 供給するのが推奨。
#(びみょうに斜めに付く) PoE モジュールをつければ Ethernet RJ45ジャックから給電も可。
#VIN pin に定電圧レギュレータの5Vをいれるのも可。


== USB Serial ==
== USB Serial ==
Yun は Arduino Leonardo(ATmega32U4)ベースに作られている。Uno のように USB 通信用のペリフェラル(ATmega16U2がUSBを受け持つ)をもっていない。そのかわりに ATmega32U4 は USB 制御器を内蔵している(Uno の ATmega328P にはその回路はない)。そこで大きな使い勝手の差がある。
Yun は Arduino Leonardo(ATmega32U4)ベースに作られている。Uno のように USB 通信用のペリフェラル(ATmega16U2がUSBを受け持つ)をもっていない。そのかわりに ATmega32U4 は USB 制御器を内蔵している(Uno の ATmega328P にはその回路はない)。そこで大きな使い勝手の差がある。


micro-USB ケーブルには充電専用というのが紛れ込んでいるので要注意。ハマります...
micro-USB ケーブルには充電専用というのが紛れ込んでいるので要注意。


紐をほどくために Arduino Leonardo ガイドの日本語訳
紐ほどくために Arduino Leonardo ガイドの日本語訳
  [http://trac.switch-science.com/wiki/Guide/ArduinoLeonardo Guide/ArduinoLeonardo – スイッチサイエンス]
  [http://trac.switch-science.com/wiki/Guide/ArduinoLeonardo Guide/ArduinoLeonardo – スイッチサイエンス]


微妙に Leonardo とも異なっているのがいやらしいね。
ハードウェア構成が違うので Leonardo とも微妙な差異があるが、ほぼ同様とはいえる。


== WiFi 設定 ==
== OpenWrt WiFi 設定 ==
工場出荷状態なら、WiFi AP モードで Yun が起動するので、そのアクセスポイントに接続してごにょごにょ。SSID が WiFiの MACアドレスになっているので、もしフィルタリングをしてる場合はこれを使う。  
工場出荷状態なら、WiFi AP モードで Yun (OpenWrt) が起動するので、開発環境からそのアクセスポイントに接続してごにょごにょ。SSID が WiFiの MACアドレスになっているので、もしフィルタリングをしてる場合はこれを使う。  
:ご参考 : [http://takagi-hiromitsu.jp/diary/20071103.html 高木浩光@自宅の日記 - 無線LANのMACアドレス制限の無意味さがあまり理解されていない]
:ご参考 : [http://takagi-hiromitsu.jp/diary/20071103.html 高木浩光@自宅の日記 - 無線LANのMACアドレス制限の無意味さがあまり理解されていない]


Line 62: Line 85:
  [http://www.eleki-jack.com/FC/2015/11/arduino-yun5.html Arduino YUNを使ってみる(5) - フィジカル・コンピューティング]
  [http://www.eleki-jack.com/FC/2015/11/arduino-yun5.html Arduino YUNを使ってみる(5) - フィジカル・コンピューティング]


'''注意''':Windows の場合は [https://support.apple.com/kb/DL999?viewlocale=ja_JP&locale=ja_JP Apple から Bonjour のドライバー]をとってきてインストールしておく。
'''メモ''': 初期パスワードは '''arduino''' (ちなみに Linino の場合は '''doghunter''')


'''注意''':WiFi ルーターが「アイソレーション」「ネットワーク分離機能」「プライバシーセパレータ」等の名前の端末間通信を拒否する設定になっていると同一ネットワークに有る機器は Yun に接続てきません。WiFi ルーターの該当を機能を解除してください。
'''注意''': 開発環境が Windows の場合は [https://support.apple.com/kb/DL999?viewlocale=ja_JP&locale=ja_JP Apple から Bonjour のドライバー]をとってきてインストールしておく。


'''注意''': WiFi ルーターが「アイソレーション」「ネットワーク分離機能」「プライバシーセパレータ」等の名前の端末間通信を拒否する設定になっていると同一ネットワークに有る機器は Yun (OpenWrt) に接続できない。WiFi ルーターの該当を機能を解除する事。
'''重要''': '''TIMEZONE は正しく設定する事(Asia/Tokyo)。'''でないと技適的にまずいはず...
=== ネットワーク設定に失敗したら ===
=== ネットワーク設定に失敗したら ===
AR9331 OpenWrt のシリアルコンソールを使って設定を修正する。
  [https://www.arduino.cc/en/Tutorial/YunSerialTerminal YunSerialTerminal]
  [https://www.arduino.cc/en/Tutorial/YunSerialTerminal YunSerialTerminal]
 
micro-USB を接続し Arduino IDE で
  ファイル -> スケッチの例 -> Bridge -> YunSerialTerminal
  ファイル -> スケッチの例 -> Bridge -> YunSerialTerminal
このスケッチをコンパイルしてアップロードする。
このスケッチをコンパイルして Leonardo にアップロードする。これは、OpenWrt のコンソールを Serial1 経由で micro-USB シリアル (Serial) へつなげるプログラムである。


Arduino IDE の シリアルモニターでは使い勝手がわるいので、picocom 等で シリアルポートにつなげる。
Arduino IDE の シリアルモニターでは使い勝手がわるいので、picocom 等で シリアルポートにつなげる。
Line 77: Line 104:
<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
picocom -b 115200 /dev/ttyS4
picocom -b 115200 /dev/ttyS4
# for Emacsian
picocom -b 115200 -e t /dev/ttyS4
</syntaxhighlight>
</syntaxhighlight>
:(それぞれの開発環境でのお好きなシリアルターミナルソフトでそれぞれのシリアルポート名で。ボーレートは 115200 bps)
:(それぞれの開発環境でのお好きなシリアルターミナルソフトでそれぞれのシリアルポート名で。ボーレートは 115200 bps)
Line 86: Line 116:
/etc/config/arduino
/etc/config/arduino
/etc/config/wireless
/etc/config/wireless
/etc/config/network
</syntaxhighlight>
</syntaxhighlight>


Line 94: Line 123:
  [http://xx-prime.hatenablog.com/entry/2015/04/06/222321 Arduino Yún(OpenWRTYun)の設定情報書き出しには注意 - XX-Prime's blog]
  [http://xx-prime.hatenablog.com/entry/2015/04/06/222321 Arduino Yún(OpenWRTYun)の設定情報書き出しには注意 - XX-Prime's blog]


== OpenWrt-yun のアップデート ==
=== 細かな設定は LuCI で ===
WiFi の設定を解除して有線に変えるとか、PPPoE とかの詳細設定は LuCI とよばれる GUI で行う。
 
Arduino Webpanel にログインして、上部にある "CONFIGURE" ボタンを押して次のページに遷移し、そのページの上部にある、
advanced configuration panel (luci)
のリンクをクリックする。OpenWrt の LuCI で設定する。
 
 
Yun は WiFi ルータでよくつかわれている AR9331 を使用しており、かつ OpenWrt なので、WiFi ルータとしても十分つかえる。
 
== OpenWrt-Yun のアップデート ==
Arduino LLC 純正システムイメージ: [https://www.arduino.cc/en/Main/Software Other Software, ARDUINO YÚN LINUX OS OPENWRT-YÚN]
 
<syntaxhighlight lang="text" enclose="div">
Remember that updating the OpenWrt-Yun image will cause the loss of all files and configurations you previously saved on the flash memory of the Yún.
</syntaxhighlight>
 
'''注意''' : '''すべての設定やデータが消えます。'''(luci の backup / restore を使う方法もあり)
 
'''注意''' : '''アップデート後、もういちどWiFiの設定を最初からやり直す事。'''
 
'''注意''' : '''μSD カードや USB 装置は抜いておく事。'''
 
'''注意''' : '''/tmp (tmpfs) に大きなファイルを置くので、空きメモリーが少ない場合は不要なプロセスを落とす事。'''
 
導入後最初にやったほうがよさそう。(私が購入した Yun はそのままでは opkg の整合性が合わなかった)
導入後最初にやったほうがよさそう。(私が購入した Yun はそのままでは opkg の整合性が合わなかった)


Line 103: Line 156:
  [https://github.com/crossbario/crossbarexamples/blob/master/iotcookbook/device/yun/quickinstall/step1.sh step1.sh]
  [https://github.com/crossbario/crossbarexamples/blob/master/iotcookbook/device/yun/quickinstall/step1.sh step1.sh]
:crossbar.io ここがマニアックでいいかんじ。
:crossbar.io ここがマニアックでいいかんじ。
安全のために YunSerialTerminal を使ったシリアルコンソールで作業する。(もちろん OpenWrt 側で wget するので Internet にはつながってことは前提)


('''OpenWrt側で''')
('''OpenWrt側で''')
Line 115: Line 170:
sysupgrade -v -n openwrt-ar71xx-generic-yun-16M-squashfs-sysupgrade.bin
sysupgrade -v -n openwrt-ar71xx-generic-yun-16M-squashfs-sysupgrade.bin
</syntaxhighlight>
</syntaxhighlight>
いろいろ echo されるが無視して(キーを叩かず)待ち続けること。ひたすら待つと自動的にリブートする。
:boot 時のコンソール出力(さまざまなログ)が落ち着いたところ(WiFi のログ wlan0: associated がでたところぐらい)でリターンキーを押すとプロンプトが出る。


'''注意'''
'''心配''' : OpenWrt-yun も opkg のパッケージもアップデートが遅い。[http://www.egrep.jp/wiki/index.php/Arduino_Yun_cheat_sheet#Security すでにいろいろヤバい]
アップデート後、もういちどWiFiの設定を最初からやり直す事。


== ディスクの容量を増やす ==
== ディスクの容量を増やす ==
Line 125: Line 181:
:を参考に
:を参考に
::Overlayfs がポイント
::Overlayfs がポイント
:::[https://wiki.openwrt.org/doc/howto/extroot Rootfs on External Storage (extroot)]


Yun は 32GB までは対応している。できたら class 10 の micro SD カードを準備して挿入する。
Yun は 32GB までは対応している。できたら class 10 の micro SD カードを準備して挿入する。
:Alcor Micro AU6350-MGL USB2.0 Hub-Reader Controller が AR9331 につながっており、これがμSDのインタフェースになっている。


('''OpenWrt側で''')
('''OpenWrt側で''')
Line 139: Line 197:
(echo o; echo n; echo p; echo 1; echo; echo +15G; echo n; echo p; echo 2; echo; echo; echo t; echo 1; echo c; echo w) | fdisk /dev/sda
(echo o; echo n; echo p; echo 1; echo; echo +15G; echo n; echo p; echo 2; echo; echo; echo t; echo 1; echo c; echo w) | fdisk /dev/sda
mkfs.vfat /dev/sda1
mkfs.vfat /dev/sda1
# mkfs.fat /dev/sda1
mkfs.ext4 /dev/sda2
mkfs.ext4 /dev/sda2
mkdir -p /mnt/sda2
mkdir -p /mnt/sda2
Line 179: Line 238:


'''ディスク容量は必ず増やしてから OpenWrt の作業をすること。'''32GB が高価であれば 8GB class 10 でもよい。'''かならず増やすこと。'''
'''ディスク容量は必ず増やしてから OpenWrt の作業をすること。'''32GB が高価であれば 8GB class 10 でもよい。'''かならず増やすこと。'''
上記の micro-SD を取り出すには、
<syntaxhighlight lang="bash" enclose="div">
poweroff
</syntaxhighlight>
shutdown したら micro-SD を取り出す。
"YUN RST" ボタンをおして再起動する。起動したら、
<syntaxhighlight lang="bash" enclose="div">
uci delete fstab.@mount[0]
uci commit
</syntaxhighlight>
/etc/fstab の記述を消す必要あり。


== RESET ==
== RESET ==
Line 184: Line 256:


#OpenWrt が稼働する AR9331 をリスタートするには、いっぱい LED がある側の、アナログピンの横の "YÚN RST" を押す。
#OpenWrt が稼働する AR9331 をリスタートするには、いっぱい LED がある側の、アナログピンの横の "YÚN RST" を押す。
#AVR マイコン ATmega32U4 をリスタートするには、イーサネットポートの横にある、"32U4 RST" を押す。
#AVR マイコン ATmega32U4 (Leonardo) をリスタートするには、イーサネットポートの横にある、"32U4 RST" を押す。
#:1回だけなら通常のリセットになる。2回速く押す事で bootloader mode に入り LED 13 が赤く点灯し 8 秒待機した後、起動する。
#:1回だけなら通常のリセットになる。2回速く押す事で bootloader mode に入り LED 13 が赤く点灯し 8 秒待機した後、起動する。
#:[https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/troubleshooting-and-faq#ts-reset Reset to Bootloader]
#:[https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/troubleshooting-and-faq#ts-reset Reset to Bootloader]
#WiFi ボードをリセットするには、USB-A ポートの横にある "WLAN RST" を押す。
#WiFi ボードをリセットするには、USB-A ポートの横にある "WLAN RST" を押す。
#WiFi 設定を初期化するには、"WLAN RST" を 5 秒以上かつ 30 秒以下押し続ける。AR9331 がリスタートして 初期のWiFi設定モードになる。
#WiFi 設定を初期化するには、"WLAN RST" を 5 秒以上かつ 30 秒以下押し続ける。AR9331 がリスタートして 初期のWiFi設定モードになる。
#OpenWrt-Yun を工場出荷の状態に戻すには、"WLAN RST"を 30 秒以上押し続ける。この場合すべての設定が初期化される。
#OpenWrt-Yun を工場出荷の状態(正確には最後に導入した OpenWrt-Yun)に戻すには、"WLAN RST"を 30 秒以上押し続ける。この場合すべての設定が初期化される。
#:micro SD を使って Overlayfs で拡張している場合は micro SD を安全に抜いておく。
#::/etc/config/fstab の 該当の config 'mount' セクションを削除して micro-SD のファイルシステムを umount し micro-SD カードを抜く。
#OpenWrt-Yun の root ログインパスワードを忘れた場合は、YunSerialTerminal をロードしてシリアルコンソールから変更する。
#OpenWrt-Yun の root ログインパスワードを忘れた場合は、YunSerialTerminal をロードしてシリアルコンソールから変更する。


Line 196: Line 270:


#'''USB''' の刻印がある白色 LED は OpenWrt ブート完了時( rc.local 実行時) に点灯する。つまり AR9331 OpenWrt が正常に稼働したというサイン。
#'''USB''' の刻印がある白色 LED は OpenWrt ブート完了時( rc.local 実行時) に点灯する。つまり AR9331 OpenWrt が正常に稼働したというサイン。
#:AR9331 GPIO1 OpenWrt /sys/devices/platform/leds-gpio/leds/ds:green:usb [https://github.com/arduino/openwrt-packages-yun/blob/master/arduino/yun-scripts/files/usr/bin/boot-complete-notify#L3 boot-complete-notify]
#:AR9331 GPIO1 OpenWrt /sys/class/leds/ds:green:usb [https://github.com/arduino/openwrt-packages-yun/blob/master/arduino/yun-scripts/files/usr/bin/boot-complete-notify#L3 boot-complete-notify]
#'''WLAN''' の刻印がある青色 LED は WiFi ボードに何等かの操作(動作確認・初期化・リセット)をしている際にブリンクする。通常は消灯。
#'''WLAN''' の刻印がある青色 LED は WiFi ボードに何等かの操作(動作確認・初期化・リセット)をしている際にブリンクする。通常は消灯。
#:AR9331 GPIO0 OpenWrt /sys/devices/platform/leds-gpio/leds/ds:green:wlan [https://github.com/arduino/openwrt-packages-yun/blob/master/arduino/yun-scripts/files/usr/bin/blink-start blink-start] [https://github.com/arduino/openwrt-packages-yun/blob/master/arduino/yun-scripts/files/usr/bin/blink-stop blink-stop]
#:AR9331 GPIO0 OpenWrt /sys/class/leds/ds:green:wlan [https://github.com/arduino/openwrt-packages-yun/blob/master/arduino/yun-scripts/files/usr/bin/blink-start blink-start] [https://github.com/arduino/openwrt-packages-yun/blob/master/arduino/yun-scripts/files/usr/bin/blink-stop blink-stop]
#'''ON''' の刻印がある緑色 LED は刻印通り通電しているサイン。
#'''ON''' の刻印がある緑色 LED は刻印通り通電しているサイン。
#:接地
#:接地
Line 205: Line 279:
#'''L13''' の刻印のある赤色 LED はおなじみの '''L''' つまり  13 ピン。
#'''L13''' の刻印のある赤色 LED はおなじみの '''L''' つまり  13 ピン。
#:ATmega32U4 PC7 (ICP3/CLKO/OC4A)
#:ATmega32U4 PC7 (ICP3/CLKO/OC4A)
#'''TX''' の刻印のあるオレンジ色 LED は micro-USB のシリアル通信 TX、ネットワーク経由の avrdude 書き込み時も点灯。
#'''TX''' の刻印のあるオレンジ色 LED は micro-USB のシリアル通信 TX。
#:ATmega32U4 PD5 (~XCK/CTS) [https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/bootloaders/caterina/Caterina.h#L79 Caterina bootloader]
#:ATmega32U4 PD5 (~XCK/CTS) [https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/bootloaders/caterina/Caterina.h#L79 Caterina bootloader]
#'''RX''' の刻印のあるオレンジ色 LED は micro-USB のシリアル通信 RX、回路は ハードウェア SPI の SS と接続されている。
#'''RX''' の刻印のあるオレンジ色 LED は micro-USB のシリアル通信 RX、回路は ハードウェア SPI の SS と接続されている。
Line 220: Line 294:
::ATmega32U4 は USB の回路を内蔵していて Yun の micro-USB 端子に D+ D- VBUS (USB)GND が繋がっている。
::ATmega32U4 は USB の回路を内蔵していて Yun の micro-USB 端子に D+ D- VBUS (USB)GND が繋がっている。


スピードは極端におそいが、TCP/IP ネットワーク経由にしておくのが無難だとわかった。([http://www.egrep.jp/wiki/index.php/Arduino_Yun_cheat_sheet#YUN_.E3.81.A8_SPI_.E3.81.A8_ICSP_.E3.81.A8_avrdude SPI デバイスを使用する場合はややこしいが])
スピードは極端におそいが、TCP/IP ネットワーク経由(AR9331 OpenWrt を AVR ライタとして使う)にしておくのが無難だとわかった。([http://www.egrep.jp/wiki/index.php/Arduino_Yun_cheat_sheet#YUN_.E3.81.A8_SPI_.E3.81.A8_ICSP_.E3.81.A8_avrdude SPI デバイスを使用する場合は問題あり])


== Arduino-Makefile ==
== Arduino-Makefile ==
Line 226: Line 300:


例の 1200bps でリセットするところでこける。
例の 1200bps でリセットするところでこける。
:私の作業環境が Windows の Cygwin なので、新しく接続された USB デバイスを Cygwin 側からは認識しないという事情によるものだった。
:私の開発環境が Windows の Cygwin なので、新しく接続された USB デバイスを Cygwin 側からは認識しないという事情によるものだった。
:あとは 上記と同様な理由で、割り込み禁止にしているか、SLEEP_MODE_PWR_DOWN 等では USB シリアルは使えない。TCP/IP ネットワーク経由で使う方法/パッチ探すことにする...
:あとは 上記と同様な理由で、割り込み禁止にしているか、SLEEP_MODE_PWR_DOWN 等では USB シリアルは使えない。TCP/IP ネットワーク経由(AR9331 OpenWrt を AVR ライタとして使う)で使う方法/パッチ探すことにする...
::おそらく ssh で hex を送って、それから OpenWrt 側の avrdude 経由で書き込むようにハックすればいけると思われるので調査する。


memo:
memo:
Line 242: Line 315:


== 割り込み禁止 もしくは SLEEP_MODE_PWR_DOWN という状況で micro USB 経由で avrdude ==
== 割り込み禁止 もしくは SLEEP_MODE_PWR_DOWN という状況で micro USB 経由で avrdude ==
IDE でコンパイルが終了するところで "32U4 RST" をダブルクリック(bootloader modeに)すると、タイミングが合えばプログラムを転送できる。([http://www.egrep.jp/wiki/index.php/Arduino_Yun_cheat_sheet#YUN_.E3.81.A8_SPI_.E3.81.A8_ICSP_.E3.81.A8_avrdude SPI デバイスを接続している場合]は、これのほうが便利かも)
IDE でコンパイルが終了するところで "32U4 RST" をダブルクリック(bootloader mode に)すると、タイミングが合えばプログラムを転送できる。
:([http://www.egrep.jp/wiki/index.php/Arduino_Yun_cheat_sheet#YUN_.E3.81.A8_SPI_.E3.81.A8_ICSP_.E3.81.A8_avrdude SPI デバイスを接続している場合]は、これのほうが便利かも)


== 2つのマイコン ==
== 2つのマイコン・3つの状態 ==
  [http://playground.arduino.cc/Hardware/Yun#rebootStability How to improve reboot/reset stability]
  [http://playground.arduino.cc/Hardware/Yun#rebootStability How to improve reboot/reset stability]


Line 329: Line 403:


=== OpenWrt の init script 完了を待つ処理 ===
=== OpenWrt の init script 完了を待つ処理 ===
USB LED (明るい白色)が点灯する時点で OpenWrt が起動済み(rc.local実行時)ということを利用して、
USB LED (明るい白色)が点灯する時点で OpenWrt が起動済み(rc.local 実行時)ということを利用して、
:/etc/rc.local の boot-complete-notify 実行直前は brightness は 0 である。boot-complete-notify 実行後に 255 である。
:/etc/rc.local の boot-complete-notify 実行直前は brightness は 0 である。boot-complete-notify 実行後に 255 である。
:白色 LED を消灯するために trigger に none を入力後も brightness は 255 である。
:白色 LED を消灯するために trigger に none を入力後も brightness は 255 である。
::'''どうもバグと認識されたようで最新の OpenWrt では none を設定すると brightness は 0 になる。'''


('''Leonardo側で''')
('''Leonardo側で''')
Line 362: Line 437:
=== NTP 時刻同期完了確認 ===
=== NTP 時刻同期完了確認 ===
OpenWrt 起動直後は、ネットワークの設定処理が終わっていないことや、NTP で時刻同期がまだできていない状態で、Leonardo 側の処理が動く場合がある。
OpenWrt 起動直後は、ネットワークの設定処理が終わっていないことや、NTP で時刻同期がまだできていない状態で、Leonardo 側の処理が動く場合がある。
:ちなみに OpenWrt 側のマイコンには RTC がなく、ブート直後は、時刻が大幅に違っている。(前回 poweroff コマンド実行時の時刻)
:ちなみに OpenWrt 側のマイコンには RTC がなく、ブート直後は、時刻が大幅に違っている。(/etc ディレクトリにあるファイルの最新日付を boot 時に設定している)
上記の関数で OpenWrt のブートシーケンス完了確認後、NTP (busybox sysntpd) の同期を待つ(25秒ほどで同期する)処理を配置しておく。もちろん、OpenWrt 稼働済みの状態で Leonardo が起動する場合は待つ必要は無い。
上記の関数で OpenWrt のブートシーケンス完了確認後、NTP (BusyBox sysntpd) の同期を待つ(25秒ほどで同期する)処理を配置しておく。もちろん、OpenWrt 稼働済みの状態で Leonardo が起動する場合は待つ必要は無い。


= Leonardo AVR マイコン =
= Leonardo =
== I/O ==
== I/O ==
D0/INT2, D1/INT3 は AR9331 との Serial1 用に接続されている。Yun で外部割り込みで使えるのは D2/INT1 と D3/INI0 とのこと。D7/INT4 は AR9331 の ハンドシェイク用(予定)なので使わない。
D0/INT2, D1/INT3 は AR9331 との Serial1 用に接続されている。Yun で外部割り込みで使えるのは D2/INT1 と D3/INI0 とのこと。D7/INT4 は AR9331 の ハンドシェイク用(予定)なので使わない。


I2C(TWI)の SDA/SCL が Uno は A4/A5。Yun は D2/D3 。
I2C(TWI)の SDA/SCL が Uno は A4/A5。Yun は D2/D3 。
:はい!終わった!INT1/INT0 の外部割り込みが使えない...
:Uno で使っていた INT1/INT0 の外部割り込みが使えない...
::I2C使わないように、SPI に回路変えるか...
::I2C使わないように、SPI に回路変えるか...
:::SPI で気象データセンサーなら
:::SPI で気象データセンサーなら
Line 381: Line 456:
:::ハードウェアSPI も UNO と異なる。UNO はICSP 端子と PIN 10, 11, 12 だが YUN は ICSP 端子のみだ。
:::ハードウェアSPI も UNO と異なる。UNO はICSP 端子と PIN 10, 11, 12 だが YUN は ICSP 端子のみだ。
::::Yun で ハードウェア SPI のために ICSP 端子に接続する場合は問題がある。network 経由の avrdude で[http://www.egrep.jp/wiki/index.php/Arduino_Yun_cheat_sheet#SPI_.E3.81.A8_ICSP_.E3.81.A8_avrdude エラー]がでる。
::::Yun で ハードウェア SPI のために ICSP 端子に接続する場合は問題がある。network 経由の avrdude で[http://www.egrep.jp/wiki/index.php/Arduino_Yun_cheat_sheet#SPI_.E3.81.A8_ICSP_.E3.81.A8_avrdude エラー]がでる。
:Pin により割り込みを他の Pin で可能にする方法がある。
:Pin による割り込みを他の Pin で可能にする方法がある。
  [http://forum.arduino.cc/index.php?topic=182173.0 Leonardo - using I2C and external interrupts]
  [http://forum.arduino.cc/index.php?topic=182173.0 Leonardo - using I2C and external interrupts]
  [https://github.com/GreyGnome/PinChangeInt Pin Change Interrupt library for the Arduino]
  [https://github.com/GreyGnome/PinChangeInt Pin Change Interrupt library for the Arduino]
Line 445: Line 520:
</syntaxhighlight>
</syntaxhighlight>
:OpenWrt 側から ポート 6571 に接続するまで待つための Leonardo 側プログラム処理。
:OpenWrt 側から ポート 6571 に接続するまで待つための Leonardo 側プログラム処理。
'''注意: loop で待っているので OpenWrt 側の bridge.py が OpenWrt 側の CPU を食う。早い目に OpenWrt 側で yun console に繋げて、この loop を抜けるようにしてあげる事。'''


== Process ==
== Process ==
Line 452: Line 528:


  [http://xx-prime.hatenablog.com/entry/2015/04/26/224618 Arduino yunで放射線センサのデータをxivelyとM2Xにアップロードする - XX-Prime's blog]
  [http://xx-prime.hatenablog.com/entry/2015/04/26/224618 Arduino yunで放射線センサのデータをxivelyとM2Xにアップロードする - XX-Prime's blog]
  [http://qiita.com/kassy_kz/items/ebeda9bcda444cf401a0 IFTTTを用いてArduinoからツイートする - Qiita]
  [http://qiita.com/kassy_kz/items/ebeda9bcda444cf401a0 IFTTTを用いてArduinoからツイートする]
  [https://github.com/itman83/ArduinoYun https://github.com/itman83/ArduinoYun]
  [https://github.com/itman83/ArduinoYun https://github.com/itman83/ArduinoYun]


Line 484: Line 560:
SPI: on the ICSP header. These pins support SPI communication using the SPI library. Note that the SPI pins are not connected to any of the digital I/O pins as they are on the Uno, They are only available on the ICSP connector. This means that if you have a shield that uses SPI, but does NOT have a 6-pin ICSP connector that connects to the Yún's 6-pin ICSP header, the shield will not work. The SPI pins are also connected to the AR9331 gpio pins, where it has been implemented in software the SPI interface. This means that the ATMega32u4 and the AR9331 can also communicate using the SPI protocol.
SPI: on the ICSP header. These pins support SPI communication using the SPI library. Note that the SPI pins are not connected to any of the digital I/O pins as they are on the Uno, They are only available on the ICSP connector. This means that if you have a shield that uses SPI, but does NOT have a 6-pin ICSP connector that connects to the Yún's 6-pin ICSP header, the shield will not work. The SPI pins are also connected to the AR9331 gpio pins, where it has been implemented in software the SPI interface. This means that the ATMega32u4 and the AR9331 can also communicate using the SPI protocol.
</syntaxhighlight>
</syntaxhighlight>
AR9331 の GPIO と共有しているらしい。それを利用してまさしく ICSP でプログラムを書き込んでいる。ネットワーク経由プログラムを書き込む場合は、ICSP 端子には何もつながないようにすること。
AR9331 の GPIO と共有しているらしい。それを利用してまさしく ICSP でプログラムを書き込んでいる。ネットワーク経由でプログラムを書き込む(AR9331 OpenWrt を AVR ライタとして使う)場合は、ICSP 端子には何もつながないようにすること。


== YUN と SPI と RX LED ==
== YUN と SPI と RX LED ==
Line 499: Line 575:
{
{
   uint8_t sreg = SREG;
   uint8_t sreg = SREG;
   noInterrupts(); // Protect from a scheduler and prevent transactionBegin                                                  
   noInterrupts(); // Protect from a scheduler and prevent transactionBegin
   if (!initialized) {
   if (!initialized) {
     // Set SS to high so a connected chip will be "deselected" by default                                                    
     // Set SS to high so a connected chip will be "deselected" by default
     uint8_t port = digitalPinToPort(SS);
     uint8_t port = digitalPinToPort(SS);
     uint8_t bit = digitalPinToBitMask(SS);
     uint8_t bit = digitalPinToBitMask(SS);
     volatile uint8_t *reg = portModeRegister(port);
     volatile uint8_t *reg = portModeRegister(port);


     // if the SS pin is not already configured as an output                                                                  
     // if the SS pin is not already configured as an output
     // then set it high (to enable the internal pull-up resistor)                                                            
     // then set it high (to enable the internal pull-up resistor)
     if(!(*reg & bit)){
     if(!(*reg & bit)){
       digitalWrite(SS, HIGH);
       digitalWrite(SS, HIGH);
     }
     }


     // When the SS pin is set as OUTPUT, it can be used as                                                                  
     // When the SS pin is set as OUTPUT, it can be used as
     // a general purpose output port (it doesn't influence                                                                  
     // a general purpose output port (it doesn't influence
     // SPI operations).                                                                                                      
     // SPI operations).
     pinMode(SS, OUTPUT);
     pinMode(SS, OUTPUT);


     // Warning: if the SS pin ever becomes a LOW INPUT then SPI                                                              
     // Warning: if the SS pin ever becomes a LOW INPUT then SPI
     // automatically switches to Slave, so the data direction of                                                            
     // automatically switches to Slave, so the data direction of
     // the SS pin MUST be kept as OUTPUT.                                                                                    
     // the SS pin MUST be kept as OUTPUT.
     SPCR |= _BV(MSTR);
     SPCR |= _BV(MSTR);
     SPCR |= _BV(SPE);
     SPCR |= _BV(SPE);
Line 531: Line 607:
</syntaxhighlight>
</syntaxhighlight>
で RX LED が付きっぱなしの条件でも RX LED は消灯することができる。
で RX LED が付きっぱなしの条件でも RX LED は消灯することができる。
ちなみに、複数の SPI デバイスを使う場合は、SPI Library で初期化する前に、すべての SPI デバイスの CS を必ず HIGH にしておくこと。
<syntaxhighlight lang="cpp" enclose="div">
/* Prepare for using multiple SPI devices */
pinMode(SPI1_CS, OUTPUT);
digitalWrite(SPI1_CS, HIGH);
pinMode(SPI2_CS, OUTPUT);
digitalWrite(SPI2_CS, HIGH);
/* Init SPI lib */
SPI.begin();
</syntaxhighlight>


== DS3234 の SQW と Alarm ==
== DS3234 の SQW と Alarm ==
Line 663: Line 751:
  [https://www.kernel.org/doc/Documentation/leds/leds-class.txt LED handling under Linux]
  [https://www.kernel.org/doc/Documentation/leds/leds-class.txt LED handling under Linux]


== 起動後の LED の点減 ==
=== 起動後の LED の点減 ===
USB LED (まぶしい白色) は /etc/rc.local の boot-complete-notify で常時点灯に設定される。
USB LED (まぶしい白色) は /etc/rc.local の boot-complete-notify で常時点灯に設定される。
  [https://github.com/arduino/openwrt-packages-yun/blob/0fb82cf85e489ffad89a78a58beac9d256c1bbbf/arduino/yun-scripts/files/usr/bin/boot-complete-notify boot-complete-notify]
  [https://github.com/arduino/openwrt-packages-yun/blob/0fb82cf85e489ffad89a78a58beac9d256c1bbbf/arduino/yun-scripts/files/usr/bin/boot-complete-notify boot-complete-notify]


WLAN LED (暗い青色) は wifi モジュールの動作確認・初期化・リセット等の操作時にブリンクするようになっている。処理が終わったら消灯される。
WLAN LED (暗い青色) は WiFi モジュールの動作確認・初期化・リセット等の操作時にブリンクするようになっている。処理が終わったら消灯される。
  [https://github.com/arduino/openwrt-packages-yun/blob/master/arduino/yun-scripts/files/usr/bin/wifi-live-or-reset wifi-live-or-reset]
  [https://github.com/arduino/openwrt-packages-yun/blob/master/arduino/yun-scripts/files/usr/bin/wifi-live-or-reset wifi-live-or-reset]
  [https://github.com/arduino/openwrt-packages-yun/blob/0fb82cf85e489ffad89a78a58beac9d256c1bbbf/arduino/yun-scripts/files/usr/bin/wifi-reset-button-released wifi-reset-button-released]
  [https://github.com/arduino/openwrt-packages-yun/blob/0fb82cf85e489ffad89a78a58beac9d256c1bbbf/arduino/yun-scripts/files/usr/bin/wifi-reset-button-released wifi-reset-button-released]
Line 732: Line 820:
### なになあればそれを upgrade
### なになあればそれを upgrade
### opkg upgrade temboo
### opkg upgrade temboo
opkg install ca-certificates
opkg install unzip
opkg install unzip
opkg install screen
opkg install screen
opkg install logrotate
opkg install logrotate
opkg install diffutils
</syntaxhighlight>
</syntaxhighlight>


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
mkdir -p -m 0755 /mnt/sda1/var/lib/logrotate
opkg install dosfsck
# opkg install dosfstools
umount /dev/sdb1
dosfsck -t -a -w /dev/sdb1
# fsck.fat -t -a -w /dev/sda1
/sbin/block mount
</syntaxhighlight>
 
<syntaxhighlight lang="bash" enclose="div">
mkdir -p -m 0755 /usr/local/var/lib/logrotate
crontab -e
crontab -e
### logrotal の記述かく
### logrotal の記述かく
### 25 6 * * * /usr/sbin/logrotate -s /mnt/sda1/var/lib/logrotate/status /etc/logrotate.conf > /dev/null 2>&1
### 25 6 * * * /usr/sbin/logrotate -s /usr/local/var/lib/logrotate/status /etc/logrotate.conf > /dev/null 2>&1
### もしくは crontab ファイル
### もしくは crontab ファイル
/etc/init.d/cron restart
/etc/init.d/cron restart
Line 813: Line 912:


== python beaver ==
== python beaver ==
logstash に計測データを送るために、軽量 shipper beaver を導入。
ELK stack / Elastic Stack (Logstash + Elasticsearch + Kibana) に計測データを送るために、軽量 shipper beaver を導入。もちろん経路の安全性や接続先の厳密化のために '''SSH Tunneling''' を使用する。
:本当は filebeat が良いのだが、Golang が MIPS に対応してない。
:本当は filebeat が良いのだが、Golang が MIPS に対応してない。
導入する前に micro-SD でディスク容量を増やしておく事。
導入する前に micro-SD でディスク容量を増やしておく事。
Line 823: Line 922:
easy_install pip
easy_install pip
opkg install python-sqlite3
opkg install python-sqlite3
pip install beaver==34.1.0
pip install beaver==36.2.0
</syntaxhighlight>
</syntaxhighlight>


SSH Tunneling したいので OpenWrt-Yun の 軽量 ssh である Dropbear SSH のための key 変換ツール。これで Dropbear 用に変換する。
SSH Tunneling の設定するため OpenWrt-Yun の 軽量 ssh である Dropbear SSH のための key 変換ツール。これで Dropbear 用に変換する。
<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
opkg install dropbearconvert
opkg install dropbearconvert
Line 847: Line 946:


いろいろ設定して意外とさっくり supervisord 配下で beaver が動いた。
いろいろ設定して意外とさっくり supervisord 配下で beaver が動いた。
:ついでに ssh tunnel も稼働中...
:ついでに、外部からの接続用 ssh tunnel も稼働中...


init script で ssh を起動する場合、 HOME が設定されていないので、ssh 関連のファイルの操作ができない。
init script で ssh を起動する場合、 HOME が設定されていないので、ssh 関連のファイルの操作ができない。
Line 862: Line 961:
python supervisor と beaver を稼働させるともちろんメモリーは圧迫されるので無駄をなくす事が重要。
python supervisor と beaver を稼働させるともちろんメモリーは圧迫されるので無駄をなくす事が重要。
本当は OpenSSH client インストールして ssh tunnel のいろんなオプションつけたいのだけど我慢。ntpd も同様。
本当は OpenSSH client インストールして ssh tunnel のいろんなオプションつけたいのだけど我慢。ntpd も同様。
:最終的に OpenSSH-client は入れた。
:(最終的には、ExitOnForwardFailure=yes が必要だったので OpenSSH-client は入れた。)


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
Line 872: Line 971:
</syntaxhighlight>
</syntaxhighlight>
python supervisor と beaver を稼働させた状態。
python supervisor と beaver を稼働させた状態。
ちなみに、AR9331 は MIPS 24Kc で FPU は無し。


== メンテ用トンネル ==
== メンテ用トンネル ==
Line 882: Line 983:


ssh tunnel サービス は python supervisord 配下で稼働させた。
ssh tunnel サービス は python supervisord 配下で稼働させた。
:shell script を supervisord で管理する場合、最終的なプログラム(この場合は ssh)は exec 付きで起動すること。でないと supervisord が ssh のプロセス追えない。


dropbear の client dbclient のオプションを調査したが、 -o は無視するようだ。
dropbear の client dbclient のオプションを調査したが、 -o は無視するようだ。
Line 900: Line 1,002:
要調査...
要調査...


== ssh-agent やっとけ ==
== ssh-agent ==
OpenWrt側に入ってテストすることがおおいので('''開発環境側で''')
OpenWrt側に入ってテストすることがおおいので('''開発環境側で''')


Line 922: Line 1,024:


自分の公開キーを書いておく。
自分の公開キーを書いておく。
= Yun を 無線(Wi-Fi) 有線(Ethernet) コンバータとして使う =
[https://lede-project.org/docs/user-guide/relay_configuration Wifi Extender or Repeater or Bridge Configuration]
[https://wiki.openwrt.org/doc/recipes/relayclient Routed Client with relayd (Pseudobridge)]
[http://ultimania.org/trac/yuna/wiki/linux/OpenWrt2 http://ultimania.org/trac/yuna/wiki/linux/OpenWrt2]
<syntaxhighlight lang="bash" enclose="div">
opkg update
opkg install relayd
opkg install luci-proto-relay
/etc/init.d/relayd enable
/etc/init.d/relayd start
</syntaxhighlight>
Luci 使えば簡単だった。
↓は LEDE 公式資料なので IF 名が Yun と違うので注意。(Yun は wan が eth1、lan が wifi)
[https://lede-project.org/_media/docs/guide-user/wifirepeater_interfaces_lan.png https://lede-project.org/_media/docs/user-guide/wifirepeater_interfaces_lan.png]
[https://lede-project.org/_media/docs/guide-user/wifirepeater_newinterface.png https://lede-project.org/_media/docs/user-guide/wifirepeater_newinterface.png]
[https://lede-project.org/_media/docs/guide-user/wifirepeater_relaybridge1.png https://lede-project.org/_media/docs/user-guide/wifirepeater_relaybridge1.png]
[https://lede-project.org/_media/docs/guide-user/wifirepeater_relaybridge2.png https://lede-project.org/_media/docs/user-guide/wifirepeater_relaybridge2.png]
[https://lede-project.org/_media/docs/guide-user/wifirepeater_firewall.png https://lede-project.org/_media/docs/user-guide/wifirepeater_firewall.png]
↓を再度確認のこと。(Yun は wan が eth1)
eth1 に ダミーの IP を振る。
<syntaxhighlight lang="text" enclose="div">
config interface 'wan'
        option ifname 'eth1'
        option proto 'static'
        option ipaddr '192.168.2.1'
        option netmask '255.255.255.0'
       
config interface 'repeater_bridge'
        option proto 'relay'
        list network 'lan'
        list network 'wan'
</syntaxhighlight>
最後に relayd を restart
<syntaxhighlight lang="bash" enclose="div">
/etc/init.d/relayd restart
</syntaxhighlight>
relayd の '-I' オプションは ARP cache を頻繁に行うようで気持ち悪い '-i' に変えてみた。が、動かなかった。'-I' に戻した。
最終的に ARP storm 問題が気になったので、いろいろ試したが解決せず、relayd を使わずに、静的な bridge 構成にした。
bridge しているインターフェースには proxy_arp を有効にすること。
= Security =
[http://hackaday.com/2016/11/11/arduworm-a-malware-for-your-arduino-yun/ ArduWorm: A Malware for Your Arduino Yun]
:あーーー出てしまった...
::ATmega32u4に侵入して、bridge でお好きに的...
Arduino Yun の OpenWrt と AVR の脆弱性(要 Flash Plugin):
[https://prezi.com/ufthiwidvb_0/tfm-arduino-yun-security-iot/ TFM - Arduino Yun - Security IoT]
<syntaxhighlight lang="text" enclose="div">
Linux environment
・ROOT as default user:
  No local access control.
・Vulnerable components (Kali -> Nmap,Nessus):
  Dropbeard ssh 2011.54 -> DoS, remote execution...
  BusyBox v1.19.4 -> execute arbitrary commands...
  Kernel v3.3.8 -> DoS, gain privileges...
・Critical paths:
  /var/hosts -> pharming attack
  /etc/opkg -> fake repository (SSLsniff)
  /usr/bin/kill-bridge -> DoS, own malicious bridge
  /rom/ -> persistence
・No integrity file checks on boot.
・No redirection to 443 (https).
・Remote insecure configuration:
  Deauthentication attack to create new free
  hotspot, capturing WPA/WPA2 handshakes...
Arduino environment:
・Device sensors no authenticated.
・No memory controls (Heap Overflow & Stack Overflow)
</syntaxhighlight>
Arduino の性質上しかたのないものもあるが、ネットワークからの侵入や使用不能攻撃はさけたい。
Compromised firmware:
[http://fabytes.com/fab/?p=486 Are your devices secure? Firmware hacking | Fabytes.com]
Update ヲタクとして作業中: [http://www.egrep.jp/wiki/index.php/OpenWrt_for_Arduino_Yun_cheat_sheet OpenWrt for Arduino Yun Security Upgrade]
= Arduino Yún LininoOS 差分 =
*Arduino LLC 版 Arduino IDE で「ライブラリを管理...」から MCU 側の Ciao Library がインストールできるようになっていた。
*Bridge Library か Ciao Library かは選択可能のように記述されている。(どちらか推奨があるわけではないみたい)
*luci-app-arduino-webpanel (Linino 版) と Arduino-OS (arduinoos) かはこれも様子見っぽい。Arduino-OS は野心的なので安定するまでは様子見したほうがよさげ。
*LininoIO はまだ水面下っぽい。(MCUIO driver 系) コンセプトは素晴らしいが、vanilla kernel に取り込まれる勢いで OpenWrt / LEDE に入らないと将来はあやしい。
**こんなのあるんだ。これを拡張するのかな [https://www.kernel.org/doc/html/latest/driver-api/iio/index.html Industrial I/O (IIO)]
*公式版 LininoOS (LininoIO 版) は Barrier Breaker(14.07) ベース。 (/etc/linino_version には attitude_adjustment とあるが)(あかん..)
*Chaos Calmer(15.05) ベースの LininoOS もあることはある。


= link =
= link =
Documenting the Yún:
[http://codesnippets.altervista.org/documentation/yun/index.html http://codesnippets.altervista.org/documentation/yun/index.html]
ibuyopenwrt:
[http://www.ibuyopenwrt.com/index.php http://www.ibuyopenwrt.com/index.php]
Filebeat を動かすための mips Golang 情報:
  [http://akagi201.org/blog/golang-on-openwrt/ Golang on OpenWrt · Akagi201]
  [http://akagi201.org/blog/golang-on-openwrt/ Golang on OpenWrt · Akagi201]
Yun 濃い議論:
[http://hackaday.com/2015/02/24/is-the-arduino-yun-open-hardware/ Is The Arduino Yun Open Hardware? | Hackaday]
linux USB RTC:
[https://code.google.com/p/mist-board/wiki/UsbRtc USB Real Time Clock (USBRTC)]
= ToDo メモ =
[http://akizukidenshi.com/catalog/g/gK-09833/ 秋月 006P安定化電源モジュールキット]
:電流足りないね。