LoginSignup
1
0

GitHubで公開されているEMLinux 3.0を、QEMUでエミュレートしたRaspberry Piで動かしてみた

Posted at

はじめに

構成図

+--------------------------------+
| +----------------------------+ |
| | +------------------------+ | |
| | | +--------------------+ | | |
| | | | EMLinux 3.0        | | | |
| | | +--------------------+ | | |
| | | 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
    

meta-emlinuxリポジトリのクローン

  1. Proxyサーバがある環境の場合、以下のコマンドでproxyサーバの設定を行ってください。
    git config --global http.proxy <proxyサーバのFQDNまたはIPアドレス>:<ポート番号>
    
    git config --global https.proxy <proxyサーバのFQDNまたはIPアドレス>:<ポート番号>
    
  2. リポジトリをクローンするためのディレクトリを作成してください。
    mkdir -p /home/emlinux/github/miraclelinux/emlinux/repos
    
  3. 以下のディレクトリに移動してください。
    cd /home/emlinux/github/miraclelinux/emlinux
    
  4. git cloneコマンドで、リポジトリをクローンしてください。
    git clone -b bookworm https://github.com/miraclelinux/meta-emlinux.git repos/meta-emlinux
    
  5. 以下のディレクトリに移動してください。
    cd /home/emlinux/github/miraclelinux/emlinux/repos/meta-emlinux/docker
    
  6. 上記dockerディレクトリ内にあるrun.shを実行してください。初回起動時にはコンテナの作成処理が行われます。コンテナ作成処理後、コンテナにログインした状態になります。
    $ ./run.sh
    (snip)
    build@82fa043f8378:~/work$
    

local.confファイルの編集

  1. 以下のコマンドを実行し、ビルドのために必要な環境変数を設定してください。
    source repos/meta-emlinux/scripts/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/github/miraclelinux/emlinux/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
    

さいごに

GitHubから入手したEMLinux 3.0を、QEMUでエミュレートしたRaspberry Pi上で動かしてみました。前回の記事と同様、EMLinux 3.0のビルドおよびQEMUでエミュレートしたRaspberry Piで動かすことに成功しました。

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