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

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

9.1. 起動処理

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

  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-840の/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-840の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-840のデフォルト状態で登録されている初期化スクリプトを表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を設定します
S50pvrsrvPowerVR SGX540の初期化を行います
S55firewall, S56networking, S57inetdネットワーク関連の初期化を行い、インターネットスーパーサーバー(inetd)を起動します
S60avahi, S60lighttpd, S60sshdネットワークデーモンを起動します
S90rc.localコンフィグ領域(/etc/config/)に保存されたrc.localを実行します

9.1.4. /etc/config/rc.local

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

Armadillo-840では、システム起動時に自動的にQtサンプルアプリケーションのphotoviewerを起動させたり、AVコーデックミドルウェアのファームウェアをロードするために利用しています。photoviewerは自動起動させないように設定したり、AVコーデックミドルウェアを使わない場合はファームウェアをロードしないように設定できます。

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

#!/bin/sh

. /etc/init.d/functions

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

# First read /etc/profile
test -f /etc/profile && . /etc/profile

#
# Starting a default application
#
START_PHOTOVIEWER_WITH_QMLSCENE=y 1
if [ "${START_PHOTOVIEWER_WITH_QMLSCENE}" = "y" ]; then
        echo -n "Starting photoviewer: "
        qmlscene /usr/share/qt5/photoviewer/photoviewer.qml >/dev/null 2>&1 &
        check_status
fi

#
# for AV Codec Midleware
#   - load firmware
#
ACM_CODEC=decoder 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"に設定を変更してコンフィグ領域を保存すると、次回起動時にphotoviewerが自動起動されないようになります

2

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

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


[注記]

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

[armadillo ~]# flatfsd -w

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

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

  • /bin

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

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