Last active
March 24, 2021 23:24
-
-
Save rohityadavcloud/dbb23adf5239ac098f9a1e7b2824121d to your computer and use it in GitHub Desktop.
Build Ubuntu 19.10 image with KVM for Raspberry Pi 4 ARM64
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(Note: tested on Ubuntu 19.10 host/x86_64 machine) | |
~~ | |
Install dependencies: | |
apt-get install binutils-aarch64-linux-gnu gcc-9-aarch64-linux-gnu bison flex build-essential kpartx | |
sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev | |
cd /usr/bin | |
sudo ln -s aarch64-linux-gnu-gcc-9 aarch64-linux-gnu-gcc | |
# Build armstubs: | |
git clone https://github.com/raspberrypi/tools.git rpi-tools | |
cd rpi-tools/armstubs | |
git checkout 7f4a937e1bacbc111a22552169bc890b4bb26a94 | |
make armstub8-gic.bin | |
cd ../../ | |
# Build kernel: | |
git clone https://github.com/raspberrypi/linux.git rpi-linux | |
cd rpi-linux | |
git checkout origin/rpi-4.19.y # change the branch name for newer versions | |
mkdir kernel-build | |
make O=./kernel-build/ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig | |
make -j4 O=./kernel-build/ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- | |
export KERNEL_VERSION=`cat ./kernel-build/include/generated/utsrelease.h | sed -e 's/.*"\(.*\)".*/\1/'` | |
make -j4 O=./kernel-build/ DEPMOD=echo MODLIB=./kernel-install/lib/modules/${KERNEL_VERSION} INSTALL_FW_PATH=./kernel-install/lib/firmware modules_install | |
Download base image: | |
http://cdimage.ubuntu.com/ubuntu/releases/19.10/release/ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz | |
# Patch-up the base image: | |
xzcat ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz > ubuntu-19.10-preinstalled-server-arm64+raspi3.img | |
sudo kpartx -av ubuntu-19.10-preinstalled-server-arm64+raspi3.img | |
# this will create: /dev/mapper/loop32p1 /dev/mapper/loop32p2 | |
# cd to root/top folder | |
mkdir mount-img | |
sudo mount /dev/mapper/loop32p2 mount-img | |
sudo mount /dev/mapper/loop32p1 mount-img/boot/firmware | |
# Copy armstub | |
sudo cp rpi-tools/armstubs/armstub8-gic.bin mount-img/boot/firmware/ | |
# Copy kernel and modules | |
sudo cp rpi-linux/kernel-build/arch/arm64/boot/Image mount-img/boot/firmware/kernel8.img | |
sudo cp -avf rpi-linux/kernel-build/kernel-install/lib/modules/${KERNEL_VERSION} mount-img/lib/modules/ | |
# Copy non-free firmware | |
git clone https://github.com/RPi-Distro/firmware-nonfree firmware-nonfree | |
cp -avf firmware-nonfree/* mount-img/lib/firmware/ | |
# Edit mount-img/boot/firmware/config.txt and check/add: | |
armstub=armstub8-gic.bin | |
enable_gic=1 | |
arm_64bit=1 | |
# Close, unmount | |
References: | |
https://blog.cloudkernels.net/posts/rpi4-64bit-image/ | |
https://andrei.gherzan.ro/linux/raspbian-rpi-64/ | |
https://andrei.gherzan.ro/linux/raspbian-rpi4-64/ | |
~~ | |
### UPDATES ### | |
- Tried above based references, did not work | |
- Recompiling ubuntu kernel (debs) linux-raspi2_5.3.0 source package in progress with KVM/VIRTUALIZATION enabled in kernel config | |
- Recompiled kernel deb pkg here: http://dl.rohityadav.cloud/cloudstack-rpi/kernel-19.10/ | |
- Simply use the custom deb linux-image packages on upstream Ubuntu 19.10 base image | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment