第9章 ユーザーランド仕様

本章では、工場出荷状態のArmadillo-IoTのユーザーランドの基本的な仕様について説明します。

9.1. ルートファイルシステム

Armadillo-IoTの標準ルートファイルシステムは、Atmark Distで作成されたinitrdです。PCなどで動作する Linux システムでは、initrd は HDD などにあるルートファイルシステムをマウントする前に一時的に使用する「ミニ」ルートファイルシステムとして使用されます。Armadillo-IoT では、initrd をそのままルートファイルシステムとして使用します。

initrdはメモリ上に配置されるため、ファイルに加えた変更は再起動すると全て元に戻ってしまいます。例外として/etc/config/ディレクトリ以下のファイルは、flatfsdコマンドを利用してフラッシュメモリに保存することができます。このフラッシュメモリ領域をコンフィグ領域と呼びます。

コンフィグ領域を利用することで、設定ファイルなどへの変更を再起動後も保持することができるようになっています。コンフィグ領域のより詳細な情報については7章コンフィグ領域 − 設定ファイルの保存領域を参照してください。

9.2. 起動処理

Armadillo-IoTのユーザーランドの起動処理について説明します。ユーザーランドの起動処理は大きく分けて次の手順で初期化が行われています。

  1. Linuxカーネルが/sbin/initを実行し/etc/inittabのsysinitに登録されている/etc/init.d/rcスクリプトを実行

  2. rcスクリプトの中で、「/etc/rc.d/」ディレクトリの起動スクリプトを順次実行

  3. ローカル起動スクリプト(/etc/config/rc.local)を実行

  4. /etc/inittabのrespawnタブに登録されたものを実行

9.2.1. inittab

Linuxカーネルは、ルートファイルシステムをマウントすると、/sbin/initを実行します。initプロセスは、コンソールの初期化を行い/etc/inittabに記載された設定に従ってコマンドを実行します。

デフォルト状態のArmadillo-IoTの/etc/inittabは次のように設定されています。

::sysinit:/etc/init.d/rc

::respawn:/sbin/getty -L 115200 ttymxc1 vt102
#::respawn:/sbin/getty 38400 tty1 linux

::shutdown:/etc/init.d/reboot
::ctrlaltdel:/sbin/reboot

図9.1 デフォルト状態の/etc/inittab


inittabの書式は、次のようになっています。

id:runlevel:action:process

図9.2 inittabの書式


Armadillo-IoTのinitでは、"id"フィールドに起動されるプロセスが使用するコンソールを指定することができます。省略した場合は、システムコンソールが使用されます。"runlevel"フィールドは未対応のため利用できません。

"action"フィールド及び"process"フィールドは、どのような状態(action)のときに何(process)を実行するかを設定することができます。actionフィールドに指定可能な値を表9.1「inittabのactionフィールドに設定可能な値」に示します。

表9.1 inittabのactionフィールドに設定可能な値

processを実行するタイミング
sysinitinitプロセス起動時
respawnsysinit終了後。このアクションで起動されたプロセスが終了すると、再度processを実行する
shutdownシャットダウンする時
ctrlaltdelCtrl-Alt-Deleteキーの組み合わせが入力された時

9.2.2. /etc/init.d/rc

rcスクリプトでは、システムの基礎となるファイルシステムをマウントしたり、「/etc/rc.d/」ディレクトリ以下にあるSから始まるスクリプト(初期化スクリプト)が実行できる環境を構築します。その後、初期化スクリプトを実行していきます。初期化スクリプトは、Sの後に続く2桁の番号の順番で実行します。

9.2.3. /etc/rc.d/Sスクリプト(初期化スクリプト)

初期化スクリプトでは、システムの環境を構築するもの、デーモン(サーバー)を起動するものの2つの種類があります。Armadillo-IoTのデフォルト状態で登録されている初期化スクリプトを表9.2「/etc/rc.dディレクトリに登録された初期化スクリプト」に示します。

表9.2 /etc/rc.dディレクトリに登録された初期化スクリプト

スクリプト初期化内容
S03udevudevdを起動し、Linuxカーネルから発行されたueventをハンドリングします
S04flatfsdflatfsdを使いコンフィグ領域(/etc/config/)を復元します
S05checkrootシステム関連のファイルのパーミッション設定や、オーナーを設定します
S06checkftpFTPが利用するファイルやライブラリの配置、パーミッションの設定をします
S06mountdevsubfsudevd起動後にマウントする必要のあるファイルシステムをマウントします
S10syslogd, S20klogdログデーモンを起動します
S25module-init-tools/etc/modulesに記載されたカーネルモジュールをロードします
S30firewallファイヤーウォールの設定を行います
S30hostnamehostnameを設定します
S40networking,S60inetdネットワーク関連の初期化を行い、インターネットスーパーサーバー(inetd)を起動します
S70lighttpd, S71avahiネットワークデーモンを起動します
S99misc各種設定や初期化を行います
S99rc.localコンフィグ領域(/etc/config/)に保存されたrc.localを実行します

9.2.4. /etc/config/rc.local

コンフィグ領域に保存されたrc.localは、ユーザーランドイメージを変更することなく、起動時に特定の処理を行うことができるようになっています。

Armadill-IoTでは、システム起動時に自動的に各種状態監視アプリケーションを起動するために利用しています。出荷状態では状態監視アプリケーションを起動しない設定になっています。/etc/config/rc.localを編集することで、自動起動するように設定を行うことができます。

デフォルト状態の/etc/config/rc.localは次のように記載されています。

#!/bin/sh

. /etc/init.d/functions

PATH=/bin:/sbin:/usr/bin:/usr/sbin

#
# Starting a state monitoring applications
#
START_THERMALMONITOR=n 1
if [ "${START_THERMALMONITOR}" = "y" ]; then
	echo -n "Starting thermalmonitor: "
	/etc/config/thermalmonitor &
	check_status
fi

START_VINMONITOR=n 2
if [ "${START_VINMONITOR}" = "y" ]; then
	echo -n "Starting vinmonitor: "
	/etc/config/vinmonitor &
	check_status
fi

1

"n"から"y"に設定を変更してコンフィグ領域を保存すると、次回起動時にthermalmonitorが自動起動されるようになります

2

"n"から"y"に設定を変更してコンフィグ領域を保存すると、次回起動時にvinmonitorが自動起動されるようになります

図9.3 デフォルト状態の/etc/config/rc.local


9.3. 状態監視アプリケーション

/etc/config/rc.localから起動させることのできる状態監視アプリケーションについて説明します。

9.3.1. thermalmonitor

thermalmonitorはArmadillo-IoTの筐体内温度を監視するアプリケーションです。thermalmonitorの実行中はthermaltriggerコマンドを実行することができません。 thermaltriggerコマンドについては、「温度を監視する」を参照してください。

Armadillo-IoTの筐体内温度が危険温度以上になると、故障等を避けるため3Gデータ通信を終了し温度上昇を抑えます。その後、筐体内温度が安全温度以下まで下がると3Gの再接続を行います。

Armadillo-IoTに搭載されている3Gモジュールの種類によって、危険温度、安全温度が異なります。製品型番、搭載されている3Gモジュール、危険温度、安全温度の対応関係を表9.3「搭載3Gモジュールと危険温度、安全温度」に示します。

表9.3 搭載3Gモジュールと危険温度、安全温度

名称型番搭載3Gモジュール危険温度安全温度
Armadillo-IoT ゲードウェイ開発セットAG401-D00Z[a]Sierra Wireless製 MC809075℃以上70℃以下
Armadillo-IoT ゲートウェイ量産用 (3G 搭載)AG401-C00Z
Armadillo-IoT ゲードウェイG2 開発セットAG421-D00Z[b]Sierra Wireless製 HL854880℃以上75℃以下
Armadillo-IoT ゲートウェイG2 量産用 (3G 搭載)AG421-C00Z
Armadillo-IoT ゲートウェイG2 量産用 (3G 搭載、アンテナ付き)AG421-C01Z

[a] AG401-D01Z、AG401-D02Z は期間限定のキャンペーン品です。キャンペーン付属品以外の内容物はAG401-D00Z と同等です。

[b] AG421-D03Z、AG421-D04Zは期間限定のキャンペーン品です。キャンペーン付属品以外の内容物はAG421-D00Zと同等です。


thermalmonitorは搭載されている3Gモジュールを自動的に判別し、3Gモジュールに対応した処理を実行します。

thermalmonitorの設定はコンフィグ領域に保存された/etc/config/thermalmonitorを編集すると変更することができます。変更後、設定を保存したい場合はコンフィグ領域を保存してください。

#!/bin/sh

. /usr/share/3g/3g-common.sh

# 3G Module:MC8090 Parameters
HOT_TEMP_MDEG_MC8090=75000 1
HOT_TEMP_CMD_MC8090='/etc/config/hot_temp_action_mc8090' 2
HOT_TEMP_CMD_ARGS_MC8090='' 3
PASSIVE_TEMP_MDEG_MC8090=70000 4
PASSIVE_TEMP_CMD_MC8090='/etc/config/passive_temp_action_mc8090' 5
PASSIVE_TEMP_CMD_ARGS_MC8090='' 6

# 3G Module:HL8548 Parameters
HOT_TEMP_MDEG_HL8548=80000 7
HOT_TEMP_CMD_HL8548='/etc/config/hot_temp_action_hl8548' 8
HOT_TEMP_CMD_ARGS_HL8548='' 9
PASSIVE_TEMP_MDEG_HL8548=75000 10
PASSIVE_TEMP_CMD_HL8548='/etc/config/passive_temp_action_hl8548' 11
PASSIVE_TEMP_CMD_ARGS_HL8548='' 12

support_3g_hl8548_check
if [ $? -ne 0 ]; then
	HOT_TEMP_MDEG=$HOT_TEMP_MDEG_MC8090
	HOT_TEMP_CMD=$HOT_TEMP_CMD_MC8090
	HOT_TEMP_CMD_ARGS=$HOT_TEMP_CMD_ARGS_MC8090
	PASSIVE_TEMP_MDEG=$PASSIVE_TEMP_MDEG_MC8090
	PASSIVE_TEMP_CMD=$PASSIVE_TEMP_CMD_MC8090
	PASSIVE_TEMP_CMD_ARGS=$PASSIVE_TEMP_CMD_ARGS_MC8090
else
	HOT_TEMP_MDEG=$HOT_TEMP_MDEG_HL8548
	HOT_TEMP_CMD=$HOT_TEMP_CMD_HL8548
	HOT_TEMP_CMD_ARGS=$HOT_TEMP_CMD_ARGS_HL8548
	PASSIVE_TEMP_MDEG=$PASSIVE_TEMP_MDEG_HL8548
	PASSIVE_TEMP_CMD=$PASSIVE_TEMP_CMD_HL8548
	PASSIVE_TEMP_CMD_ARGS=$PASSIVE_TEMP_CMD_ARGS_HL8548
fi

while true
do
	thermaltrigger -a $HOT_TEMP_MDEG $HOT_TEMP_CMD $HOT_TEMP_CMD_ARGS
	thermaltrigger -b $PASSIVE_TEMP_MDEG $PASSIVE_TEMP_CMD $PASSIVE_TEMP_CMD_ARGS
done

3Gモジュール MC8090搭載時の設定値

1

危険温度のしきい値をミリ℃単位で設定します

2

危険温度のしきい値以上になった時に実行するコマンドを記載します

3

実行するコマンドの引数を記載します

4

安全温度のしきい値をミリ℃単位で設定します

5

安全温度のしきい値以下になった時に実行するコマンドを記載します

6

実行するコマンドの引数を記載します

3Gモジュール HL8548搭載時の設定値

7

危険温度のしきい値をミリ℃単位で設定します

8

危険温度のしきい値以上になった時に実行するコマンドを記載します

9

実行するコマンドの引数を記載します

10

安全温度のしきい値をミリ℃単位で設定します

11

安全温度のしきい値以下になった時に実行するコマンドを記載します

12

実行するコマンドの引数を記載します

図9.4 デフォルト状態の/etc/config/thermalmonitor


9.3.2. vinmonitor

vinmonitorはArmadillo-IoTの電源電圧を監視するアプリケーションです。主にArmadillo-IoTをバッテリー駆動させた場合を想定しています。vinmonitorの実行中はvintriggerコマンドを実行することができません。vintriggerコマンドについては、「電源電圧を監視する」を参照してください。

Armadillo-IoTの電源電圧が7V以下になると、突然の動作停止による保存データ破壊等を避けるためシステムをシャットダウンします。

vinmonitorの設定はコンフィグ領域に保存された/etc/config/vinmonitorを編集すると変更することができます。変更後、設定を保存したい場合はコンフィグ領域を保存してください。

#!/bin/sh

CRITICAL_VOLTAGE_MV=7000 1
CRITICAL_VOLTAGE_CMD='/etc/config/critical_voltage_action' 2
CRITICAL_VOLTAGE_CMD_ARGS='' 3

vintrigger -u $CRITICAL_VOLTAGE_MV $CRITICAL_VOLTAGE_CMD $CRITICAL_VOLTAGE_CMD_ARGS

1

危険電圧のしきい値をmV単位で設定します

2

危険電圧のしきい値以下になった時に実行するコマンドを記載します

3

実行するコマンドの引数を記載します

図9.5 デフォルト状態の/etc/config/vinmonitor


9.4. プリインストールアプリケーション

デフォルトのユーザーランドにインストールされているアプリケーションを一覧します。

  • /bin

    addgroup       e2fsck         ip             mount          setserial
    adduser        echo           ipaddr         mountpoint     sh
    amixer         ed             ipcalc         mpstat         sleep
    aplay          egrep          iplink         mt             ssh
    arecord        ethtool        iproute        mv             ssh-keygen
    ash            evtest         iprule         netflash       stat
    base64         expect         iptunnel       netstat        stty
    busybox        false          java           nice           su
    cat            fdflush        keytool        ntpclient      swmgr
    catv           fgrep          kill           pidof          sync
    chattr         flatfsd        linux32        ping           tar
    chgrp          fsck           linux64        ping6          tftp
    chmod          fsck.ext2      ln             pipe_progress  tip
    chown          fsync          login          powertop       touch
    conspy         ftp            lrz            printenv       true
    cp             ftpd           ls             ps             tune2fs
    cpio           getopt         lsattr         pwd            umount
    cttyhack       grep           lsz            reformime      uname
    date           gunzip         lzop           rev            usleep
    dd             gzip           mail           rm             vi
    delgroup       hostname       makemime       rmdir          watch
    deluser        htpasswd       mkdir          rpm            wget
    df             hush           mke2fs         run-parts      zcat
    dmesg          hwclock        mknod          scriptreplay
    dnsdomainname  ionice         mktemp         sed
    dumpkmap       iostat         more           setarch
  • /usr/bin

    3g-connect      dumpleases      logname         reset           timeout
    3g-disconnect   eject           lpq             resize          top
    3g-hl8548-led   env             lpr             rpm2cpio        tr
    3g-monitor      envdir          lsof            rtcwake         traceroute
    3g-phone-num    envuidgid       lspci           runsv           traceroute6
    3g-set-ap       ether-wake      lsusb           runsvdir        ts_calibrate
    3g-temp         expand          lua             rx              tty
    [               expr            luac            script          ttysize
    [[              fdformat        lzcat           sd-awlan-sel    udpsvd
    add-shell       fgconsole       lzma            seq             unexpand
    ar              find            lzopcat         setkeycodes     uniq
    arping          flock           md5sum          setsid          unix2dos
    awk             fold            mesg            setuidgid       unlzm 
    basename        free            microcom        sha1sum         unlzop
    beep            ftpget          mkfifo          sha256sum       unxz
    bunzip2         ftpput          mkpasswd        sha512sum       unzip
    bzcat           fuser           mosquitto_pub   showkey         uptime
    bzip2           get_device      mosquitto_sub   smemcap         users
    cal             get_driver      nc              softlimit       uudecod 
    chat            get_module      nmeter          sort            uuencode
    chpst           groups          nohup           spawn-fcgi      vi
    chrt            hd              nslookup        split           vintrigger
    chvt            head            od              strings         vlock
    cksum           hexdump         openvt          sudo            volname
    clear           hostid          passwd          sudoedit        wall
    cmp             id              patch           sum             wc
    comm            ifplugd         pgrep           sv              wget
    crontab         install         pkill           systool         which
    cryptpw         ipcrm           pmap            tac             who
    curl            ipcs            printf          tail            whoami
    cut             iptables-xml    pscan           tcpsvd          whois
    dc              joe             pstree          tee             xargs
    deallocvt       kbd_mode        pwdx            telnet          xz
    diff            killall         readahead       test            xzca
    dirname         killall5        readlink        tftp            yes
    dos2unix        last            realpath        tftpd 
    dpkg-deb        less            remove-shell    thermaltrigger
    du              logger          renice          time
  • /sbin

    acpid              fsck.minix         makedevs           rmmod
    adjtimex           fsck.msdos         man                route
    arp                fsck.vfat          mdev               runlevel
    avahi-daemon       getty              mkdosfs            setconsole
    blkid              halt               mke2fs             slattach
    blockdev           hdparm             mkfs.ext2          sshd
    bootchartd         hwclock            mkfs.minix         start-stop-daemon
    chat               ifconfig           mkfs.msdos         sulogin
    depmod             ifdown             mkfs.vfat          swapoff
    devmem             ifenslave          mkswap             swapon
    dosfsck            ifup               modinfo            switch_root
    fbsplash           init               modprobe           sysctl
    fdisk              insmod             nameif             syslogd
    findfs             iwconfig           pivot_root         tunctl
    flash_erase        iwlist             poweroff           tune2fs
    flash_eraseall     iwpriv             pppd               udevadm
    flash_info         klogd              pppdump            udevd
    flash_lock         loadkmap           pppoe-discovery    udhcpc
    flash_unlock       logread            pppstats           vconfig
    freeramdisk        losetup            raidautorun        watchdog
    fsck               lsmod              reboot             zcip
  • /usr/sbin

    brctl                     ip6tables-save            sendmail
    chpasswd                  iptables                  setfont
    chroot                    iptables-restore          setlogcons
    crond                     iptables-save             svlogd
    dhcprelay                 lighttpd                  telnetd
    dnsd                      loadfont                  ubiattach
    fakeidentd                lpd                       ubidetach
    fbset                     nanddump                  ubimkvol
    ftpd                      nandwrite                 ubirmvol
    get-board-info            nbd-client                ubirsvol
    get-board-info-aiotg-std  ntpd                      ubiupdatevol
    httpd                     popmaildir                udhcpd
    inetd                     rdate                     visudo
    ip6tables                 rdev                      xtables-multi
    ip6tables-restore         readprofile

9.5. 有用なアプリケーションについて

デフォルトのユーザーランドにインストールされているアプリケーションの中から、いくつかをピックアップし概要を説明します。

表9.4 アプリケーション概要説明

アプリケーション概要
Rubyオブジェクト指向スクリプト言語です。
Javaオブジェクト指向プログラミング言語です。Armadillo-IoTではOracle Javaが使用可能です。
LuaC言語等のホストプログラムに組み込まれることを目的に設計されたスクリプト言語です。高速な動作と、高い移植性、組み込みの容易さが特徴です。
cURLファイルを送信または受信するコマンドラインツールです。幅広いインターネットプロトコルをサポートします。Armadillo-IoTでは、curlコマンドにて実行が可能です。
MosquittoMQTTブローカー/クライアントです。Armadillo-IoTでは、mosquitto_pubコマンド、mosquitto_subコマンドをプリインストールしています。