第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ディレクトリに登録された初期化スクリプト

スクリプト初期化内容
S03udevdudevdを起動し、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_IFPLUGD=n 1
if [ "${START_IFPLUGD}" = "y" ]; then
	echo -n "Starting ifplugd: "
	ifplugd -i usb0 -p -q
	check_status
fi

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

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

1

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

2

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

3

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

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


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

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

9.3.1. ifplugd

ifplugdコマンドを使用して3Gの接続状態を監視します。

3G接続が切断されると、/etc/ifplugd/ifplugd.action内に記載された処理が実行され、3Gの再接続を行います。

9.3.2. thermalmonitor

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

Armadillo-IoTの筐体内温度が75℃以上になると、故障等を避けるため3Gモジュールを機内モードに設定し温度上昇を抑えます。その後、筐体内温度が70℃以下まで下がると3Gの再接続を行います。

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

#!/bin/sh

HOT_TEMP_MDEG=75000 1
HOT_TEMP_CMD='/etc/config/hot_temp_action' 2
HOT_TEMP_CMD_ARGS='' 3

PASSIVE_TEMP_MDEG=70000 4
PASSIVE_TEMP_CMD='/etc/config/passive_temp_action' 5
PASSIVE_TEMP_CMD_ARGS='' 6

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

1

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

2

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

3

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

4

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

5

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

6

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

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


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

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

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

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

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

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

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

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