diff --git a/lib/board.sh b/lib/board.sh index ec6861c..0c989d3 100644 --- a/lib/board.sh +++ b/lib/board.sh @@ -7,6 +7,9 @@ board_mountpoint_defaults ( ) { if [ -z "${BOARD_UFS_MOUNTPOINT_PREFIX}" ]; then BOARD_UFS_MOUNTPOINT_PREFIX=${WORKDIR}/_.mount.ufs fi + if [ -z "${BOARD_SWAP_MOUNTPOINT_PREFIX}" ]; then + BOARD_SWAP_MOUNTPOINT_PREFIX=${WORKDIR}/_.mount.swap + fi if [ -z "${BOARD_FREEBSD_MOUNTPOINT_PREFIX}" ]; then BOARD_FREEBSD_MOUNTPOINT_PREFIX=${WORKDIR}/_.mount.freebsd fi @@ -57,10 +60,13 @@ board_generate_image_name ( ) { eval IMG=${_IMGDIR}/${IMGNAME} fi if [ -z "${IMG}" ]; then + DATE=`date +%Y%m%d` if [ -z "${SOURCE_VERSION}" ]; then - IMG=${_IMGDIR}/FreeBSD-${TARGET_ARCH}-${FREEBSD_MAJOR_VERSION}-${KERNCONF}-${BOARDNAME}.img +# IMG=${_IMGDIR}/FreeBSD-${TARGET_ARCH}-${FREEBSD_MAJOR_VERSION}-${KERNCONF}-${BOARDNAME}.img + IMG=${_IMGDIR}/FreeBSD-${TARGET_ARCH}-${FREEBSD_VERSION}-${KERNCONF}-${BOARDNAME}-${DATE}.img else - IMG=${_IMGDIR}/FreeBSD-${TARGET_ARCH}-${FREEBSD_VERSION}-${KERNCONF}-${SOURCE_VERSION}-${BOARDNAME}.img +# IMG=${_IMGDIR}/FreeBSD-${TARGET_ARCH}-${FREEBSD_VERSION}-${KERNCONF}-${SOURCE_VERSION}-${BOARDNAME}.img + IMG=${_IMGDIR}/FreeBSD-${TARGET_ARCH}-${FREEBSD_VERSION}-${KERNCONF}-${BOARDNAME}-${SOURCE_VERSION}-${DATE}.img fi fi echo "Image name is:" @@ -80,7 +86,8 @@ PRIORITY=200 strategy_add $PHASE_POST_CONFIG board_generate_image_name board_overlay_files ( ) { if [ -d $1/overlay ]; then echo "Overlaying board-specific files from $1/overlay" - (cd $1/overlay; find . | cpio -pmud ${BOARD_FREEBSD_MOUNTPOINT}) +# (cd $1/overlay; find . | cpio -pmud ${BOARD_FREEBSD_MOUNTPOINT}) + (cd $1/overlay; tar cf - . | tar xf - -C ${BOARD_FREEBSD_MOUNTPOINT}) fi } @@ -149,6 +156,18 @@ board_default_installkernel ( ) { # into different places (e.g., separate firmware or # separate partition). +board_default_dtb_copy ( ) { + cp -r ${BOARD_FREEBSD_MOUNTPOINT_PREFIX}/boot/dtb ${BOARD_BOOT_MOUNTPOINT_PREFIX}/ +} +PRIORITY=200 strategy_add $PHASE_FREEBSD_BOARD_INSTALL board_default_dtb_copy + +freebsd_dtb_copy ( ) { + target=${PWD} + LOGFILE=${WORKDIR}/_.dtb.install.${CONF}.log + [ "$1" != "." ] && target="$1" + echo "Installing DTB files in ${TARGET}" + cp -r ${WORKDIR}/efi-${CONF}/boot/dtb $1 || exit 1 +} board_default_goodbye ( ) { echo "DONE." @@ -296,7 +315,7 @@ board_mount_all ( ) { local ABSINDEX echo "Mounting all file systems:" - + ABSINDEX=1 while [ $ABSINDEX -le $DISK_COUNT ]; do disk_mount `board_mountpoint ${ABSINDEX}` ${ABSINDEX} diff --git a/lib/disk.sh b/lib/disk.sh index 6bd9bbd..fe416bb 100644 --- a/lib/disk.sh +++ b/lib/disk.sh @@ -60,6 +60,12 @@ disk_partition_mbr ( ) { gpart create -s MBR ${DISK_MD} } +disk_partition_gpt ( ) { + echo "Partitioning the raw disk image with GPT at "`date` + echo gpart create -s GPT ${DISK_MD} + gpart create -s GPT ${DISK_MD} +} + # $1: mount directory disk_prep_mountdir ( ) { if [ -d "$1" ]; then @@ -179,6 +185,11 @@ disk_created_new ( ) { disk_set_var ${ABSINDEX} PARTITION ${NAME} disk_set_var ${ABSINDEX} DEVICE /dev/${NAME} + # The first UBOOT partition is always considered a boot partition + if [ \( "$TYPE" = "BOOT" \) -a \( ${RELINDEX} -eq 1 \) ]; then + disk_set_var ${ABSINDEX} BOOT "y" + fi + # The first FAT partition is always considered a boot partition if [ \( "$TYPE" = "FAT" \) -a \( ${RELINDEX} -eq 1 \) ]; then disk_set_var ${ABSINDEX} BOOT "y" @@ -188,6 +199,11 @@ disk_created_new ( ) { if [ \( "$TYPE" = "UFS" \) -a \( ${RELINDEX} -eq 1 \) ]; then disk_set_var ${ABSINDEX} FREEBSD "y" fi + + # The first SWAP partition always gets FreeBSD installed + if [ \( "$TYPE" = "SWAP" \) -a \( ${RELINDEX} -eq 1 \) ]; then + disk_set_var ${ABSINDEX} SWAP "y" + fi } @@ -313,6 +329,7 @@ disk_fat_create ( ) { NEW_FAT_SLICE=`gpart add -a 63 -b ${FAT_START_BLOCK} -s $1 -t '!12' ${DISK_MD} | sed -e 's/ .*//'` NEW_FAT_DEVICE=/dev/${NEW_FAT_SLICE} NEW_FAT_SLICE_NUMBER=`echo ${NEW_FAT_SLICE} | sed -e 's/.*[^0-9]//'` + gpart set -a active -i ${NEW_FAT_SLICE_NUMBER} ${DISK_MD} # TODO: Select FAT12, FAT16, or FAT32 depending on partition size @@ -388,19 +405,20 @@ disk_ufs_create ( ) { gpart create -s BSD ${NEW_UFS_SLICE} NEW_UFS_PARTITION=`gpart add -t freebsd-ufs -a 64k ${NEW_UFS_SLICE} | sed -e 's/ .*//'` || exit 1 - NEW_UFS_DEVICE=/dev/${NEW_UFS_PARTITION} newfs ${NEW_UFS_DEVICE} # Turn on Softupdates - tunefs -n enable ${NEW_UFS_DEVICE} +# serg + echo tunefs -n enable ${NEW_UFS_DEVICE} # Turn on SUJ with a minimally-sized journal. # This makes reboots tolerable if you just pull power # Note: A slow SDHC reads about 1MB/s, so a 30MB # journal can delay boot by 30s. tunefs -j enable -S 4194304 ${NEW_UFS_DEVICE} # Turn on NFSv4 ACLs - tunefs -N enable ${NEW_UFS_DEVICE} +# serg + echo tunefs -N enable ${NEW_UFS_DEVICE} disk_created_new UFS ${NEW_UFS_PARTITION} } @@ -432,15 +450,76 @@ disk_ufs_mount ( ) { disk_record_mountdir $1 } +# serg +disk_partition_rk3588_create ( ) { + NEW_UBOOT_PARTITION=`gpart add -t linux-data -l uboot -b 1m -s 8m ${DISK_MD} | sed -e 's/ .*//'` || exit 1 + NEW_UBOOT_DEVICE=/dev/${NEW_UBOOT_PARTITION} + echo "Create U-Boot partition to ${NEW_UBOOT_DEVICE}" + disk_created_new BOOT ${NEW_UBOOT_PARTITION} -# -disk_efi_create ( ) { - NEW_EFI_PARTITION=`gpart add -t efi -s 800K ${DISK_MD} | sed -e 's/ .*//'` || exit 1 + NEW_EFI_PARTITION=`gpart add -t efi -l efi -a 512k -s 15m ${DISK_MD} | sed -e 's/ .*//'` || exit 1 NEW_EFI_DEVICE=/dev/${NEW_EFI_PARTITION} - echo "Writing EFI partition to ${NEW_EFI_DEVICE}" - dd if=${FREEBSD_OBJDIR}/stand/efi/boot1/boot1.efifat of=${NEW_EFI_DEVICE} + echo "Create EFI partition to ${NEW_EFI_DEVICE}" + newfs_msdos -L efi ${NEW_EFI_DEVICE} + disk_created_new FAT ${NEW_EFI_PARTITION} +} + +# serg +disk_partition_efi_create ( ) { + if [ -n "$1" ]; then + START_ARG="-b $1" + else + START_ARG="-b 16m" + fi + + NEW_EFI_PARTITION=`gpart add -t efi -l efi -a 512k -s 50m ${START_ARG} ${DISK_MD} | sed -e 's/ .*//'` || exit 1 + NEW_EFI_DEVICE=/dev/${NEW_EFI_PARTITION} + + echo "Create EFI partition to ${NEW_EFI_DEVICE}" + newfs_msdos -L efi ${NEW_EFI_DEVICE} + disk_created_new FAT ${NEW_EFI_PARTITION} +} + +# serg +disk_partition_swap_create ( ) { + local SIZE_ARG + local NEW_UFS_PARTITION + local NEW_UFS_DEVICE + + if [ -n "$1" ]; then + SIZE_ARG="-s $1" + else + SIZE_ARG="-s 2g" + fi + + NEW_SWAP_PARTITION=`gpart add -t freebsd-swap ${SIZE_ARG} -a 64k -l swapfs ${DISK_MD} | sed -e 's/ .*//'` || exit 1 + NEW_SWAP_DEVICE=/dev/${NEW_SWAP_PARTITION} + + echo "Create FreeBSD-SWAP ${SIZE_ARG} partition on ${NEW_SWAP_DEVICE}" + disk_created_new SWAP ${NEW_SWAP_PARTITION} } +# serg +# $1: size of partition, uses remainder of disk if not specified +disk_partition_ufs_create ( ) { + local SIZE_ARG + local SIZE_DISPLAY="n auto-sized" + local NEW_UFS_PARTITION + local NEW_UFS_DEVICE + + if [ -n "$1" ]; then + SIZE_ARG="-s $1" + SIZE_DISPLAY=" $1" + fi + + echo "Creating a${SIZE_DISPLAY} FreeBSD-UFS partition at "`date` + + NEW_UFS_PARTITION=`gpart add -t freebsd-ufs -a 64k ${SIZE_ARG} -l install ${DISK_MD} | sed -e 's/ .*//'` || exit 1 + NEW_UFS_DEVICE=/dev/${NEW_UFS_PARTITION} + + newfs -L FreeBSD ${NEW_UFS_DEVICE} + disk_created_new UFS ${NEW_UFS_PARTITION} +} # # $1: mount point @@ -454,12 +533,18 @@ disk_mount ( ) { TYPE=`disk_get_var ${ABSINDEX} TYPE` RELINDEX=`disk_get_var ${ABSINDEX} RELINDEX` case ${TYPE} in + BOOT) + disk_fat_mount ${MOUNTPOINT} ${RELINDEX} + ;; FAT) disk_fat_mount ${MOUNTPOINT} ${RELINDEX} ;; UFS) disk_ufs_mount ${MOUNTPOINT} ${RELINDEX} ;; + SWAP) + echo mount ${MOUNTPOINT} ${RELINDEX} + ;; *) echo "Attempt to mount ${TYPE} partition ${RELINDEX} at ${MOUNTPOINT} failed." echo "Do not know how to mount partitions of type ${TYPE}." diff --git a/lib/freebsd.sh b/lib/freebsd.sh index ae97d72..15466db 100644 --- a/lib/freebsd.sh +++ b/lib/freebsd.sh @@ -68,6 +68,7 @@ freebsd_dtc_test ( ) { freebsd_src_version ( ) { FREEBSD_VERSION=`/usr/bin/grep "REVISION=" ${FREEBSD_SRC}/sys/conf/newvers.sh | awk 'BEGIN {FS="="} {print $2}' | /usr/bin/tr -d '"'` + FREEBSD_BRANCH=`/usr/bin/grep ^"BRANCH=" ${FREEBSD_SRC}/sys/conf/newvers.sh | awk 'BEGIN {FS="="} {print $2}' | /usr/bin/tr -d '"'` FREEBSD_MAJOR_VERSION=`echo $FREEBSD_VERSION | awk 'BEGIN {FS="."} {print $1}'` echo "Building FreeBSD version: $FREEBSD_VERSION"; } @@ -344,10 +345,18 @@ freebsd_ubldr_build ( ) { rm -rf ${UBLDR_DIR}/boot mkdir -p ${UBLDR_DIR}/boot/defaults - cd stand - eval $buildenv make "$@" -m $ubldr_makefiles obj > ${LOGFILE} 2>&1 - eval $buildenv make "$@" -m $ubldr_makefiles clean >> ${LOGFILE} 2>&1 - eval $buildenv make "$@" -m $ubldr_makefiles depend >> ${LOGFILE} 2>&1 + if [ -d stand ] ; then + cd stand + eval $buildenv make "$@" -m $ubldr_makefiles obj > ${LOGFILE} 2>&1 + eval $buildenv make "$@" -m $ubldr_makefiles clean >> ${LOGFILE} 2>&1 + eval $buildenv make "$@" -m $ubldr_makefiles depend >> ${LOGFILE} 2>&1 + else + cd sys/boot + eval $buildenv make "$@" -m $ubldr_makefiles obj > ${LOGFILE} 2>&1 + eval $buildenv make "$@" -m $ubldr_makefiles clean >> ${LOGFILE} 2>&1 + eval $buildenv make "$@" -m $ubldr_makefiles all >> ${LOGFILE} 2>&1 + fi + if /bin/sh -e ${UBLDR_DIR}/_.ubldr.${CONF}.sh >> ${LOGFILE} 2>&1 then cd arm/uboot @@ -426,6 +435,10 @@ freebsd_loader_efi_build ( ) { then cd efi/boot1 eval $buildenv make "$@" DESTDIR=${EFI_DIR}/ BINDIR=boot MK_MAN=no -m $sharemk install >> ${LOGFILE} || exit 1 + cd ../loader_4th + eval $buildenv make "$@" DESTDIR=${EFI_DIR}/ BINDIR=boot MK_MAN=no -m $sharemk install >> ${LOGFILE} || exit 1 + cd ../loader_lua + eval $buildenv make "$@" DESTDIR=${EFI_DIR}/ BINDIR=boot MK_MAN=no -m $sharemk install >> ${LOGFILE} || exit 1 mv ${EFI_DIR}/_.efi.${CONF}.sh ${EFI_DIR}/_.efi.${CONF}.built else echo "Failed to build FreeBSD efi" @@ -440,8 +453,10 @@ freebsd_loader_efi_copy ( ) { target=${PWD} LOGFILE=${WORKDIR}/_.loader.efi.install.${CONF}.log [ "$1" != "." ] && target="$1" - echo "Installing boot1.efi in ${TARGET}" - cp ${WORKDIR}/efi-${CONF}/boot/boot1.efi $1 || exit 1 +# echo "Installing boot1.efi in ${TARGET}" +# cp ${WORKDIR}/efi-${CONF}/boot/boot1.efi $1 || exit 1 + echo "Installing loader.efi in ${TARGET}" + cp ${WORKDIR}/efi-${CONF}/boot/loader_lua.efi $1 || exit 1 } # freebsd_install_usr_src: Copy FREEBSD_SRC tree diff --git a/lib/gpt.sh b/lib/gpt.sh index 4a4add8..1a31f8e 100644 --- a/lib/gpt.sh +++ b/lib/gpt.sh @@ -16,7 +16,7 @@ gpt_add_fat_partition ( ) { local NEW_FAT_DEVICE=/dev/${NEW_FAT_SLICE} echo "FAT partition is ${NEW_FAT_DEVICE}" newfs_msdos ${NEW_FAT_DEVICE} >/dev/null - disk_created_new FAT ${NEW_FAT_SLICE} + eisk_created_new FAT ${NEW_FAT_SLICE} } # add a GPT UFS parition @@ -27,4 +27,4 @@ gpt_add_ufs_partition ( ) { echo "UFS partition is ${NEW_UFS_DEVICE}" newfs ${NEW_UFS_DEVICE} >/dev/null disk_created_new UFS ${NEW_UFS_SLICE} -} \ No newline at end of file +}