From 1dab49683a33f1f30f6f97bdaa1e3dc3e1abb088 Mon Sep 17 00:00:00 2001 From: Pradyunn Kale Date: Tue, 25 Nov 2025 01:07:03 -0500 Subject: [PATCH 1/5] Buildroot copperhead --- copperhead_buildroot | 1 + 1 file changed, 1 insertion(+) create mode 160000 copperhead_buildroot diff --git a/copperhead_buildroot b/copperhead_buildroot new file mode 160000 index 0000000..59479ae --- /dev/null +++ b/copperhead_buildroot @@ -0,0 +1 @@ +Subproject commit 59479ae646767f22914335301dcec6fbeb313755 From 325fba906e9abc265a19026fecbcb0d52d385921 Mon Sep 17 00:00:00 2001 From: Pradyunn Kale Date: Sat, 6 Dec 2025 06:15:06 -0500 Subject: [PATCH 2/5] Fixed the buildroot, earlier was not working --- copperhead_buildroot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/copperhead_buildroot b/copperhead_buildroot index 59479ae..d4a998f 160000 --- a/copperhead_buildroot +++ b/copperhead_buildroot @@ -1 +1 @@ -Subproject commit 59479ae646767f22914335301dcec6fbeb313755 +Subproject commit d4a998f0fa1fa42d89dbd19d10c6c2ee79d3e1ab From 3a74cba7d9cc62f4b5f070da9ccefb8d980e34e6 Mon Sep 17 00:00:00 2001 From: Pradyunn Kale Date: Sun, 7 Dec 2025 19:43:43 -0500 Subject: [PATCH 3/5] buildroot --- copperhead_buildroot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/copperhead_buildroot b/copperhead_buildroot index d4a998f..909fcbc 160000 --- a/copperhead_buildroot +++ b/copperhead_buildroot @@ -1 +1 @@ -Subproject commit d4a998f0fa1fa42d89dbd19d10c6c2ee79d3e1ab +Subproject commit 909fcbc7772642bbacf4a30871e0586deb25bee6 From d87550873ed2d243dcb9d11fcc03074064909d69 Mon Sep 17 00:00:00 2001 From: Pradyunn Kale Date: Sun, 7 Dec 2025 20:46:33 -0500 Subject: [PATCH 4/5] Made it so that there are options when building --- Makefile | 11 ++- README.md | 28 +++++-- buildroot-external/Config.in | 8 +- .../configs/pspl_cms_pi4_defconfig | 4 +- .../configs/pspl_cph_pi4_defconfig | 78 +++++++++++++++++++ .../{avi-fsw => avi-cms-fsw}/Config.in | 0 .../{avi-fsw => avi-cms-fsw}/avi-fsw.mk | 0 .../package/avi-cph-fsw/Config.in | 6 ++ .../package/avi-cph-fsw/avi-fsw.mk | 17 ++++ copperhead_buildroot | 1 - run-container.sh | 2 +- 11 files changed, 145 insertions(+), 10 deletions(-) create mode 100644 buildroot-external/configs/pspl_cph_pi4_defconfig rename buildroot-external/package/{avi-fsw => avi-cms-fsw}/Config.in (100%) rename buildroot-external/package/{avi-fsw => avi-cms-fsw}/avi-fsw.mk (100%) create mode 100644 buildroot-external/package/avi-cph-fsw/Config.in create mode 100644 buildroot-external/package/avi-cph-fsw/avi-fsw.mk delete mode 160000 copperhead_buildroot diff --git a/Makefile b/Makefile index 09e6d37..4b8fead 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,15 @@ BUILD_DIR = outputs CACHE_DIR = cache BR2_EXTERNAL := $(PWD)/buildroot-external BR_MAKE_OPTS = -C $(BUILDROOT_DIR) O=$(PWD)/$(BUILD_DIR) BR2_EXTERNAL=$(BR2_EXTERNAL) BR2_CCACHE_DIR=$(PWD)/$(CACHE_DIR) +TARGET ?= cms + +ifeq ($(TARGET),cms) +DEFCONFIG = pspl_cms_pi4_defconfig +else ifeq ($(TARGET),cph) +DEFCONFIG = pspl_cph_pi4_defconfig +else +$(error Unknown TARGET '$(TARGET)'. Use cms or cph.) +endif .PHONY: all build config clean @@ -21,7 +30,7 @@ build: $(BUILDROOT_DIR) $(BUILD_DIR) $(CACHE_DIR) config $(MAKE) $(BR_MAKE_OPTS) -j$(shell nproc) config: $(BUILDROOT_DIR) $(BUILD_DIR) $(CACHE_DIR) - $(MAKE) $(BR_MAKE_OPTS) pspl_cms_pi4_defconfig + $(MAKE) $(BR_MAKE_OPTS) $(DEFCONFIG) clean: $(BUILDROOT_DIR) $(BUILD_DIR) $(CACHE_DIR) $(MAKE) $(BR_MAKE_OPTS) clean diff --git a/README.md b/README.md index 28b0759..5d22c87 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,12 @@ ## Usage +Make sure to initialize and update the +submodules when first cloning +``` +git submodule update --init --recursive +``` + Enter the build environment by running ``` ./run-container.sh @@ -12,11 +18,17 @@ Enter the build environment by running You have to run `make` from within the container because the ccache path is hardcoded as `/work/cache` in `buildroot-external/configs/pspl_cms_pi4_defconfig` +There are 2 options when building `cms` and `cph` +for CraterMaker Special and Copperhead respectively + +To build the image for CMS, run (in the container) +``` +make build TARGET=cms +``` -To build the image, run (in the container) +For CPH, run (in the container) ``` -make config -make -j$(nproc) +make build TARGET=cph ``` ## Code Map @@ -28,10 +40,16 @@ make -j$(nproc) │ ├── Config.in # unimportant │ ├── configs │ │ └── pspl_cms_pi4_defconfig # buildroot defconfig +│ │ └── pspl_cph_pi4_defconfig # buildroot defconfig │ ├── external.desc # unimportant │ ├── external.mk # unimportant -│ └── package -│ └── pspl-cms-init # custom init script +│ └── package # Packages +│ └── avi-cms-fsw # For CMS +│ └── avi-fsw.mk +│ └── Config.in +│ └── avi-cph-fsw # For CPH +│ └── avi-fsw.mk +│ └── Config.in ├── Dockerfile # dev container ├── Makefile # buildroot shortcuts ├── README.md diff --git a/buildroot-external/Config.in b/buildroot-external/Config.in index c0d2e96..6b8b8c7 100644 --- a/buildroot-external/Config.in +++ b/buildroot-external/Config.in @@ -1 +1,7 @@ -source "$BR2_EXTERNAL_PSPL_CMS_PATH/package/avi-fsw/Config.in" \ No newline at end of file +if BR2_TARGET_CMS +source "$BR2_EXTERNAL_PSPL_CMS_PATH/package/avi-cms-fsw/Config.in" +endif + +if BR2_TARGET_CPH +source "$BR2_EXTERNAL_PSPL_CMS_PATH/package/avi-cph-fsw/Config.in" +endif diff --git a/buildroot-external/configs/pspl_cms_pi4_defconfig b/buildroot-external/configs/pspl_cms_pi4_defconfig index 5e7451a..1055936 100644 --- a/buildroot-external/configs/pspl_cms_pi4_defconfig +++ b/buildroot-external/configs/pspl_cms_pi4_defconfig @@ -1,3 +1,5 @@ +BR2_TARGET_CMS=y + BR2_aarch64=y BR2_cortex_a72=y BR2_ARM_FPU_VFPV4=y @@ -73,4 +75,4 @@ BR2_TARGET_ROOTFS_SQUASHFS=y # == ccache == BR2_CCACHE=y BR2_CCACHE_INITIAL_SETUP="" -BR2_CCACHE_USE_BASEDIR=y \ No newline at end of file +BR2_CCACHE_USE_BASEDIR=y diff --git a/buildroot-external/configs/pspl_cph_pi4_defconfig b/buildroot-external/configs/pspl_cph_pi4_defconfig new file mode 100644 index 0000000..8d59dcc --- /dev/null +++ b/buildroot-external/configs/pspl_cph_pi4_defconfig @@ -0,0 +1,78 @@ +BR2_TARGET_CPH=y + +BR2_aarch64=y +BR2_cortex_a72=y +BR2_ARM_FPU_VFPV4=y +BR2_PER_PACKAGE_DIRECTORIES=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_SYSTEM_DHCP="eth0" +BR2_GLOBAL_PATCH_DIR="board/raspberrypi/patches" +BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_PSPL_CMS_PATH)/board/raspberrypi/rootfs_overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi4-64/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_PSPL_CMS_PATH)/board/raspberrypi/post-image.sh" +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y + +# == Skeleton Configuration == +# BR2_TARGET_GENERIC_ISSUE="$(git describe --tags --dirty --always)" +BR2_TARGET_GENERIC_HOSTNAME="pspl-cph-avi-fc" +BR2_TARGET_ENABLE_ROOT_LOGIN=y + +# generated with `mkpasswd -m sha512crypt` +BR2_TARGET_GENERIC_ROOT_PASSWD="$$6$$HXWGeOjuiHRUpx7g$$uX0zUMKhbJ8LrKRIYnsNQjGC32Jo0445AHOpj57Z/IcoEFR2LAUlsfqwMVjrhCswgmHVOmU8YBplVb7sAWpO.1" + +# == Toolchain == +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_ARM_AARCH64=y + +# == Linux Config == +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/raspberrypi/linux.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="0b540ffdabcc31e8aff2b190599dea2fcba102ac" # rpi-6.12.y +BR2_LINUX_KERNEL_DEFCONFIG="bcm2711" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_PSPL_CMS_PATH)/board/raspberrypi/linux.fragment" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2711-rpi-4-b" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_12=y + +# == Packages == +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_RPI_FIRMWARE=y +BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4=y +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="$(BR2_EXTERNAL_PSPL_CMS_PATH)/board/raspberrypi/config.txt" +BR2_PACKAGE_KMOD=y +BR2_PACKAGE_KMOD_TOOLS=y + +BR2_PACKAGE_UTIL_LINUX=y +BR2_PACKAGE_UTIL_LINUX_LIBS=y +BR2_PACKAGE_UTIL_LINUX_LIBUUID=y +BR2_PACKAGE_PARTED=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y + +BR2_PACKAGE_BASH=y +BR2_PACKAGE_NTP=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_PYTHON3=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_LIBGPIOD=y +BR2_PACKAGE_LIBGPIOD_TOOLS=y +BR2_PACKAGE_RASPI_GPIO=y +BR2_PACKAGE_DTC=y +BR2_PACKAGE_RPI_USERLAND=y +BR2_PACKAGE_AVI_FSW=y + +# == Output == +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_KMOD_XZ=y +BR2_PACKAGE_HOST_MTOOLS=y + +BR2_TARGET_ROOTFS_SQUASHFS=y + +# == ccache == +BR2_CCACHE=y +BR2_CCACHE_INITIAL_SETUP="" +BR2_CCACHE_USE_BASEDIR=y diff --git a/buildroot-external/package/avi-fsw/Config.in b/buildroot-external/package/avi-cms-fsw/Config.in similarity index 100% rename from buildroot-external/package/avi-fsw/Config.in rename to buildroot-external/package/avi-cms-fsw/Config.in diff --git a/buildroot-external/package/avi-fsw/avi-fsw.mk b/buildroot-external/package/avi-cms-fsw/avi-fsw.mk similarity index 100% rename from buildroot-external/package/avi-fsw/avi-fsw.mk rename to buildroot-external/package/avi-cms-fsw/avi-fsw.mk diff --git a/buildroot-external/package/avi-cph-fsw/Config.in b/buildroot-external/package/avi-cph-fsw/Config.in new file mode 100644 index 0000000..55f3d91 --- /dev/null +++ b/buildroot-external/package/avi-cph-fsw/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_AVI_FSW + bool "avi-fsw" + select BR2_PACKAGE_LIBGPIOD + help + CMS COTS Avionics Flight Software + https://github.com/Purdue-Space-Program/PSPL_CMS_AVIONICS_COTS_FSW diff --git a/buildroot-external/package/avi-cph-fsw/avi-fsw.mk b/buildroot-external/package/avi-cph-fsw/avi-fsw.mk new file mode 100644 index 0000000..d933fae --- /dev/null +++ b/buildroot-external/package/avi-cph-fsw/avi-fsw.mk @@ -0,0 +1,17 @@ +AVI_FSW_VERSION = 0.1.0 +AVI_FSW_SITE = $(call github,Purdue-Space-Program,PSPL_CMS_AVIONICS_COTS_FSW,main) +AVI_FSW_LICENSE = PROPRIETARY +AVI_FSW_DEPENDENCIES = libgpiod + +AVI_FSW_CFLAGS = $(TARGET_CFLAGS) -Iinclude/ -std=c11 +AVI_FSW_CXXFLAGS = $(TARGET_CXXFLAGS) -Iinclude/ -std=c++20 + +define AVI_FSW_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) CFLAGS="$(AVI_FSW_CFLAGS)" CXXFLAGS="$(AVI_FSW_CXXFLAGS)" -C $(@D) all +endef + +define AVI_FSW_INSTALL_TARGET_CMDS + $(MAKE) -C $(@D) install PREFIX=$(TARGET_DIR) +endef + +$(eval $(generic-package)) diff --git a/copperhead_buildroot b/copperhead_buildroot deleted file mode 160000 index 909fcbc..0000000 --- a/copperhead_buildroot +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 909fcbc7772642bbacf4a30871e0586deb25bee6 diff --git a/run-container.sh b/run-container.sh index 98bddc8..07031d9 100755 --- a/run-container.sh +++ b/run-container.sh @@ -1,4 +1,4 @@ #!/bin/bash docker build -t psp-cms-buildroot . -docker run -it -v $PWD:/work -w /work psp-cms-buildroot bash \ No newline at end of file +docker run -it -v $PWD:/work -w /work psp-cms-buildroot bash From 06dcc976cf67eb6180aa8ae9466af56940404b7a Mon Sep 17 00:00:00 2001 From: Pradyunn Kale Date: Mon, 22 Dec 2025 02:45:43 -0500 Subject: [PATCH 5/5] Added SSH via make menuconfig, now ssh works, also made it so that it automatically assigns a static ip of 192.168.10.2 --- .../raspberrypi/rootfs_overlay/etc/network/interfaces | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 buildroot-external/board/raspberrypi/rootfs_overlay/etc/network/interfaces diff --git a/buildroot-external/board/raspberrypi/rootfs_overlay/etc/network/interfaces b/buildroot-external/board/raspberrypi/rootfs_overlay/etc/network/interfaces new file mode 100644 index 0000000..b3eee04 --- /dev/null +++ b/buildroot-external/board/raspberrypi/rootfs_overlay/etc/network/interfaces @@ -0,0 +1,9 @@ +# interface file auto-generated by buildroot + +auto lo +iface lo inet loopback + +auto eth0 +iface eth0 inet static + address 192.168.10.2 + netmask 255.255.255.0