LoginSignup
6
4

More than 5 years have passed since last update.

ZYBO (Zynq) 初心者ガイド (15) Linux起動時にアプリケーションを自動実行させる

Last updated at Posted at 2018-01-13

環境

  • 開発用PC: Windows 10 64-bit
    • Vivado 2017.4 WebPACKライセンス
    • Xilinx SDK 2017.4 <- 今回は未使用
  • 開発用PC (Linux): Ubuntu 16.04 本家 (日本語版じゃない) (on VirtualBox 5.2.4)
    • PetaLinux 2017.4
  • ターゲットボード: ZYBO (Z7-20)

Linux起動時にアプリケーションを自動実行させる

前回の内容で、自作のユーザアプリケーションをRootFSにインストールすることが出来ました。これによって、作成したアプリケーションをZYBO上で実行することが出来ます。しかし、実際のプロダクトだと、お客さんはコマンドを打って実行をするなんてことはできません。

今回は、自作したアプリケーションをLinux起動時に自動実行させるということをやります。

前回の続きとして、/usb/bin/blink1がすでにあるものとします。今回は、このアプリケーションを起動時に実行させます。

起動スクリプトの作成

方針としては、起動スクリプト(/etc/init.d/myinit)をインストールして、そのスクリプトで任意のアプリケーションを呼ぶようにします。結果として、自作アプリケーションがデーモンとして実行されます。今回は、直接blink1を呼ぶのではなく、myinit_run.shというblink1を呼ぶだけのシェルスクリプトを間に挟みます。これは、省略できます。が、今後、何か起動時の処理を変更したいときは、myinit_run.shをいじるだけでOKになります。

  • 起動 -> /etc/init.d/myinit -> /usb/bin/myinit_run.sh -> /usb/bin/blink1

下記コマンドで、myinitというアプリケーションを作ります。これは、Cプログラムではなく、シェルスクリプトを取り込む(インストールする)だけのアプリケーションです。
myinit.bbはビルド/パッケージ化(petalinux-build -x package)するときの処理が書かれているレシピになります。使用するファイルはmyinitmyinit_run.sh(後で自分で新規作成する)です。myinitを起動スクリプトとするので、/etc/init.d/にコピーするようにします。myinit_run.shに実際に処理する内容を書きます。これはひとまず/usr/binにコピーすることにします。

開発PCのターミナル
petalinux-create -t apps --template install -n myinit --enable
code project-spec/meta-user/recipes-apps/myinit/myinit.bb &
code project-spec/meta-user/recipes-apps/myinit/files/myinit &
code project-spec/meta-user/recipes-apps/myinit/files/myinit_run.sh &
myinit.bb
#
# This file is the myinit recipe.
#

SUMMARY = "Simple myinit application"
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "file://myinit \
           file://myinit_run.sh \
          "

S = "${WORKDIR}"

inherit update-rc.d
INITSCRIPT_NAME = "myinit"
INITSCRIPT_PARAMS = "start 99 S ."

do_install() {
    # myinit is init daemon
    install -d ${D}${sysconfdir}/init.d
    install -m 0755 ${S}/myinit ${D}${sysconfdir}/init.d/myinit

    # myinit.sh is shell script called from myinit
    install -d ${D}${bindir}
    install -m 0755 myinit_run.sh ${D}${bindir}
}

FILES_${PN} += "${sysconfdir}/*"
myinit
#!/bin/sh

DAEMON=/usr/bin/myinit_run.sh

start ()
{
    echo " Starting myinit"
    start-stop-daemon -S -o --background -x $DAEMON
}

stop ()
{
    echo " Stoping myinit"
    start-stop-daemon -K -x $DAEMON
}

restart()
{
    stop
    start
}

[ -e $DAEMON ] || exit 1
    case "$1" in
        start)
            start; ;;
        stop)
            stop; ;;
        restart)
            restart; ;;
        *)
            echo "Usage: $0 {start|stop|restart}"
            exit 1
    esac
exit $?
myinit_run.sh
#!/bin/sh
blink1

myinit_run.shを使わない場合は、myinit内のDAEMON=/usr/bin/myinit_run.shDAEMON=blink1にする

image.ubの再作成

上記のように3つのファイルを編集したら、下記コマンドでimage.ubを再作成します。

petalinux-build -x package

確認する

出来上がったimage.ubをSDカードに上書きコピーして、ZYBOを起動します。

すると、自動的にLEDがチカチカするはずです。(ログインも不要です)

参考

https://japan.xilinx.com/support/documentation/sw_manuals_j/xilinx2017_2/ug1144-petalinux-tools-reference-guide.pdf
(起動用スクリプトは、ほぼ丸写しです。)

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4