dockerpi/entrypoint.sh
James Reynolds 747fde62bc Add extraction support and raspi2/3 machines
1. Added 'fatcat' to extract from the boot filesystem from a
   standard RPI image
2. Added qemu-system-aarch64 to support raspi3 machines
3. Extracted images to search for kernel7/8.img and correct dtb
   files to boot kernel
4. Disabled nic for raspi2/3 as USB is not supported (yet)
2020-01-30 15:29:31 +00:00

87 lines
2.1 KiB
Bash
Executable file

#!/bin/sh
target="${1:-versatilepb}"
image_path="/sdcard/filesystem.img"
zip_path="/filesystem.zip"
if [ ! -e $image_path ]; then
echo "No filesystem detected at ${image_path}!"
if [ -e $zip_path ]; then
echo "Extracting fresh filesystem..."
unzip $zip_path
mv -- *.img $image_path
else
exit 1
fi
fi
fat_path="/fat.img"
if [ "${target}" != "versatilepb" ];
then
echo "Extracting partitions"
fdisk -l ${image_path} \
| awk "/^[^ ]*1/{print \"dd if=${image_path} of=${fat_path} bs=512 skip=\"\$4\" count=\"\$6}" \
| sh
fi
if [ "${target}" = "raspi2" ];
then
emulator=qemu-system-arm
machine=raspi2
memory=1024m
kernel_pattern=kernel7.img
dtb_pattern=bcm2709-rpi-2-b.dtb
nic=''
elif [ "${target}" = "raspi3" ];
then
emulator=qemu-system-aarch64
machine=raspi3
memory=1024m
kernel_pattern=kernel8.img
dtb_pattern=bcm2710-rpi-3-b-plus.dtb
nic=''
elif [ "${target}" = "versatilepb" ];
then
emulator=qemu-system-arm
kernel="/root/qemu-rpi-kernel/kernel-qemu-4.19.50-buster"
dtb="/root/qemu-rpi-kernel/versatile-pb.dtb"
machine=versatilepb
memory=256m
root=/dev/sda2
nic='--net nic --net user,hostfwd=tcp::5022-:22'
else
echo "Target ${target} not supported"
echo "Supported targets: raspi2 raspi3 versatilepb"
exit 2
fi
if [ -f "${fat_path}" ];
then
echo "Extracting boot filesystem"
fat_folder="/fat"
mkdir -p "${fat_folder}"
fatcat -x "${fat_folder}" "${fat_path}"
echo "Searching for kernel='${kernel_pattern}'"
kernel=$(find "${fat_folder}" -name "${kernel_pattern}")
echo "Searching for dtb='${dtb_pattern}'"
dtb=$(find "${fat_folder}" -name "${dtb_pattern}")
root=/dev/mmcblk0p2
fi
if [ "${kernel}" = "" ] || [ "${dtb}" = "" ];
then
echo "Missing kernel='${kernel}' or dtb='${dtb}'"
exit 2
fi
echo "Booting with kernel=${kernel} dtb=${dtb}"
exec ${emulator} \
--machine "${machine}" \
--cpu arm1176 \
--m "${memory}" \
--hda "${image_path}" \
${nic} \
--dtb "${dtb}" \
--kernel "${kernel}" \
--append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=${root} rootwait panic=1" \
--no-reboot \
--display none \
--serial mon:stdio