Add --image option to build.sh and fix Build_FusionX.sh paths

- Added build_image() function and --image flag to build.sh that invokes
  Build_FusionX.sh to create the Linux SD card image for the SSD202 SOM
- Fixed all hardcoded paths in Build_FusionX.sh to use relative paths
  derived from the script's directory location
- Image outputs (sdrootfs.tar.gz, SigmastarUpgradeSD.bin) can be included
  in Gitea releases

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Philip Smart
2026-03-14 16:56:55 +00:00
parent 78fddfb2eb
commit bea3393432
2 changed files with 83 additions and 37 deletions

View File

@@ -91,6 +91,7 @@ usage() {
echo " --drivers Build kernel modules and user-space apps only"
echo " --spi Build SPI tools only"
echo " --cpld Build CPLD bitstreams only (requires Quartus Docker)"
echo " --image Build Linux SD card image (requires ARM cross-compiler)"
echo " --clean Clean all build artifacts"
echo " --help Show this help"
echo ""
@@ -352,6 +353,56 @@ build_cpld() {
done
}
#-------------------------------------------------------------------------------------------------------
# Build Linux SD card image using Build_FusionX.sh.
#-------------------------------------------------------------------------------------------------------
build_image() {
log_info "Building Linux SD card image..."
local BUILD_SCRIPT="${SOFTDIR}/linux/Build_FusionX.sh"
local IMAGE_OUTPUT="${SOFTDIR}/linux/project/image/output/images"
if [ ! -f "${BUILD_SCRIPT}" ]; then
log_skip "Build_FusionX.sh not found at ${BUILD_SCRIPT}"
return
fi
if ! command -v ${CROSS_PREFIX}gcc &>/dev/null; then
log_skip "ARM cross-compiler (${CROSS_PREFIX}gcc) not found - cannot build Linux image"
return
fi
if [ ! -d "${SOFTDIR}/linux/kernel" ] || [ ! -d "${SOFTDIR}/linux/boot" ]; then
log_skip "Linux kernel/boot source tree not found"
return
fi
chmod +x "${BUILD_SCRIPT}"
log_info " Running Build_FusionX.sh -f nand -p ssd202 -o 2D06 ..."
if "${BUILD_SCRIPT}" -f nand -p ssd202 -o 2D06 2>&1; then
# Check for output images.
local has_output=false
if [ -f "${IMAGE_OUTPUT}/sdrootfs.tar.gz" ]; then
log_ok "Image: sdrootfs.tar.gz"
has_output=true
fi
if [ -f "${IMAGE_OUTPUT}/SigmastarUpgradeSD.bin" ]; then
log_ok "Image: SigmastarUpgradeSD.bin"
has_output=true
fi
if [ -f "${IMAGE_OUTPUT}/SigmastarUpgrade.bin" ]; then
log_ok "Image: SigmastarUpgrade.bin"
has_output=true
fi
if ! ${has_output}; then
log_fail "Linux image build produced no output files"
fi
else
log_fail "Linux image build (Build_FusionX.sh)"
fi
}
#-------------------------------------------------------------------------------------------------------
# Clean all build artifacts.
#-------------------------------------------------------------------------------------------------------
@@ -386,6 +437,7 @@ BUILD_CPM=false
BUILD_DRIVERS=false
BUILD_SPI=false
BUILD_CPLD=false
BUILD_IMAGE=false
BUILD_ALL=false
DO_CLEAN=false
@@ -402,6 +454,7 @@ while [ $# -gt 0 ]; do
--drivers) BUILD_DRIVERS=true ;;
--spi) BUILD_SPI=true ;;
--cpld) BUILD_CPLD=true ;;
--image) BUILD_IMAGE=true ;;
--clean) DO_CLEAN=true ;;
--help|-h) usage ;;
*) echo "Unknown option: $1"; usage ;;
@@ -425,6 +478,7 @@ if ${BUILD_ALL} || ${BUILD_CPM}; then build_cpm; fi
if ${BUILD_ALL} || ${BUILD_DRIVERS}; then build_drivers; fi
if ${BUILD_ALL} || ${BUILD_SPI}; then build_spi; fi
if ${BUILD_ALL} || ${BUILD_CPLD}; then build_cpld; fi
if ${BUILD_ALL} || ${BUILD_IMAGE}; then build_image; fi
echo ""
echo "========================================"

View File

@@ -8,10 +8,11 @@
## This script builds the complete OS and software set required for FusionX.
## It builds the Linux kernel, rootfs filesystem, U-boot loader and apps.
##
## Credits:
## Credits:
## Copyright: (c) SigmaStar, tailoring by Philip Smart for FusionX
##
## History: October 2022 - Initial tailoring for FusionX
## March 2026 - Fixed hardcoded paths to be relative to project root.
##
## Synopsis: Build_FusionX.sh -f nand -p ssd202 -o 2D06 -m 256
##
@@ -47,20 +48,14 @@ done
DATE=$(date +%m%d)
BACKUPDIR=$(date +%m%d%H%M)
#images will output in ${RELEASEDIR}/images/
RELEASEDIR=`pwd`
FUSIONXDIR=`pwd`\..\FusionX
WEBSRVDIR=`pwd`\..\WebServer
Z80EMUDIR=`pwd`\..\Z80emu
#release source code
#find ./boot/ | grep -v boot/.git | cpio -pdm ${RELEASEDIR}/
#find ./project/ | grep -v project/.git | cpio -pdm ${RELEASEDIR}/
#find ./kernel/ | grep -v kernel/.git | cpio -pdm ${RELEASEDIR}/
#find ./sdk/ | grep sdk/verify | grep -v sdk/verify/application/smarttalk | cpio -pdm ${RELEASEDIR}/
#save code version
#repo manifest -o snapshot.xml -r
#cp snapshot.xml ${RELEASEDIR}/sdk_version.xml
# Resolve the script's directory to establish relative paths.
SCRIPTDIR="$(cd "$(dirname "$0")" && pwd)"
RELEASEDIR="${SCRIPTDIR}"
SOFTWAREDIR="$(cd "${SCRIPTDIR}/.." && pwd)"
FUSIONXDIR="${SOFTWAREDIR}/FusionX"
WEBSRVDIR="${SOFTWAREDIR}/WebServer"
Z80EMUDIR="${SOFTWAREDIR}/Z80emu"
export ARCH=arm
@@ -69,14 +64,14 @@ echo chose ${flashtype}
if [ ! "${project}" = "2D06" -a ! "${project}" = "2D07" ]; then
project=2D07
#exit 1
fi
fi
# Make the output directories if not present.
mkdir -p ${RELEASEDIR}/project/image/output/
for f in miservice appconfigs customer vendor rootfs images
do
mkdir -p ${RELEASEDIR}/project/image/output/$f
done
done
export PROJECT=${project}
@@ -127,7 +122,7 @@ if [ "${flashtype}" = "nor" ]; then
echo "Make Kernel 2"
make infinity2m_ssc011a_s01a_minigui_defconfig
fi
else
if [ "${fastboot}" = "fastboot" ]; then
echo "Make Kernel 3"
@@ -137,7 +132,7 @@ else
#make infinity2m_spinand_ssc011a_s01a_minigui_defconfig
make ${KERNEL_DEFCONFIG}
fi
fi
if [ "${clean}" = "1" ]; then
make clean
@@ -160,9 +155,9 @@ if [ "${flashtype}" = "nor" ]; then
fi
else
if [ "${fastboot}" = "fastboot" ]; then
if [ "${chip}" = "ssd201" ]; then
if [ "${chip}" = "ssd201" ]; then
./setup_config.sh ./configs/nvr/i2m/8.2.1/spinand.ram-glibc-squashfs.011a.64
elif [ "${chip}" = "ssd202" ]; then
elif [ "${chip}" = "ssd202" ]; then
./setup_config.sh ./configs/nvr/i2m/8.2.1/spinand.ram-glibc-squashfs.011a.128
fi
else
@@ -191,7 +186,7 @@ else
else
./release.sh -k ${RELEASEDIR}/kernel -b 011A -p nvr -f spinand -c i2m -l glibc -v 8.2.1
fi
fi
cd ${RELEASEDIR}/project
@@ -284,9 +279,9 @@ if [ -d ${Z80EMUDIR} ]; then
mkdir -p ${RELEASEDIR}/project/image/output/sdrootfs/apps/Z80/
cp -r Z80/* ${RELEASEDIR}/project/image/output/sdrootfs/apps/Z80/
fi
if [ -d /srv/dvlp/Projects/tzpu/FusionX/software/linux/project/custom ]; then
if [ -d ${RELEASEDIR}/project/custom ]; then
echo -n "Custom "
cd /srv/dvlp/Projects/tzpu/FusionX/software/linux/project/
cd ${RELEASEDIR}/project/
mkdir -p ${RELEASEDIR}/project/image/output/sdrootfs/apps/custom/
cp -r custom/* ${RELEASEDIR}/project/image/output/sdrootfs/apps/custom/
fi
@@ -294,13 +289,17 @@ fi
# Copy any new files.
for f in DSK MZF CPM BAS CAS Basic
do
mkdir -p ${RELEASEDIR}/project/image/output/sdrootfs/apps/FusionX/disk/
cp -r /srv/dvlp/Projects/tzpu/FusionX/software/${f}/ ${RELEASEDIR}/project/image/output/sdrootfs/apps/FusionX/disk/${f}/
if [ -d ${SOFTWAREDIR}/${f} ]; then
mkdir -p ${RELEASEDIR}/project/image/output/sdrootfs/apps/FusionX/disk/
cp -r ${SOFTWAREDIR}/${f}/ ${RELEASEDIR}/project/image/output/sdrootfs/apps/FusionX/disk/${f}/
fi
done
# Copy an new rom images.
mkdir -p ${RELEASEDIR}/project/image/output/sdrootfs/apps/FusionX/roms/
cp -r /srv/dvlp/Projects/tzpu/FusionX/software/roms/* ${RELEASEDIR}/project/image/output/sdrootfs/apps/FusionX/roms/
# Copy any new rom images.
if [ -d ${SOFTWAREDIR}/roms ]; then
mkdir -p ${RELEASEDIR}/project/image/output/sdrootfs/apps/FusionX/roms/
cp -r ${SOFTWAREDIR}/roms/* ${RELEASEDIR}/project/image/output/sdrootfs/apps/FusionX/roms/
fi
# Make any manual setup changes.
#echo "/dev/zram0 none swap sw 0 -1" >> ${RELEASEDIR}/project/image/output/sdrootfs/etc/fstab
@@ -342,14 +341,7 @@ echo " /dev/sdc3 6293504 62333951 56040448 26.7G 83 Linux"
echo " mkfs.vfat /dev/<sd partition 1>"
echo " mkfs.ext2 /dev/<sd partition 3>"
echo " mkdir -p /mnt/upgrade; mount /dev/<sd partition 1> /mnt/upgrade"
echo " mkdir -p /mnt/rootfd; mount /dev/<sd partition 3> /mnt/rootfs"
echo " mkdir -p /mnt/rootfs; mount /dev/<sd partition 3> /mnt/rootfs"
echo " cp ${RELEASEDIR}/project/image/output/images/SigmastarUpgradeSD.bin /mnt/upgrade/FusionX.bin"
echo " cd /mnt/rootfs; tar -xvf /dvlp/Projects/tzpu/FusionX/software/linux/project/image/output/images/sdrootfs.tar.gz; sync; sync"
echo " cd /mnt/rootfs; tar -xvf ${RELEASEDIR}/project/image/output/images/sdrootfs.tar.gz; sync; sync"
echo " cd /; umount /mnt/upgrade; umount /mnt/rootfs"
#tar -cvzf boot_${DATE}.tar.gz boot
#tar -cvzf kernel_${DATE}.tar.gz kernel
#tar -cvzf project_${DATE}.tar.gz project
#tar -cvzf sdk_${DATE}.tar.gz sdk