rpi4 aarch64
https://github.com/satmandu/docker-rpi4-imagebuilder

RPi4 64bit 用のUbuntu Server イメージを作成する環境を構築してみました。

Update: 2019-08-05 aarch64 でメモリ4GB 起動しました!

ubuntu@ubuntu:~$ uname -a
Linux ubuntu 4.19.63-v8-gdee436110 #1 SMP PREEMPT Sun Aug 4 05:51:39 UTC 2019 aarch64 aarch64 aarch64 GNU/Linux
ubuntu@ubuntu:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=19.10
DISTRIB_CODENAME=eoan
DISTRIB_DESCRIPTION="Ubuntu Eoan Ermine (development branch)"
ubuntu@ubuntu:~$ free -m -h
total used free shared buff/cache available
Mem: 3.7Gi 112Mi 3.4Gi 2.0Mi 204Mi 3.6Gi
Swap: 0B 0B 0B

Update: 2019-08-15 aarch64 でメモリ4GB とUSB 動作しました!

環境の準備

ビルド環境の構成

ゲストOS にDocker をインストール

  • Docker をインストール
    $ curl -fsSL https://get.docker.com/ | sh
    /etc/apt/sources.list.d/docker.list
    deb [arch=amd64] https://download.docker.com/linux/ubuntu disco stable
    $ sudo apt update
    $ sudo apt install docker-ce qemu-user-static
    $ docker --version
    Docker version 19.03.1, build 74b1e89
    $ sudo usermod -aG docker $USER
    $ sudo reboot

起動用SD カードの作成

イメージの作成

$ mkdir ~/rpi4-build
$ cd ~/rpi4-build
$ git clone https://github.com/satmandu/docker-rpi4-imagebuilder
$ cd docker-rpi4-imagebuilder
$ docker build -t docker-rpi4-imagebuilder:19.10 -f Dockerfile-ubuntu-19.10 .
$ mkdir output
$ git pull ; NOXZ=1 time ./build-image -i docker-rpi4-imagebuilder:19.10 -o output .
$ ls -og output/
total 2351720
-rw-r--r-- 1 788 Aug 4 05:42 andrei_gherzan_uboot_fork.git.log
-rw-r--r-- 1 788 Aug 4 05:42 armstub8-gic.git.log
-rw-r--r-- 1 24335 Aug 4 06:49 build-log-08_04_2019_0544UTC.log
-rw-r--r-- 1 23572 Aug 4 08:16 build-log-08_04_2019_0811UTC.log
-rw-r--r-- 1 952065544 Aug 4 06:49 eoan-preinstalled-server-arm64+raspi4-08_04_2019_0544UTC.img.lz4
-rw-r--r-- 1 1426237866 Aug 4 08:16 eoan-preinstalled-server-arm64+raspi4-08_04_2019_0811UTC.img.lz4
-rw-r--r-- 1 788 Aug 4 05:42 kernelbuild_setup.git.log
-rw-r--r-- 1 10759680 Aug 4 08:13 linux-headers-4.19.63-v8-gdee436110_4.19.63-v8-gdee436110-1_arm64.deb
-rw-r--r-- 1 19012932 Aug 4 08:13 linux-image-4.19.63-v8-gdee436110_4.19.63-v8-gdee436110-1_arm64.deb
-rw-r--r-- 1 788 Aug 4 05:42 non-free_firmware.git.log
-rw-r--r-- 1 788 Aug 4 05:42 rpi_firmware.git.log
-rw-r--r-- 1 788 Aug 4 05:42 rpi_userland.git.log

.xz にしたい場合はNOXZ=1の指定を外す。
イメージは小さくなるが、圧縮に時間がかかるらしい。

ログの確認とリビルド

./output/build-log-*.log でエラーが出力されていたらリビルド

$ git pull ; NOXZ=1 time ./build-image -i docker-rpi4-imagebuilder:19.10 -o output .

SD カードへ書き込み

sdX をSD カードのデバイスに置換して実行します。

$ sudo apt install lz4
$ lz4cat eoan-preinstalled-server-arm64+raspi4-MM-DD-YYYY_hhmmUTC.img.lz4 | sudo dd of=/dev/sdX bs=32M

カーネルのカスタマイズ

3種類のカスタマイズ方法が用意されてします。

  • RAM: 1GB, USB: Works

    $ sudo cp /boot/firmware/uboot.bin /boot/firmware/kernel8.img ; sudo reboot
  • RAM: 4GB, USB: No

    /boot/firmware/config.txt
    #total_mem=3072
    $ sudo cp /boot/firmware/kernel8.img.nouboot /boot/firmware/kernel8.img ; sudo reboot
  • RAM: 3GB, USB: Works [現在のデフォルト]

    $ sudo cp /boot/firmware/kernel8.img.nouboot /boot/firmware/kernel8.img ; [ `grep -cs "total_mem=" /boot/firmware/config.txt` -gt 0 ] && sudo sed 's/total_mem=*$/total_mem=3072/' /boot/firmware/config.txt || echo "total_mem=3072" | sudo tee -a /boot/firmware/config.txt