LoginSignup
1
0

EMLinux 3.0 (202403) をQEMUでエミュレートしたRaspberry Pi 3で動かしてみた

Last updated at Posted at 2024-03-31

はじめに

  • サイバートラストが提供する組み込み/IoT機器向けのOSである「EMLinux」を、QEMUでエミュレートしたRaspberry Pi上で動かしてみました。
  • 本記事では、以下に公開されている、EMLinuxの無償評価版を使用します。

参考

構成図

+----------------------------------+
| +------------------------------+ |
| | +--------------------------+ | |
| | | +----------------------+ | | |
| | | | EMLinux 3.0 (202403) | | | |
| | | +----------------------+ | | |
| | | Rapsberry Pi 3           | | |
| | +--------------------------+ | |
| | QEMU                         | |
| +------------------------------+ |
| Ubuntu Server 22.04.4 LTS        |
+----------------------------------+

各ソフトウェアのバージョン

Ubuntu Server

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.4 LTS"

Docker

$ docker version 
Client:
 Version:           24.0.5
 API version:       1.43
 Go version:        go1.20.3
 Git commit:        24.0.5-0ubuntu1~22.04.1
 Built:             Mon Aug 21 19:50:14 2023
 OS/Arch:           linux/amd64
 Context:           default

Server:
 Engine:
  Version:          24.0.5
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.3
  Git commit:       24.0.5-0ubuntu1~22.04.1
  Built:            Mon Aug 21 19:50:14 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.2
  GitCommit:        
 runc:
  Version:          1.1.7-0ubuntu1~22.04.2
  GitCommit:        
 docker-init:
  Version:          0.19.0
  GitCommit: 

Docker Compose

$ docker compose version 
Docker Compose version 2.20.2+ds1-0ubuntu1~22.04.1

QEMU

$ qemu-system-aarch64 --version 
QEMU emulator version 6.2.0 (Debian 1:6.2+dfsg-2ubuntu6.17)
Copyright (c) 2003-2021 Fabrice Bellard and the QEMU Project developers

前提条件

評価環境

項目 要件
OS Dockerが動作するLinux
CPU Intel 64対応プロセッサまたはAMD64対応プロセッサ (8スレッド以上を推奨)
RAM 8GiB以上 (16GiB以上を推奨)
Disk 30GiB以上の空き容量
その他 インターネットに接続可能であること
  • Proxyサーバがある場合、.bashrcなどに以下を設定し、再ログインしてください。
    $ cat .bashrc
    (snip)
    PROXY=http://<proxyサーバのIPアドレス>:<ポート番号>
    export http_proxy=${PROXY}
    export https_proxy=${PROXY}
    export ftp_proxy=${PROXY}
    export no_proxy='127.0.0.1'  
    

その他

  • 以降の作業は、Ubuntu Serverインストール時に作成したemlinuxユーザを使用しました。
  • emlinuxユーザのホームディレクトリは/home/emlinuxです。以降の作業は/home/emlinux上で行いました。

DockerおよびDocker Comoseのインストール

  1. 以下のコマンドを実行し、DockerおよびDocker Composeをインストールしてください。
    sudo apt install -y docker.io docker-compose-v2
    
  2. emlinuxユーザをdockerグループに追加してください。
    sudo gpasswd -a emlinux docker
    
  3. ログアウトし、再ログイン後、sudoなしでdockerコマンドを実行できることを確認してください。
    $ docker ps 
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    
  4. Proxyサーバがある場合、Dockerにproxyサーバを設定してください。
    sudo mkdir /etc/systemd/system/docker.service.d
    
    sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
    [Service]
    Environment="HTTP_PROXY=<proxyサーバのIPアドレス>:<ポート番号>"
    Environment="HTTPS_PROXY=<proxyサーバのIPアドレス>:<ポート番号>"
    EOF
    
  5. dockerデーモンを再起動してください。
    sudo systemctl daemon-reload
    
    sudo systemctl restart docker
    
  6. docker searchコマンドを実行し、proxyサーバが正しく設定されていることを確認してください。
    $ docker search mariadb 
    NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    mariadb                        MariaDB Server is a high performing open sou…   5713      [OK]       
    (snip)
    

qemu-user-staticのインストール

  1. x86_64の環境でarm64のバイナリをクロスビルドするために、qemu-user-staticをインストールしてください。
    sudo apt install -y qemu-user-static
    

EMLinuxの展開

  1. 以下のページの「評価版お申込みフォーム」に必要事項を記入してください。
  2. 後日、申し込み時に入力いただいたメールアドレスに、ダウンロードURLを記載したメールが届きます。そのURLから EMLinux 3.0 をダウンロードしてください。なお、本記事では、EMLinux 3.0 (202403) を使用しています (EMLinuxは1ヶ月周期の定期リリースを行っており、yyyymmのようなバージョンが付いています) 。
  3. EMLinux_3.0-202403.zipを/home/emlinuxにコピーしてください。
  4. EMLinux_3.0-202403.zipを解凍してください。
    cd /home/emlinux
    
    unzip EMLinux_3.0-202403.zip
    
    $ unzip EMLinux_3.0-202403.zip 
    Archive:  EMLinux_3.0-202403.zip
       creating: EMLinux_3.0-202403/
       creating: EMLinux_3.0-202403/source/
      inflating: EMLinux_3.0-202403/source/emlinux-3.0-202403.tar.gz  
       creating: EMLinux_3.0-202403/doc/
      inflating: EMLinux_3.0-202403/doc/EMLinux_3.0-202403_Release_Notes.pdf  
      inflating: EMLinux_3.0-202403/doc/EMLinux_3.0-202403_User_Manual_ja.pdf  
      inflating: EMLinux_3.0-202403/doc/EMLinux_3.0-202403_Recipe_Guide_ja.pdf 
    
  5. 解凍後、sourceディレクトリに移動してください。
    cd /home/emlinux/EMLinux_3.0-202403/source/
    
  6. 上記sourceディレクトリに保存されている emlinux-3.0-202403.tar.gzファイルを、tarコマンドで解凍してください。
    tar xvf emlinux-3.0-202403.tar.gz
    
  7. 解凍後、以下のディレクトリに移動してください。
    cd /home/emlinux/EMLinux_3.0-202403/source/emlinux-3.0-202403/repos/meta-emlinux/docker/
    
  8. 上記dockerディレクトリ内にある run.sh を実行してください。初回起動時にはコンテナの作成処理が行われます。コンテナ作成処理後、コンテナにログインした状態になります。
    $ ./run.sh
    (snip)
    build@82fa043f8378:~/work$
    

local.confファイルの編集

  1. 以下のコマンドを実行し、ビルドのために必要な環境変数を設定してください。
    source setup-emlinux build
    
  2. viエディタでlocal.confファイルを開き、ファイルの末尾に以下を追記してください。
    $ vi conf/local.conf
    (snip)
    MACHINE = "raspberrypi3bplus-64"
    USERS += "emlinux"
    USER_emlinux[password] = "emlinux"
    USER_emlinux[flags] = "create-home clear-text-password"
    USER_emlinux[home] = "/home/emlinux"
    IMAGE_INSTALL:append = " sshd-regen-keys"
    IMAGE_PREINSTALL:append = " \
        openssh-server \
        connman \
    "
    

EMLinuxのビルド

  1. EMLinuxのビルドを行ってください。
    bitbake emlinux-image-base
    
  2. ビルド完了後、exitコマンドでコンテナからログアウトしてください。
    build@82fa043f8378:~/work$ exit 
    exit
    

QEMUのインストール

  1. QEMUをインストールしてください。
    sudo apt install -y qemu-system-arm seabios
    

EMLinuxの起動

  1. 以下のディレクトリに移動してください。
    cd /home/emlinux/EMLinux_3.0-202403/source/emlinux-3.0-202403/build
    
  2. wicファイルのサイズを変更してください。1GiB, 2GiB, 4GiBのように、2の乗数のサイズとなるように変更してください。以下の例では、1GiBに変更しています。
    qemu-img resize ./tmp/deploy/images/raspberrypi3bplus-64/emlinux-image-base-emlinux-bookworm-raspberrypi3bplus-64.wic 1G
    
  3. viエディタでrun.shファイルを作成してください。
    vi run.sh
    
  4. run.shファイルに以下を記載してください。
    qemu-system-aarch64 \
    -m 1024 \
    -M raspi3b \
    -kernel ./tmp/deploy/images/raspberrypi3bplus-64/Image \
    -dtb ./tmp/deploy/images/raspberrypi3bplus-64/bcm2837-rpi-3-b-plus.dtb \
    -drive format=raw,file=./tmp/deploy/images/raspberrypi3bplus-64/emlinux-image-base-emlinux-bookworm-raspberrypi3bplus-64.wic \
    -append "console=ttyAMA0 root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4 dwc_otg.fiq_fsm_enable=0 bcm2708_fb.fbwidth=1280 bcm2708_fb.fbheight=720" \
    -no-reboot \
    -device usb-kbd \
    -device usb-mouse \
    -device usb-net,netdev=net0 \
    -netdev user,id=net0,hostfwd=tcp::2222-:22 \
    -nographic
    
  5. run.shファイルに実行権限を付与してください。
    chmod +x run.sh
    
  6. run.shファイルを実行してください。
    ./run.sh
    
    $ ./run.sh 
    [    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
    [    0.000000] Linux version 6.1.75-cip14 (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 0   1:00:00 +0000
    [    0.000000] Machine model: Raspberry Pi 3 Model B+
    [    0.000000] efi: UEFI not found.
    [    0.000000] Reserved memory: created CMA memory pool at 0x0000000038000000, size 64 MiB
    (snip)
    
    • FIXME: 現時点では、ログインプロンプトが表示されず、後述のsshでログインする必要があります。
  7. 別のターミナルを開き、sshで仮想マシンにアクセスできることを確認してください。
    ssh emlinux@localhost -p 2222
    

さいごに

ビルドしたEMLinux 3.0 (202403) を、QEMUでエミュレートしたRaspberry Pi上で動かしてみました。お手元にRaspberry Piの実機が無くても、QEMUでお手軽に動かすことが可能です。

1
0
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
1
0