123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- #!/bin/sh
- # Build disk image and populate boot data
- # Copyright Brian Conway <bconway@rcesoftware.com>, see LICENSE for details
- if [ -n "${com0sp+1}" ]; then
- COM0="com0_${com0sp}-"
- else
- COM0=
- fi
- IMAGE=resflash-${MACHINE}-${imgsizemb}MB-${COM0}${DATE}.img
- echo "Creating disk image: ${IMAGE}"
- # Build the disk image
- dd if=/dev/zero of=${IMAGE} bs=1m count=0 seek=${imgsizemb} status=none
- get_next_vnd
- imgvnd=${NEXTVND}
- vnconfig ${imgvnd} ${IMAGE} > /dev/null
- # Fdisk the image
- # CHS is bogus, we're not going to deal with it and require an LBA-aware BIOS
- ${ESCECHO} "e 0\n${DOSPARTID}\n\n${DOSSTART}\n\
- $((DOSPARTMB * 1024 * 1024 / BYTESECT))\ne 3\nA6\n\n\
- $((DOSPARTMB * 1024 * 1024 / BYTESECT + DOSSTART))\n*\n\
- flag ${FLAGPART}\n\
- update\n\
- write\n\
- exit\n"|fdisk -e ${imgvnd} >> ${BUILDPATH}/00.mkimg.00.fdisk.img 2>&1
- if [ -f ${basedir}/usr/mdec/mbr ]; then
- fdisk -uy -f ${basedir}/usr/mdec/mbr ${imgvnd} >> \
- ${BUILDPATH}/00.mkimg.01.fdisk.updatembr 2>&1
- fi
- fdisk -v ${imgvnd} >> ${BUILDPATH}/00.mkimg.02.fdisk.out 2>&1
- # Build the disklabel: ${MBRPARTMB} MB /mbr, optional swap, two /, 100+ MB /cfg
- dlroot=$(bc -e "${fssizekb} * 1024 / ${BYTESECT}" -e quit)
- if [ ${swapsizemb} -gt 0 ]; then
- dlswap=$(bc -e "${swapsizemb} * 1024 * 1024 / ${BYTESECT}" -e quit)
- addswap="a b\n\n${dlswap}\n\n"
- fi
- ${ESCECHO} "a a\n$((MBRSTART * 1024 * 1024 / BYTESECT))\n\
- $((MBRPARTMB * 1024 * 1024 / BYTESECT))\n\n\
- ${addswap}\
- a d\n\n${dlroot}\n\n\
- a e\n\n${dlroot}\n\n\
- a f\n\n\n\n\
- q\n\n"|disklabel -E ${imgvnd} >> ${BUILDPATH}/00.mkimg.03.disklabel.img 2>&1
- disklabel ${imgvnd} >> ${BUILDPATH}/00.mkimg.04.disklabel.out 2>&1
- # Create /mbr, /cfg, and /${DOSMNT} filesystems and mount
- mkdir -p ${BUILDPATH}/mbr ${BUILDPATH}/cfg ${BUILDPATH}/${DOSMNT}
- newfs -O 2 ${imgvnd}a >> ${BUILDPATH}/00.mkimg.05.newfs.a 2>&1
- newfs -O 2 ${imgvnd}f >> ${BUILDPATH}/00.mkimg.06.newfs.f 2>&1
- newfs_msdos -L ${DOSMNT} ${imgvnd}i >> ${BUILDPATH}/00.mkimg.07.newfs.i 2>&1
- mount -o noatime /dev/${imgvnd}a ${BUILDPATH}/mbr
- mount -o noatime /dev/${imgvnd}f ${BUILDPATH}/cfg
- mount -o noatime /dev/${imgvnd}i ${BUILDPATH}/${DOSMNT}
- mkdir -p ${BUILDPATH}/mbr/etc ${BUILDPATH}/cfg/{etc,var} \
- ${BUILDPATH}/cfg/upgrade_overlay/{etc,home,root,var} \
- ${BUILDPATH}/${DOSMNT}/${DOSBOOTDIR}
- chmod 700 ${BUILDPATH}/cfg/upgrade_overlay/root
- # Install biosboot(8), boot(8) on amd64/i386, boot scaffold on arm64, and
- # boot.conf most places
- if [ ${MACHINE} = 'amd64' ] || [ ${MACHINE} = 'i386' ]; then
- # Binaries for installboot, biosboot(8), and boot(8) must be in sync, run from
- # current install
- if [ ${CROSSARCH} -eq 0 ]; then
- installboot -v -r ${BUILDPATH}/mbr ${imgvnd} /usr/mdec/biosboot \
- /usr/mdec/boot >> ${BUILDPATH}/00.mkimg.08.installboot.pc 2>&1
- else
- # Cross-arch installboot may fail silently if releases differ
- installboot -v -r ${BUILDPATH}/mbr ${imgvnd} ${basedir}/usr/mdec/biosboot \
- ${basedir}/usr/mdec/boot >> ${BUILDPATH}/00.mkimg.09.installboot.cross 2>&1
- fi
- echo 'set device hd0d' >> ${BUILDPATH}/mbr/etc/boot.conf
- elif [ ${MACHINE} = 'arm64' ]; then
- mkdir -p ${BUILDPATH}/${DOSMNT}/overlays
- cp /usr/local/share/raspberrypi-firmware/boot/bcm2710-rpi-2-b.dtb \
- ${BUILDPATH}/${DOSMNT}/
- cp /usr/local/share/raspberrypi-firmware/boot/bcm2710-rpi-3-b.dtb \
- ${BUILDPATH}/${DOSMNT}/
- cp /usr/local/share/raspberrypi-firmware/boot/bcm2710-rpi-3-b-plus.dtb \
- ${BUILDPATH}/${DOSMNT}/
- cp /usr/local/share/raspberrypi-firmware/boot/bcm2710-rpi-cm3.dtb \
- ${BUILDPATH}/${DOSMNT}/
- cp /usr/local/share/raspberrypi-firmware/boot/bcm2711-rpi-4-b.dtb \
- ${BUILDPATH}/${DOSMNT}/
- cp /usr/local/share/raspberrypi-firmware/boot/bcm2711-rpi-400.dtb \
- ${BUILDPATH}/${DOSMNT}/
- cp /usr/local/share/raspberrypi-firmware/boot/bcm2711-rpi-cm4.dtb \
- ${BUILDPATH}/${DOSMNT}/
- cp /usr/local/share/raspberrypi-firmware/boot/bootcode.bin \
- ${BUILDPATH}/${DOSMNT}/
- cp /usr/local/share/raspberrypi-firmware/boot/start.elf \
- ${BUILDPATH}/${DOSMNT}/
- cp /usr/local/share/raspberrypi-firmware/boot/start4.elf \
- ${BUILDPATH}/${DOSMNT}/
- cp /usr/local/share/raspberrypi-firmware/boot/fixup.dat \
- ${BUILDPATH}/${DOSMNT}/
- cp /usr/local/share/raspberrypi-firmware/boot/fixup4.dat \
- ${BUILDPATH}/${DOSMNT}/
- cp /usr/local/share/raspberrypi-firmware/boot/overlays/disable-bt.dtbo \
- ${BUILDPATH}/${DOSMNT}/overlays/
- cp /usr/local/share/u-boot/rpi_arm64/u-boot.bin ${BUILDPATH}/${DOSMNT}/
- dd if=/usr/local/share/u-boot/pine64_plus/u-boot-sunxi-with-spl.bin \
- of=/dev/r${imgvnd}c bs=1024 seek=8 conv=sync >> \
- ${BUILDPATH}/00.mkimg.10.dd.sunxi 2>&1
- echo 'set device sd0d' >> ${BUILDPATH}/mbr/etc/boot.conf
- echo ${DOSBOOTBINS} >> ${BUILDPATH}/${DOSMNT}/${DOSBOOTDIR}/startup.nsh
- echo 'arm_64bit=1' >> ${BUILDPATH}/${DOSMNT}/config.txt
- echo 'enable_uart=1' >> ${BUILDPATH}/${DOSMNT}/config.txt
- echo 'dtoverlay=disable-bt' >> ${BUILDPATH}/${DOSMNT}/config.txt
- echo 'kernel=u-boot.bin' >> ${BUILDPATH}/${DOSMNT}/config.txt
- fi
- # Install ${DOSBOOTBINS} bootloaders manually due to MBR, if available
- for bootbin in ${DOSBOOTBINS}; do
- if [ -f ${basedir}/usr/mdec/${bootbin} ]; then
- cp ${basedir}/usr/mdec/${bootbin} ${BUILDPATH}/${DOSMNT}/${DOSBOOTDIR}/
- fi
- done
- # Set com0 console on arches that default to ttyC*, if directed
- if [ -n "${com0sp+1}" ] && [ ${MACHINE} != 'arm64' ]; then
- # Change speed first to skip extra 5s wait
- echo "stty com0 ${com0sp}" >> ${BUILDPATH}/mbr/etc/boot.conf
- echo 'set tty com0' >> ${BUILDPATH}/mbr/etc/boot.conf
- fi
|