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

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

9.1. 起動処理

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

  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.1.1. inittab

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

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

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

::respawn:/sbin/getty -L 115200 ttySC2 vt102

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

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


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

id:runlevel:action:process

図9.2 inittabの書式


Armadillo-810の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.1.2. /etc/init.d/rc

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

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

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

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

スクリプト初期化内容
S01mtdフラッシュメモリのパーティション名に従ってMTDのデバイスファイルへのシンボリックリンクを作成します
S03flatfsdflatfsdを使いコンフィグ領域(/etc/config/)を復元します
S05udevdudevdを起動し、Linuxカーネルから発行されたueventをハンドリングします
S06mountdevsubfsudevd起動後にマウントする必要のあるファイルシステムをマウントします
S20checkrootシステム関連のファイルのパーミッション設定や、オーナーを設定します
S21checkftpFTPが利用するファイルやライブラリの配置、パーミッションの設定をします
S30syslogd, S31klogdログデーモンを起動します
S40mountその他のファイルシステムをマウントします
S45firmware/opt/firmwareに配置されたファームウェアファイルから/lib/firmware/ディレクトリにシンボリックリンクを作成します
S45module-init-tools/etc/modulesに記載されたカーネルモジュールをロードします
S50hostnamehostnameを設定します
S55firewall, S56networking, S57inetdネットワーク関連の初期化を行い、インターネットスーパーサーバー(inetd)を起動します
S60avahi, S60lighttpd, S60sshdネットワークデーモンを起動します
S90rc.localコンフィグ領域(/etc/config/)に保存されたrc.localを実行します

9.1.4. /etc/config/rc.local

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

Armadillo-810では、システム起動時に自動的にuvc-gadgetアプリケーションを起動させたり、AVコーデックミドルウェアのファームウェアをロードするために利用しています。カメラデバイス(/dev/video1)を他のアプリケーションで利用する場合は、uvc-gadgetを自動起動させないように設定したり、AVコーデックミドルウェアを使わない場合はファームウェアをロードしないように設定できます。

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

#!/bin/sh

. /etc/init.d/functions

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

#
# for USB Gadget "UVC Composite with ACM and RNDIS"
#   - activate UVC
#
USB_GADGET_IS_UVC_COMPOSITE=y 1
if [ "${USB_GADGET_IS_UVC_COMPOSITE}" = "y" ]; then
   /etc/init.d/uvc-gadget
fi

#
# for AV Codec Midleware
#   - load firmware
#
ACM_CODEC=encoder 2
if [ "${ACM_CODEC}" = "encoder" -o "${ACM_CODEC}" = "decoder" ]; then
   echo -n "load ${ACM_CODEC} firmware: "
   echo "${ACM_CODEC}" > /sys/devices/platform/acm.0/codec
   for i in 1 2 3 4 5; do
      sleep 1
      grep "\[${ACM_CODEC}\]" /sys/devices/platform/acm.0/codec > /dev/null
      if [ $? -eq 0 ]; then
         break
      else
         false
      fi
   done
   check_status
fi

1

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

2

"decoder"を指定しコンフィグ領域を保存すると、次回起動時にデコーダー用ファームウェアをロードするようになります。また、"encoder"か"decoder"以外の文字列を指定した場合は、ファームウェアをロードしません。

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


[注記]

AVコーデックミドルウェアのファームウェアロード処理は、romfs-a810-v1.04.img(Atmark Dist v20140131)で追加されました。ユーザーランドイメージ romfs-a810-v1.03.img以前(Atmark Dist v20131018以前)でArmadillo-840を起動したことがある場合は、次のようにコンフィグ領域を初期化すると次回起動時からファームウェアロード処理が行われるようになります。

[armadillo ~]# flatfsd -w

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

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

  • /bin

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

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

    acpid              fsck.msdos         mkdosfs            route
    adjtimex           fsck.vfat          mke2fs             runlevel
    arp                getty              mkfs.ext2          setconsole
    avahi-daemon       halt               mkfs.minix         slattach
    blkid              hdparm             mkfs.msdos         sshd
    blockdev           hwclock            mkfs.vfat          start-stop-daemon
    bootchartd         ifconfig           mkswap             sulogin
    chat               ifdown             modinfo            swapoff
    depmod             ifenslave          modprobe           swapon
    devmem             ifup               nameif             switch_root
    dosfsck            init               nanddump           sysctl
    dosfslabel         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
  • /usr/sbin

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