TOPOBDN - 開発者向け情報技術ガイド

セルフ開発環境構築

セルフ開発環境構築

この文書では、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
目次に戻る

ページの先頭へ戻る