First working revision
At this point, we can generate an SD card image that is composed of an EFI system partition, a SquashFS root partition (a), a blank root partition (b), and a data partition. On the EFI system partition are the Raspberry Pi firmware and device trees, U-Boot and GRUB. The SquashFS filesystem contains the kernel and the whole filesystem tree. A Raspberry Pi can successfully boot from an SD card containing this image. It's not quite usable yet, because there's no writable storage available, or indeed any way to log in.master
parent
e267f82db1
commit
9dae022788
30
Config.in
30
Config.in
|
@ -0,0 +1,30 @@
|
|||
config AIMEEOS
|
||||
bool "Aimee OS"
|
||||
depends on BR2_INIT_SYSTEMD
|
||||
select BR2_TARGET_ROOTFS_SQUASHFS
|
||||
select BR2_TARGET_ROOTFS_SQUASHFS4_GZIP
|
||||
select BR2_LINUX_KERNEL_INSTALL_TARGET
|
||||
select BR2_PACKAGE_SYSTEMD_EFI
|
||||
select BR2_PACKAGE_SYSTEMD_COREDUMP
|
||||
select BR2_PACKAGE_SYSTEMD_SYSUSERS
|
||||
select BR2_PACKAGE_COREUTILS
|
||||
select BR2_PACKAGE_TAR
|
||||
select BR2_PACKAGE_ZSTD
|
||||
select BR2_TARGET_GRUB2
|
||||
select BR2_PACKAGE_HOST_ZSTD
|
||||
help
|
||||
Enable all Aimee OS features.
|
||||
|
||||
comment "Aimee OS needs systemd"
|
||||
depends on !BR2_INIT_SYSTEMD
|
||||
|
||||
config AIMEEOS_RPI
|
||||
bool "Aimee OS Raspberry Pi support"
|
||||
depends on AIMEEOS
|
||||
select BR2_TARGET_UBOOT
|
||||
select BR2_TARGET_GRUB2_ARM_EFI
|
||||
select BR2_PACKAGE_HOST_DOSFSTOOLS
|
||||
select BR2_PACKAGE_HOST_GENIMAGE
|
||||
select BR2_PACKAGE_HOST_MTOOLS
|
||||
help
|
||||
Support running Aimee OS on Rasperry Pi devices
|
|
@ -0,0 +1,6 @@
|
|||
start_file=start.elf
|
||||
fixup_file=fixup.dat
|
||||
|
||||
kernel=u-boot.bin
|
||||
|
||||
disable_overscan=1
|
|
@ -0,0 +1,41 @@
|
|||
# vim: set sw=4 ts=4 sts=4 :
|
||||
|
||||
image firmware.img {
|
||||
vfat {
|
||||
}
|
||||
|
||||
srcpath = "efi-part"
|
||||
size = 64M
|
||||
}
|
||||
|
||||
image sdcard.img {
|
||||
hdimage {
|
||||
partition-table-type = hybrid
|
||||
align = 1M
|
||||
}
|
||||
|
||||
partition "EFI System Partition" {
|
||||
partition-type = 0xC
|
||||
partition-type-uuid = "U"
|
||||
bootable = true
|
||||
image = "firmware.img"
|
||||
}
|
||||
|
||||
partition rootfs-a {
|
||||
partition-type-uuid = "L"
|
||||
image = "rootfs.squashfs"
|
||||
size = 512M
|
||||
}
|
||||
|
||||
partition rootfs-b {
|
||||
partition-type-uuid = "L"
|
||||
size = 512M
|
||||
}
|
||||
|
||||
partition aimeeos-data {
|
||||
partition-type-uuid = "L"
|
||||
autoresize = true
|
||||
}
|
||||
|
||||
size = 4G
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
BOARD_DIR=$(dirname "$0")
|
||||
GRUBENV="${BINARIES_DIR}"/efi-part/EFI/BOOT/grubenv
|
||||
|
||||
genimage_tmp=$(mktemp -d)
|
||||
trap 'rm -rf "${genimage_tmp}"' EXIT
|
||||
|
||||
cp -alf "${BINARIES_DIR}"/u-boot.bin "${BINARIES_DIR}"/efi-part/
|
||||
cp -alf "${BINARIES_DIR}"/*.dtb "${BINARIES_DIR}"/efi-part/
|
||||
cp -alf "${BINARIES_DIR}"/rpi-firmware/* "${BINARIES_DIR}"/efi-part/
|
||||
|
||||
mkdir -p "${genimage_tmp}"/rootfs "${genimage_tmp}"/tmp
|
||||
|
||||
cd "${BINARIES_DIR}"
|
||||
genimage \
|
||||
--rootpath "${genimage_tmp}/rootfs" \
|
||||
--tmppath "${genimage_tmp}/tmp" \
|
||||
--inputpath "${BINARIES_DIR}" \
|
||||
--outputpath "${BINARIES_DIR}" \
|
||||
--config "${BOARD_DIR}"/genimage.cfg
|
||||
|
||||
grub-editenv "${GRUBENV}" set default=0
|
||||
grub-editenv "${GRUBENV}" set timeout=3
|
|
@ -0,0 +1,12 @@
|
|||
#!/bin/sh
|
||||
# vim: set sw=4 ts=4 sts=4 et :
|
||||
|
||||
vers=${BR2_EXTERNAL_AIMEEOS_VERSION}
|
||||
br2_vers=${BR2_VERSION_FULL}
|
||||
|
||||
cat > "${TARGET_DIR}"/boot/grub.cfg <<EOF
|
||||
menuentry "Aimee OS ${vers} (Buildroot ${br2_vers}) on \$dev" --class gnu-linux --id "id-\$partuuid" "\$dev" "\$partuuid" {
|
||||
set root="\$2"
|
||||
linux "/boot/zImage" root=PARTUUID=\$3 ro
|
||||
}
|
||||
EOF
|
|
@ -0,0 +1,11 @@
|
|||
# vim: set ft=sh :
|
||||
# vim: set sw=4 ts=4 sts=4 et:
|
||||
|
||||
load_env
|
||||
regexp --set 1:disk '(.*),.*' $root
|
||||
for dev in ($disk,gpt*); do
|
||||
if [ -f $dev/boot/grub.cfg ]; then
|
||||
probe --set partuuid --part-uuid $dev
|
||||
source $dev/boot/grub.cfg
|
||||
fi
|
||||
done
|
|
@ -0,0 +1,32 @@
|
|||
BR2_arm=y
|
||||
BR2_cortex_a53=y
|
||||
BR2_ARM_FPU_NEON_VFPV4=y
|
||||
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_12=y
|
||||
BR2_CCACHE=y
|
||||
BR2_CCACHE_DIR="$(HOME)/.cache/buildroot"
|
||||
BR2_GLOBAL_PATCH_DIR="board/raspberrypi/patches"
|
||||
BR2_DOWNLOAD_FORCE_CHECK_HASHES=y
|
||||
BR2_INIT_SYSTEMD=y
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_AIMEEOS_PATH)/board/raspberrypi3/post-image.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,cd231d4775b14f228606c09f219b48308f6ab3aa)/linux-cd231d4775b14f228606c09f219b48308f6ab3aa.tar.gz"
|
||||
BR2_LINUX_KERNEL_DEFCONFIG="bcm2709"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_AIMEEOS_PATH)/kernel/config"
|
||||
BR2_LINUX_KERNEL_ZSTD=y
|
||||
BR2_LINUX_KERNEL_DTS_SUPPORT=y
|
||||
BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2710-rpi-3-b broadcom/bcm2710-rpi-3-b-plus broadcom/bcm2710-rpi-cm3"
|
||||
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
|
||||
# BR2_PACKAGE_BUSYBOX is not set
|
||||
BR2_PACKAGE_XZ=y
|
||||
BR2_PACKAGE_RPI_FIRMWARE=y
|
||||
BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y
|
||||
BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y
|
||||
BR2_PACKAGE_RPI_FIRMWARE_CMDLINE_FILE="$(BR2_EXTERNAL_AIMEEOS_PATH)/board/raspberrypi3/cmdline.txt"
|
||||
BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="$(BR2_EXTERNAL_AIMEEOS_PATH)/board/raspberrypi3/config.txt"
|
||||
# BR2_TARGET_ROOTFS_TAR is not set
|
||||
BR2_TARGET_GRUB2_BUILTIN_MODULES_EFI="boot configfile echo efi_gop fat gzio linux loadenv minicmd normal part_gpt probe regexp squash4 test zstd"
|
||||
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="rpi_3_32b"
|
||||
BR2_PACKAGE_HOST_KMOD_XZ=y
|
||||
AIMEEOS=y
|
||||
AIMEEOS_RPI=y
|
13
external.mk
13
external.mk
|
@ -0,0 +1,13 @@
|
|||
# Overwrite the grub.cfg provided by Buildroot with our own.
|
||||
define AIMEEOS_GRUB2_INSTALL_IMAGES_CMDS
|
||||
$(foreach tuple, $(GRUB2_TUPLES-y), \
|
||||
$(INSTALL) -D -m 0644 $(BR2_EXTERNAL_AIMEEOS_PATH)/boot/grub2/grub.cfg $(GRUB2_CFG_$(tuple))
|
||||
)
|
||||
endef
|
||||
GRUB2_INSTALL_IMAGES_CMDS += $(AIMEEOS_GRUB2_INSTALL_IMAGES_CMDS)
|
||||
|
||||
# Generate the grub.cfg stub for the kernel embedded in rootfs.squashfs
|
||||
define AIMEEOS_GEN_GRUB_CFG
|
||||
$(BR2_EXTERNAL_AIMEEOS_PATH)/boot/grub2/gen-grub-cfg.sh
|
||||
endef
|
||||
LINUX_TARGET_FINALIZE_HOOKS += AIMEEOS_GEN_GRUB_CFG
|
|
@ -0,0 +1,2 @@
|
|||
CONFIG_EFI=y
|
||||
CONFIG_SQUASHFS=y
|
Loading…
Reference in New Issue