2024 年 10 月 01 日
組込み Linux「EMLinux」を使ってみよう
はじめに
本記事では、前回の記事 商用組込み Linux: EMLinux のご紹介 でご紹介した EMLinux を作成し、Web サーバである NGINX を EMLinux 上で動かします。手順の概要は以下になります。
- EMLinux の作成 ( 以降、EMLinux のビルドと呼びます )
- EMLinux のビルド設定をカスタマイズし NGINX をインストール
また本記事では、EMLinux および NGINX の動作確認のために、仮想マシンを作成できる OSS の QEMU を使います。
EMLinux の入手からビルド環境のセットアップまで
まず、ビルド環境を準備します。以下の記事の「評価環境の用意」から「EMLinux 3.0 のビルド ( ビルド用コンテナの起動前まで )」までの手順を実行し、EMLinux のディレクトリを展開してください。
なお、本記事では QEMU で EMLinux を動かすため、Raspberry Pi の実機をご用意いただく必要はありません。また、本記事では執筆時点の最新バージョンである EMLinux 3.1-202409 を使いました。
EMLinux を展開したディレクトリに移動してください。本記事では、以下のディレクトリに展開しました。
cd /home/emlinux/EMLinux_3.1-202409/source/emlinux-3.1-202409/
EMLinux のビルド用コンテナを起動するために、以下のディレクトリに移動してください。
cd repos/meta-emlinux/docker
EMLinux のビルド用コンテナを起動してください。
./run.sh
EMLinux のビルド用コンテナにログイン後、work ディレクトリに以下のファイルが保存されています。
build@37a3c680506c:~/work$ $ ls -l total 8 drwxr-xr-x 9 build build 4096 Sep 5 08:02 repos lrwxrwxrwx 1 build build 40 Sep 5 08:02 setup-emlinux -> repos/meta-emlinux/scripts/setup-emlinux drwxr-xr-x 2 build build 4096 Sep 5 08:02 setup-hooks
EMLinux のビルド設定のカスタマイズ
work ディレクトリにて、以下のコマンドを実行してください。
build@37a3c680506c:~/work$ source setup-emlinux build
上記実行後、build ディレクトリに自動で移動します。
build@37a3c680506c:~/work/build$
vim コマンドで、conf/local.conf ファイルを開いてください。
build@37a3c680506c:~/work/build$ vim conf/local.conf
conf/local.conf ファイルの末尾に以下を追記してください。
MACHINE = "qemu-arm64" IMAGE_PREINSTALL:append = " \ nginx \ "
上記を指定することで、NGINX がインストールされた ARM64 版の OS を作成することができます。
以下のように bitbake コマンドを実行し、EMLinux のビルドを実行します。
build@37a3c680506c:~/work/build$ bitbake emlinux-image-base
ビルドが完了しましたら、exit コマンドでコンテナからログアウトしてください。
build@37a3c680506c:~/work/build$ exit
QEMU で EMLinux を起動する
QEMU で EMLinux を起動するために必要なパッケージ(ソフトウェア)をインストールしてください。
$ sudo apt install qemu-system-arm seabios
build ディレクトリに移動してください。本記事では、/home/emlinux ディレクトリ配下で作業を行ったため、build ディレクトリは以下になります。
cd /home/emlinux/EMLinux_3.1-202409/source/emlinux-3.1-202409/build
vim などで run-vm.sh ファイルを作成し、run-vm.sh を以下のように編集してください。
$ vim run-vm.sh
qemu-system-aarch64 \ -device virtio-net-device,netdev=net0,mac=52:54:00:12:35:02 \ -netdev user,id=net0,hostfwd=tcp::2280-:80 \ -drive id=disk0,file=./tmp/deploy/images/qemu-arm64/\ emlinux-image-base-emlinux-bookworm-qemu-arm64.ext4,if=none,format=raw \ -device virtio-blk-device,drive=disk0 -show-cursor -device VGA,edid=on \ -device qemu-xhci \ -device usb-tablet \ -device usb-kbd \ -object rng-random,filename=/dev/urandom,id=rng0 \ -device virtio-rng-pci,rng=rng0 \ -nographic \ -machine virt \ -cpu cortex-a57 \ -m 512 \ -serial mon:stdio \ -serial null \ -kernel ./tmp/deploy/images/qemu-arm64/\ emlinux-image-base-emlinux-bookworm-qemu-arm64-vmlinux \ -initrd ./tmp/deploy/images/qemu-arm64/\ emlinux-image-base-emlinux-bookworm-qemu-arm64-initrd.img \ -append 'root=/dev/vda rw highres=off console=ttyS0 mem=512M ip=dhcp console=ttyAMA0'
上記の実行例では、ポート番号 2280 で受け付けた要求を、仮想マシンである EMLinux のポート番号 80 (NGINX の既定のポート番号 ) に転送します。
run-vm.sh ファイルに実行権限を付与してください。
$ chmod +x run-vm.sh
run-vm.sh を実行し、QEMU で EMLinux を起動してください。
$ ./run-vm.sh
起動完了後、ユーザ名 root、パスワード root でログインしてください。
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x411fd070] [ 0.000000] Linux version 6.1.102-cip26 (isar-users@googlegroups.com) (aarch64-linux-gnu-gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Thu, 01 Jan 1970 01:00:00 +0000 [ 0.000000] Machine model: linux,dummy-virt [ 0.000000] Memory limited to 512MB (sinp) EMLinux 3.1 EMLinux3 ttyAMA0 EMLinux3 login: root Password:
systemctl コマンドで、NGINX が起動していることを確認してください。
root@EMLinux3:~# systemctl status nginx ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled) Active: active (running) since Mon 2024-09-09 01:19:21 UTC; 1min 2s ago (sinp)
ホストマシン(本記事では、Ubuntu Server 20.04)にログインしてください。Firefox などのウェブブラウザで http://localhost:2280 にアクセスし、以下のように NGINX の Welcome メッセージが出力されることを確認してください。
さいごに
いかがでしたでしょうか? Docker や QEMU が動作する Linux のマシンさえあれば、EMLinux をビルドし、動作させることが簡単にできます。
本記事を読んで、EMLinux を試してみたいと思われた方は、「EMLinux 無償評価版」をぜひ利用ください。
本記事では NGINX のみをインストールしましたが、実際の製品では、複数の Debian パッケージやお客様固有のパッケージのインストール、それらパッケージの設定ファイルの編集などが必要になります。また、お客様の製品に必要なパッケージや設定をまとめたシステムイメージを製品ごとに作成することも可能です。EMLinux のカスタマイズについてお困りの場合には、サイバートラストにご相談ください。