diff --git a/build.sh b/build.sh index e069000c7..9a06082dd 100755 --- a/build.sh +++ b/build.sh @@ -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 "========================================" diff --git a/software/linux/Build_FusionX.sh b/software/linux/Build_FusionX.sh index 328ecbbf3..7dbf14027 100755 --- a/software/linux/Build_FusionX.sh +++ b/software/linux/Build_FusionX.sh @@ -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/" echo " mkfs.ext2 /dev/" echo " mkdir -p /mnt/upgrade; mount /dev/ /mnt/upgrade" -echo " mkdir -p /mnt/rootfd; mount /dev/ /mnt/rootfs" +echo " mkdir -p /mnt/rootfs; mount /dev/ /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 - -