Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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
Expand Down
28 changes: 23 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,30 @@

## 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
```

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
Expand All @@ -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
Expand Down
8 changes: 7 additions & 1 deletion buildroot-external/Config.in
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
source "$BR2_EXTERNAL_PSPL_CMS_PATH/package/avi-fsw/Config.in"
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
Original file line number Diff line number Diff line change
@@ -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
4 changes: 3 additions & 1 deletion buildroot-external/configs/pspl_cms_pi4_defconfig
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
BR2_TARGET_CMS=y

BR2_aarch64=y
BR2_cortex_a72=y
BR2_ARM_FPU_VFPV4=y
Expand Down Expand Up @@ -73,4 +75,4 @@ BR2_TARGET_ROOTFS_SQUASHFS=y
# == ccache ==
BR2_CCACHE=y
BR2_CCACHE_INITIAL_SETUP=""
BR2_CCACHE_USE_BASEDIR=y
BR2_CCACHE_USE_BASEDIR=y
78 changes: 78 additions & 0 deletions buildroot-external/configs/pspl_cph_pi4_defconfig
Original file line number Diff line number Diff line change
@@ -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
6 changes: 6 additions & 0 deletions buildroot-external/package/avi-cph-fsw/Config.in
Original file line number Diff line number Diff line change
@@ -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
17 changes: 17 additions & 0 deletions buildroot-external/package/avi-cph-fsw/avi-fsw.mk
Original file line number Diff line number Diff line change
@@ -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))
2 changes: 1 addition & 1 deletion run-container.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash

docker build -t psp-cms-buildroot .
docker run -it -v $PWD:/work -w /work psp-cms-buildroot bash
docker run -it -v $PWD:/work -w /work psp-cms-buildroot bash