TOP > OBDN - 開発者向け情報 > 技術ガイド

セルフ開発環境構築

セルフ開発環境構築

この文書では、OpenBlocks IoT BX1で開発をする場合に、参考になる事柄を説明します。

IoT BX1のOSはDebian(アーキテクチャはx86)です。 同じアーキテクチャの、高性能な別のホストで開発して、その成果一式をIoT BX1にコピーするのが一般的です。 しかし、あまり大規模でなければ、IoT BX1上でセルフ開発する利便性が勝りますので、この文書が役立つでしょう。

PCへの接続

PCへの接続

IoT BX1本体にUSBケーブルを接続し、PCのUSBポートに挿入します。 Windowsに、USBシリアル変換アダプタのドライバがインストールされます。

端末エミュレータ

Windowsで端末エミュレータソフトウェアを起動して、シリアル接続します。 端末エミュレータの設定は、以下の通りです。

項目 値
ボー・レート 115200
データ 8bit
パリティ none
ストップ 1bit
フロー制御 none

ログイン

rootでログインします。

項目 値
ユーザ root
パスワード root

低消費電力設定

USBシリアルの電源を自動制御か常にONに設定にします。 自動制御に設定すると、低消費電力に移行します。 Linux無負荷時、約60mAから約35mAに低下します。 低消費電力時には、シリアルコンソールからのキー入力の最初の1打目を取りこぼします。 再入力してください。 シリアルコンソールでの作業中は、常にONに設定しておくのがよいでしょう。

自動制御

# echo auto > /sys/devices/pci0000:00/0000:00:04.3/power/control

常にON

# echo on > /sys/devices/pci0000:00/0000:00:04.3/power/control

時刻設定

年月日または時刻が合っていない場合、次のコマンド

# date MMDDhhmmCCYY

を実行して、時刻を合せてください。

項目 値
MM 月(01-12)
DD 日(1-31)
hh 時(00-23)
mm 分(00-59)
CC 20(西暦年上二桁、省略可能)
YY 西暦年下二桁

RAMディスクモードとストレージ併用モード

IoT BX1の起動には、ふたつのモードがあります。 ひとつは、ストレージを使わないRAMディスクモード、もうひとつは、ストレージを使うストレージ併用モードです。

RAMディスクモード

工場出荷時は、RAMディスクモードで起動しています。 小規模の開発ならば、RAMディスクモードですませられます。 ファイルシステムの容量が足りない場合には、ストレージモードで起動してください。

# df
Filesystem 1K-blocks Used Available Use% Mounted on rootfs 178488 152218 17054 90% / /dev/root 178488 152218 17054 90% / devtmpfs 459656 0 459656 0% /dev tmpfs 98544 216 98328 1% /run tmpfs 5120 0 5120 0% /run/lock tmpfs 197080 0 197080 0% /run/shm tmpfs 393216 296 392920 1% /.rw aufs 393216 296 392920 1% /etc aufs 393216 296 392920 1% /bin aufs 393216 296 392920 1% /home aufs 393216 296 392920 1% /lib aufs 393216 296 392920 1% /sbin aufs 393216 296 392920 1% /usr aufs 393216 296 392920 1% /var aufs 393216 296 392920 1% /root aufs 393216 296 392920 1% /opt aufs 393216 296 392920 1% /srv aufs 393216 296 392920 1% /media /dev/mmcblk0p5 1003 19 913 3% /factory

RAMディスクモードでファイルシステムを変更した場合、保存しないで再起動すると、変更した内容を失います。 変更を保存するには、次のコマンド

#  flashcfg -S

を実行します。

保存した変更を削除するには、次のコマンド

# flashcfg -e

を実行します。

ストレージ併用モード

ストレージ併用モードで起動するには、以下のコマンド

# e2label /dev/mmcblk0p10 DEBIAN
# reboot

を実行します。

# df
Filesystem      1K-blocks   Used Available Use% Mounted on
rootfs             178488 152203     17069  90% /
/dev/root          178488 152203     17069  90% /
devtmpfs           459656      0    459656   0% /dev
tmpfs               98544    216     98328   1% /run
tmpfs                5120      0      5120   0% /run/lock
tmpfs              197080      0    197080   0% /run/shm
/dev/mmcblk0p10   2337308   4148   2316776   1% /.rw
aufs              2337308   4148   2316776   1% /etc
aufs              2337308   4148   2316776   1% /bin
aufs              2337308   4148   2316776   1% /home
aufs              2337308   4148   2316776   1% /lib
aufs              2337308   4148   2316776   1% /sbin
aufs              2337308   4148   2316776   1% /usr
aufs              2337308   4148   2316776   1% /var
aufs              2337308   4148   2316776   1% /root
aufs              2337308   4148   2316776   1% /opt
aufs              2337308   4148   2316776   1% /srv
aufs              2337308   4148   2316776   1% /media
/dev/mmcblk0p5       1003     19       913   3% /factory

RAMディスクモードに変更するには、以下のコマンド

# e2label /dev/mmcblk0p10 ""
# e2label /dev/mmcblk0p10

# reboot

を実行します。

ストレージの初期化

ストレージ併用モードで使用したストレージの初期化は、以下の手順で実行します。

RAMディスクモードで起動し、ストレージをマウントします。

# mount /dev/mmcblk0p10 /mnt/

ストレージに残っているディレクトリを、lost+foundとrootディレクトリを除いて、削除します。

# cd /mnt/
# ls
bin  etc  home  lib  lost+found  media  opt  root  sbin  srv  usr  var
# rm -fr bin/ etc/ home/ lib/ media/ opt/ sbin/ srv/ usr/ var/

ストレージをアンマウントします。

# cd /
# umount /mnt/

参考
工場出荷時のストレージのrootディレクトリには、以下のファイルが存在します。

.ash_history  crashlog_00001  otp.bin

無線LANの設定

無線LANの設定をします。

項目 値
SSID SSID
パスフレーズ パスフレーズ

SSIDのパスフレーズの暗号化

wpa_passphraseコマンドで、SSIDのパスフレーズを暗号化します。

# wpa_passphrase SSID パスフレーズ
network={
        ssid="SSID"
        #psk="パスフレーズ"
        psk=暗号化されたパスフレーズ
}

インタフェースの設定

ファイル/etc/network/interfacesに以下の行を追記します。

auto wlan0
iface wlan0 inet dhcp
            wpa-ssid SSID
            wpa-psk 暗号化されたパスフレーズ
            wpa-ap-scan 1
            wpa-key_mgmt WPA-PSK
            wpa-proto WPA RSN
            wpa-pairwise CCMP TKIP
            wpa-group CCMP TKIP

参考ページ

HOWTO: Wireless Security - WPA1, WPA2, LEAP, etc.

インタフェースのup

インタフェースwlan0をupします。

# ifup wlan0
# ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr fc:c2:de:XX:XX:XX
          inet addr:192.168.10.84  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: YYYY:YYYY:YYYY:YYYY:fec2:deff:feXX:XXXX/64 Scope:Global
          inet6 addr: fe80::fec2:deff:feXX:XXXX/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:50750 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24470 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:73133239 (69.7 MiB)  TX bytes:1656666 (1.5 MiB)

設定の保存

設定を保存するために、次のコマンド

# flashcfg -S

を実行します。

注意
再起動する前に、一度実行すればよいです。 また、ストレージ併用モードでは、不要です。

NTPの設定

パッケージntpdateとntpをインストールするために、以下のコマンド

# apt-get update
# apt-get install ntpdate ntp
# apt-get clean

を実行します。

NTPサーバと時刻を同期させるため、次のコマンド

# ntpdate -u NTPサーバ名

を実行します。

ファイルシステムの変更を保存

ファイルシステムの変更を保存するために、次のコマンド

# flashcfg -S

を実行します。

注意
再起動する前に、一度実行すればよいです。 また、ストレージ併用モードでは、不要です。

セルフ開発環境

gccやmakeコマンドを含むパッケージbuild-essentialをインストールするために、以下のコマンド

# apt-get update
# apt-get install build-essential
# apt-get clean

を実行します。

ファイルシステムの変更を保存

ファイルシステムの変更を保存するために、次のコマンド

# flashcfg -S

を実行します。

注意
再起動する前に、一度実行すればよいです。 また、ストレージ併用モードでは、不要です。

helloのコンパイル

上で用意したセルフ開発環境を使う例として、helloのコンパイルとインストールをしてみます。

# wget http://ftp.gnu.org/gnu/hello/hello-2.9.tar.gz
# tar zxpvf hello-2.9.tar.gz
# mkdir build
# cd build/
# ../hello-2.9/configure
# make
# ./src/hello
Hello, world!

ディレクトリ/var/tmp/への仮インストールします。

#  make install DESTDIR=/var/tmp/

ディレクトリ/var/tmp/に仮インストールしたファイルをアーカイブファイルに格納して、他のIoT BX1にコピーして、利用することができます。

LEDの点滅の仕方の変更

LEDの点滅は、runledデーモンで制御しています。 設定ファイル/tmp/.runledを変更すれば、点滅の仕方を変更することができます。

設定ファイル

/tmp/.runled

注意

設定ファイルを変更すると、すぐに反映されます。

書式

設定ファイル/tmp/.runledの書式は、以下の通りです。

行 値 意味
1 1以上の整数 点灯時間(ms)
2 0以上の整数 消灯時間(ms)
3 0,1,...,7 色
値 色
0 黒
1 赤
2 緑
3 黄
4 青
5 マゼンタ
6 シアン
7 白

例

マゼンタを1秒間隔で点滅させる

# echo -e "1000\n1000\n5" > /tmp/.runled

白を点灯し続ける

# echo -e "5000\n0\n7" > /tmp/.runled

LEDの操作

LEDはrunledデーモンで制御されています。 ここでは、runledデーモンを停止して、手動でGPIOを操作して、LEDを明滅してみます。

runledデーモンの停止

runledデーモンを停止するには、次のコマンドを実行します。

# /etc/init.d/runled stop

起動するには、次のコマンドを実行します。

# /etc/init.d/runled start

GPIOとLED

GPIOの番号とLEDの割り当ては以下の通りです。

番号 RGB 色
47 R 赤
48 G 緑
49 B 青

例

runledデーモンが起動していたため、LEDは操作できるようになっています。 以下では、操作できないようになっているものと仮定します。 それは、操作の可否をいかに実行するかを示すためです。

ディレクトリ/sys/class/gpio/に移動します。

# cd /sys/class/gpio/

lsコマンドを実行します。

# ls
export   gpio125  gpio127  gpio129  gpio131  gpio133  gpiochip0
gpio124  gpio126  gpio128  gpio130  gpio132  gpio134  unexport
シンボリックリンクgpio47, gpio48, gpio49は、存在しません。

LEDのB(GPIO #49)を操作できるようにします。

# echo 49 >export
# ls
export   gpio125  gpio127  gpio129  gpio131  gpio133  gpio49     unexport
gpio124  gpio126  gpio128  gpio130  gpio132  gpio134  gpiochip0
シンボリックリンクgpio49が作成されました。

点灯してみます。

# ls
active_low  device  direction  edge  power  subsystem  uevent  value
# echo out >direction
# echo 1 >value

消灯します。

# echo 0 >value

LEDのB(GPIO #49)を操作できないようにします。

# cd ..
# echo 49 >unexport
# ls
export   gpio125  gpio127  gpio129  gpio131  gpio133  gpiochip0
gpio124  gpio126  gpio128  gpio130  gpio132  gpio134  unexport
シンボリックリンクgpio49が削除されました。

8色

色を混ぜれば、8色を表現できます。 下記の表は、GPIOの番号(RGB)と変数valueの値との組合せで、どんな色が光るかを表します。

49(B) 48(G) 47(R) 色
0 0 0 黒
0 0 1 赤
0 1 0 緑
0 1 1 黄
1 0 0 青
1 0 1 マゼンタ
1 1 0 シアン
1 1 1 白

参考文書

GPIO Interfaces

BT

BTの有効化

BTを有効にするために、以下のコマンドを実行します。

# bluetooth_rfkill_event &
[1] 2189
1417470850.095051: idx 2 type 2 op 0 soft 1 hard 0
# rfkill unblock bluetooth
1417470864.473356: idx 2 type 2 op 2 soft 0 hard 0
# execute brcm_patchram_plus --use_baudrate_for_download --no2bytes --enable_fork
 --enable_lpm --enable_hci --baudrate 3000000 --patchram /etc/firmware/bcm43341.hcd
  --bd_addr 98:4F:EE:02:EA:07 /dev/ttyMFD0
Done setting line discipline
1417470864.941364: idx 3 type 2 op 0 soft 0 hard 0[Enter]

# hciconfig
hci0:   Type: BR/EDR  Bus: UART
        BD Address: XX:XX:XX:XX:XX:XX  ACL MTU: 1021:8  SCO MTU: 64:1
        UP RUNNING
        RX bytes:584 acl:0 sco:0 events:27 errors:0
        TX bytes:412 acl:0 sco:0 commands:27 errors:0

BLE機器との接続

BLE機器をスキャンするために、以下のコマンドを実行します。

# hcitool lescan
LE Scan ...
YY:YY:YY:YY:YY:YY (unknown)
YY:YY:YY:YY:YY:YY SensorTag
^C

みつかったBLE機器に接続するために、以下のコマンドを実行します。

# gatttool -b YY:YY:YY:YY:YY:YY -I
[YY:YY:YY:YY:YY:YY][LE]> connect
Attempting to connect to YY:YY:YY:YY:YY:YY
Connection successful
[YY:YY:YY:YY:YY:YY][LE]> primary
attr handle: 0x0001, end grp handle: 0x000b uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x000c, end grp handle: 0x000f uuid: 00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x0010, end grp handle: 0x0022 uuid: 0000180a-0000-1000-8000-00805f9b34fb
attr handle: 0x0023, end grp handle: 0x002a uuid: f000aa00-0451-4000-b000-000000000000
attr handle: 0x002b, end grp handle: 0x0035 uuid: f000aa10-0451-4000-b000-000000000000
attr handle: 0x0036, end grp handle: 0x003d uuid: f000aa20-0451-4000-b000-000000000000
attr handle: 0x003e, end grp handle: 0x0048 uuid: f000aa30-0451-4000-b000-000000000000
attr handle: 0x0049, end grp handle: 0x0054 uuid: f000aa40-0451-4000-b000-000000000000
attr handle: 0x0055, end grp handle: 0x005c uuid: f000aa50-0451-4000-b000-000000000000
attr handle: 0x005d, end grp handle: 0x0061 uuid: 0000ffe0-0000-1000-8000-00805f9b34fb
attr handle: 0x0062, end grp handle: 0x0068 uuid: f000aa60-0451-4000-b000-000000000000
attr handle: 0x0069, end grp handle: 0x0073 uuid: f000ccc0-0451-4000-b000-000000000000
attr handle: 0x0074, end grp handle: 0xffff uuid: f000ffc0-0451-4000-b000-000000000000
[YY:YY:YY:YY:YY:YY][LE]> quit
#

起動しなくなった場合

ファームウェアの更新に失敗するなどして、起動しなくなった場合の復旧方法を説明します。

U-Bootのプロンプト

シリアルコンソールで、以下の文字列

*** Ready to receive application ***

が表示されたら、U-Bootのプロンプトが表示されるまで、スペースバーを2回以上連打します。

******************************
PSH KERNEL VERSION: b0182727
                WR: 20104000
******************************

SCU IPC: 0x800000d0  0xfffce92c

PSH miaHOB version: TNG.B0.VVBD.0000000c

microkernel built 23:15:13 Apr 24 2014

******* PSH loader *******
PCM page cache size = 192 KB
Cache Constraint = 0 Pages
Arming IPC driver ..
Adding page store pool ..
PagestoreAddr(IMR Start Address) = 0x04899000
pageStoreSize(IMR Size)          = 0x00080000

*** Ready to receive application ***


U-Boot 2014.04 (Aug 20 2014 - 16:08:32)

       Watchdog enabled
DRAM:  980.6 MiB
MMC:   tangier_sdhci: 0
In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0
boot >

Yoctoの起動

IoT BX1には、緊急用OSとしてYoctoを搭載しています。 Yoctoを起動するために、次のコマンド

boot > run bootYocto

を実行します。

ログイン

rootでログインします。 パスワードは不要です。

edison login: root

注意

文字を入力した場合に、最初の1文字が表示されない場合があります。 その場合は、入力しなおしてください。

無線LAN

無線LANの設定ファイルを作成します。

# wpa_passphrase SSID パスフレーズ >/etc/wpa_supplicant/wpa_supplicant.conf
# vi /etc/wpa_supplicant/wpa_supplicant.conf
# cat /etc/wpa_supplicant/wpa_supplicant.conf
network={
        ssid="SSID"
        #psk="パスフレーズ"
        psk=暗号化されたパスフレーズ
        key_mgmt=WPA-PSK
        proto=WPA WPA2
        pairwise=CCMP TKIP
        group=CCMP TKIP
}

wpa_supplicantを起動するために、次のコマンド

# wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf &

を実行します。 DHCPサーバからIPアドレスを取得するために、次のコマンド

# udhcpc -i wlan0

を実行します。

ファームウェアのダウンロード

ファームウェアを置くパーティションをマウントするために、次のコマンド

# mount /dev/mmcblk0p8 /mnt/

を実行します。

不具合のあるファームウェアを削除するために、次のコマンド

# cd /mnt/
# rm bzImage
# rm ramdisk-wheezy.obsbx1.img.gz

を実行します。

ファームウェアは、ふたつのファイルからできています。

イメージ ファイル名
カーネル bzImage
RAMディスク ramdisk-wheezy.obsbx1.img.gz

wgetコマンドでファームウェアをダウンロードします。 以下は、FTPサーバからファームウェアをダウンロードする例です。

# wget ftp://ユーザ名:パスワード@FTPサーバ名/bzImage
# wget ftp://ユーザ名:パスワード@FTPサーバ名/ramdisk-wheezy.obsbx1.img.gz

を実行します。

再起動

ファームウェアを置いたパーティションをアンマウントしてから再起動します。

# cd /
# umount /mnt/
# reboot
目次に戻る

ページの先頭へ戻る