Systemdを設定してLinuxを管理しよう!

開発環境の使い方

C/C++の場合

C/C++でプログラムを書く場合は、Yoctoの環境変数セットアップ スクリプトを実行します。

							$ . /opt/poky/2.1.1/environment-setup-cortexa8hf-neon-poky-linux-gnueabi
						

Cをコンパイルする場合は環境変数CCに、C++をコンパイルする場合は環境変数CXXに最低限のコマンド オプションが設定されているので、次のようにコンパイルできます。

							Cの例:
							$ $CC APS.c –o APS

							C++の例:
							$ $CXX APS.cc –o APS
						

もっと詳しく知りたい人は、ここを読んでね!

スクリプトの場合

Linuxは、Python, Perl, Shell Script等多くのスクリプトをサポートしています。

これらのスクリプトを使う場合は、SMARTでそれぞれのパッケージをインストールしてください。

図1
図2
図3

システムを管理するSystemdの紹介

Systemdの紹介

SystemdはLinuxシステムを管理するフレームワークです。従来のinitデーモンに替わるシステムの起動だけでなく、プロセス間通信・デバイス マネージャー・ロギング・コンテナやブートローダーなど多くのOSの基本機能を提供します。Red Hat Enterprise Linux, Ubuntuを始め、AtlasボードにプリインストールされているAngstrom等多くのLinuxディストリビューションがSystemdを採用しています。

Systemdを有効にしてビルドします。

							pokyのディレクトリーで、
							$ . oe-init-build-env build.armv7

							conf/local.confの最後に
							DISTRO_FEATURES_append = " systemd"
							VIRTUAL-RUNTIME_init_manager = "systemd"
							DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
							VIRTUAL-RUNTIME_initscripts = "“
							を追加します。

							ビルド!
							$ bitbake core-image-sato
						

もっと詳しく知りたい人は、ここを読んでね!

ビルドした後はSMARTでインストールしてください。

図4

アプリを自動起動する方法

systemdはunitという単位でタスクの管理を行います。アプリを自動起動するには、下記のように登録します。

							aps-linux.service
							
							[Unit]
							Description=APS Linux sample script	# 起床待ち状態に移行

							[Service]
							Type=oneshot						# 管理方法を指定します。oneshotはアプリが実行完了した時点で終了と判断します
							ExecStart=/home/root/aps-linux.sh	# 実行するアプリを指定します

							[Install]
							WantedBy=multi-user.target			# どのタイミングでアプリを実行するかを指定します
						

/lib/systemd/system にunitファイルを保存します。続いて下記のコマンドを実行すると自動起動の設定が完了します。

							$ systemctl daemon-reload
							$ systemctl enable aps-linux
						

unitファイルの書き方をもっと詳しく知りたい人は、ここを読んでね!

Systemd全体をもっと詳しく知りたい人は、ここを読んでね!

自動起動できてるか確認!

							$ systemctl status aps-linux
							● aps-linux.service - APS Linux sample script
							   Loaded: loaded (/lib/systemd/system/aps-linux.service; enabled; vendor preset: enabled)
							   Active: activating (start) since Fri 2015-10-09 11:49:00 UTC; 21s ago
							 Main PID: 1221 (aps-linux.sh)
							   CGroup: /system.slice/aps-linux.service
							           ├─1221 /bin/sh /home/root/aps-linux.sh
							           └─1280 sleep 60

							Oct 09 11:49:00 atlas systemd[1]: Starting APS Linux sample script...

							60秒後
							$ systemctl status aps-linux
							● aps-linux.service - APS Linux sample script
							   Loaded: loaded (/lib/systemd/system/aps-linux.service; enabled; vendor preset: enabled)
							   Active: inactive (dead) since Fri 2015-10-09 11:50:01 UTC; 28s ago
							  Process: 1221 ExecStart=/home/root/aps-linux.sh (code=exited, status=0/SUCCESS)
							 Main PID: 1221 (code=exited, status=0/SUCCESS)

							Oct 09 11:49:00 atlas systemd[1]: Starting APS Linux sample script...
							Oct 09 11:50:01 atlas systemd[1]: Started APS Linux sample script.
						
							aps-linux.sh

							#!/bin/sh

							cd /sys/class/leds/fpga_led0
							echo timer > trigger
							sleep 0.1

							cd /sys/class/leds/fpga_led1
							echo timer > trigger
							sleep 0.1

							cd /sys/class/leds/fpga_led2
							echo timer > trigger
							sleep 0.1

							cd /sys/class/leds/fpga_led3
							echo timer > trigger
							sleep 0.1

							cd /sys/class/leds/fpga_led4
							echo timer > trigger
							sleep 0.1

							cd /sys/class/leds/fpga_led5
							echo timer > trigger
							sleep 0.1

							cd /sys/class/leds/fpga_led6
							echo timer > trigger
							sleep 0.1

							cd /sys/class/leds/fpga_led7
							echo timer > trigger
							sleep 60