NanoPi NEOで遊ぶ
いまさらながらNanoPi NEOで遊んでみる。
Raspberry Piよりも安く、そこまでパワーのいらない用途にはこれで十分。
メーカーのウェブサイトを見るといろんなバリエーションが出ている。
NASキットのようなものがあったり、最近の製品は複数のEthernetポートを持つものがあるので、自作ルーターを作れということだろうか?
セットアップ
OSを起動するためのmicroSDカードを準備する。
サポートページの「5.3.1 Get Image Files」からダウンロードのリンクへ進む。
OneDrive > H3-FriendlyElec > 01_Official images > 01_SD card images >
h3_sd_friendlycore-xenial_4.14_armhf_00000000.img.zip
UbuntuCore の Linux
Windowsなら DD for Windows などを使ってmicroSDへ .imgファイルを書き込む。
できたmicroSDを、NanoPiのソケットへ差し込んで電源を入れて起動する。
(ファイルシステムの容量は自動的にmicroSDの最大容量まで拡張される)
起動と初期設定
電源はDC 5V、特に仕事をしていない状態で実測 150mA くらい。
意外と省エネ。
NanoPiにはHDMI出力がないので、TELNETやSSHで接続したいところだが、DHCPで割り当てられてたIPアドレスがわからないときがある。
基板上の端子にシリアルが出ているので、ここが起動時のコンソールになっている。
Debug Port (UART0) 115200bps
USBシリアル変換ケーブルなどを接続してログインしてみるとよい。
初期のパスワードは次のようになっている。
User: root / Password: fa
User: pi / Password: pi
初期のもろもろの設定は npi-config コマンドでできる。
% npi-config
いろいろなパッケージは apt-get コマンドでインストールできる。
あらかじめ
% apt-get update
しておくとよい。
GPIOポートでLEDチカチカ
使いたいポート番号をexportへ送ると特殊なデバイスファイルができる。
outの設定をしてvalueへ1/0を送るとHigh/Lowが出力される。
inの場合はcatコマンドなどで入力の状態を表示できる。
% echo 203 > /sys/class/gpio/export
% echo out > /sys/class/gpio/gpio203/direction
% echo 1 > /sys/class/gpio/gpio203/value
% echo 0 > /sys/class/gpio/gpio203/value
% echo in > /sys/class/gpio/gpio203/direction
% cat /sys/class/gpio/gpio203/value
% echo 203 > /sys/class/gpio/unexport
シリアルポート
シリアルポートを使えば通信もできる。
/dev/ttyS1 (UART1)
/dev/ttyS2 (UART2)
% stty -F /dev/ttyS1 -a
% stty -F /dev/ttyS1 115200
% echo unko > /dev/ttyS1
RTS/CTSを有効にする方法はよくわからない。
ファイルシステムをread-onlyにする
Raspberry Piでもそうだが、ファイルの書き込みキャッシュがフラッシュされない状態で電源が切れたとき(電源ブチ切り®)などに、ファイルシステムが壊れてしまうことがよくある。
また、長期にわたるログの出力や、スワップ領域をSDカードに設けることで、フラッシュメモリーの書き換え寿命が一気に縮まるなどの問題がある。
組込みシステムとして運用する場合は、なるべくSDカードへ書き込まないようにしておく必要がある。
初期状態ではOverlayfsが有効になっている。
overlay on / type overlay (rw,relatime,lowerdir=/root,upperdir=/data/root,workdir=/data/work)
/dev/mmcblk0p1 /boot
/dev/mmcblk0p2 lowerdir
/dev/mmcblk0p3 upperdir
という構成になっている。
これを / へマウントしなおして( mount --bind )、fstabによる最終的なファイルシステム構成になる。
rootfs を展開して起動スクリプトを編集する。
出てきた起動スクリプトを確認してみよう。
init から scripts/local などのサブルーチンが呼び出されていることがわかる。
mount overlay を行っている部分を変更して、現在のlowerdirとupperdirに指定されている領域をマージしたうえで改めてlowerdirとし、upperdirはメモリーファイルシステム(tmpfs)へ置き換える。
% mkdir /tmp/rootfs
% cd /tmp/rootfs
% zcat /boot/rootfs.cpio.gz | cpio -i
% vi scripts/local
----------
local_mount_overlay()
+ [ ! -d /memfs ] && mkdir -p /memfs
+ mount -t tmpfs -w -o size=10% tmpfs /memfs
+ mkdir -p /memfs/root
+ mkdir -p /memfs/work
+ mount -t overlay overlay -o lowerdir=${datamnt}/root:${rootmnt},upperdir=/memfs/root,workdir=/memfs/work /overlay
----------
rootfsファイルをつくる
% mv /root/rootfs.cpio.gz /root/rootfs.cpio.gz.org
% find . | cpio -R 0:0 -o -H newc | gzip > /tmp/rootfs.cpio.gz
% cp /tmp/rootfs.cpio.gz /root
fstab を編集して /bootをroに、swapを削除する
% vi fstab
----------
/dev/mmcblk0p1 /boot vfat ro,defaults 0 0
# /mnt/512MB.swap none swap sw 0 0
----------
この記事が気に入ったらサポートをしてみませんか?