NSB-3NR1T1MLV をLinux箱として使う (準備: インタフェースへのアクセス方法調査)

# はじめに

ELECOMのNSB-3NRVシリーズはLinux搭載のNASです。LANを4ポート持っていたり、シリアルポートが出ているなど、NASとは無関係の方向でがんばっているハードウェアが特徴です。最近お安くなったせいか解析情報がちらほら出てきました。

1TBモデル NSB-3NR1T1MLV を先日入手しました。NASとして使う気は毛頭無く、ただのLinux箱にするつもりです。
手始めに各種インタフェースへのアクセス方法を調べました。

# 準備

1. NSB-3NR1T1MLV (本体)
ファームウェアは購入時(1.05-1514)のままアップデートしていません。

1. CISCO準拠のシリアルケーブル
先端がRJ-45になっているシリアルケーブルです。私はUSB接続のものを買いました。

1. ターミナルエミュレータ
シリアル通信ができるもの。Tera Term とか PuTTY とか RLogin とかお好みでどうぞ。

# 構成図

NSB-3NR1T1MLVに接続されている諸々の部品をLinuxからいじるためのインタフェースを図にしました。

![NSB-3NRV デバイス構成図](https://qiita-image-store.s3.amazonaws.com/0/222512/2662428c-a421-202f-e3d3-204f568c7aa1.png)

## RS-232C

CISCO準拠のシリアルケーブルを背面CONSOLE端子に接続すると、115200bpsで通信できます。
電源オンでU-BOOTが表示された後、Linuxが立ち上がる様子をみることができます。そのままrootログインも可。

## GPIO

ボタン・ブザー・LED・OLED(前面ディスプレイ)がGPIOに接続されています。
通常は `/usr/bin/lcdNotifyD` がこれらのGPIOを制御しています。

## ボタン

|GPIO|I/O|機能|value=0|value=1|
|:-:|:-:|:--|:-:|:-:|
|GPIO80|IN|ボタン(Display)|押した|離した|
|GPIO79|IN|ボタン(Function)|押した|離した|
|GPIO37|IN|ボタン(初期化)|押した|離した|

本体前面のDisplayボタンとFunctionボタン、それと底面の初期化ボタンはGPIOで読み取ることができます。

表のvalueは、 `/sys/class/gpio/gpio**/value` の意味です。

```
# echo 79 > /sys/class/gpio/export
# cat /sys/class/gpio/gpio79/value  # ボタンを押した状態で
0
# cat /sys/class/gpio/gpio79/value  # ボタンを離した状態で
1
```

電源ボタンはよく分かっていません。 `/sbin/pwr-test` がボタンを監視しているようです。

### ブザー

|GPIO|I/O|機能|value=0|value=1|
|:-:|:-:|:--|:-:|:-:|
|GPIO86|OUT|ブザー|停止|鳴動|

音階は調整できなさそうです。

ちなみにGPIOへの書き込みはこんな感じで。

```
# echo 1 > /sys/class/gpio/gpio86/value  # ブザーを鳴らす
# echo 0 > /sys/class/gpio/gpio86/value  # ブザーを止める
```

## OLED

|GPIO|I/O|機能|value=0|value=1|
|:-:|:-:|:--|:-:|:-:|
|GPIO64|OUT|OLED(?)|OFF|ON|
|GPIO65|OUT|OLED(?)|OFF|ON|
|GPIO66|OUT|OLED(SCL)|L|H|
|GPIO67|OUT|OLED(SDA)|L|H|

本体前面のディスプレイは16文字2行のOLEDです。I2Cで表示制御します。コマンドはSO1602と似ています。
残念ながら、OLEDは `/dev/i2c-0` とはつながっておらず、ソフトでGPIOを制御してSDA・SCLを生成することになります。
詳細は長くなるのでまた後日。

## LED

|GPIO|I/O|機能|value=0|value=1|
|:-:|:-:|:--|:-:|:-:|
|GPIO84|OUT|LED(INFO: 橙)|消灯|点灯|
|GPIO54|OUT|LED(ERROR: 赤)|消灯|点灯|
|GPIO53|OUT|LED(HDD: 緑)|消灯|点灯|

本体前面の3個のLED(INFO・ERROR・HDD)はGPIOで制御可能です。

## Ethernet

eth0はPHY(RTL8211)を経由してINTERNETポートにつながります。

eth1はRTL8367RBに接続されています。このICは、「Layer 2 Managed 5+2-Port 10/100/1000M Switch Controller」とされています。ざっくりな理解では、RTL8367RBは4ポートのスイッチングハブで、3ポートはLAN端子、1ポートは本体内部でeth1と1000Base-T接続していると考えればそれほど間違っていないかと。
http://www.realtek.com/products/productsView.aspx?Langid=1&PNid=18&PFid=15&Level=5&Conn=4&ProdID=300
カーネルモジュール(rtl83xx)をioctlでいじるとRTL8367RBの潜在能力を解放できそうな感じです。

ちなみに本機を普通に使うとeth1はdownしたままですが、LAN1～LAN3は3ポートのスイッチングハブとして振る舞うようです。

eth2は使えません。

## ファン制御

`/dev/i2c-0` 経由でAMC6821が接続されています。冷却用のファン制御と温度測定をするICですが、本機にはファンは付いていません。おそらく、2ベイモデルのNSB-3MSシリーズのファン制御用なのでしょう。
温度は読み出せます。下の例では0x1E = 30℃。

```
# i2c_test -a 0x4d -s 1 -o 0xb -r
read phy 0x4D register 0xB = 0x1E
```

## 外部記憶

HDDとは別に、512MBのFlashを内蔵しています。システムは内蔵Flashに入っており、HDDは基本的にデータ専用。
ルートファイルシステムは組み込みLinuxらしく凝った作りになっています。ファイルシステムの構造については参考情報をご覧ください。

## USB

特に調べていません。

# まとめ

* NSB-3NR1T1MLVの各種インタフェースをLinuxからアクセスする方法を調べました。
* Ethenetは、内部から見えるインタフェースはeth0・eth1の2つで、eth0はINTERNET端子に対応。eth1はスイッチングハブIC(RTL8367RB)を経由してLAN1～LAN3端子と接続されています。
* その他多くのインタフェースはGPIO接続です。前面ディスプレイ(OLED)の表示制御には、ソフトでGPIOを制御してI2C通信信号(SDA・SCL)を生成する必要があります。

# 参考情報

1. [テックアップナウ！ - NSB-3NRシリーズNAS : 中身1](https://tech-up-now.com/nsb3nr-inside-1)
rootログインして、システムの中を探索されています。

1. [Qiita - NSB-3NR1T1MLV を分解してみた](https://qiita.com/Diatryma/items/ba407794032dd624130e)
分解方法、本体内部の写真や主要部品の情報。おかげさまで私は本体を開けずに済んでいます。

1. [ともちゃ日記 - エレコム NSB-3NR1T1MLV NetStor/NSB-3NRVシリーズ/BOX型LinuxNAS/1Bay/1TB](http://tomocha.net/diary/?http://tomocha.net/diary/?20171119)
HDD換装、NASとしての性能測定など。