******************************************************************************** *** BUILD SCRIPT FOR RASPBERRY PI 64-BIT GENTOO PREBUILD ARCHIVE *** *** Allan's Workshop *** *** https://www.drassal.net/wp/raspberry-pi-boot-partition-rebuild *** *** Revised 2025-01-16 *** ******************************************************************************** ******************************************************************************** *** THE BELOW ARCHIVE FILES WILL BE CREATED *** bootfs_20250116.tar.bz2 *** the bootfs partition on the sd card *** rootfs_modules_20250116.tar.bz2 *** the kernel modules for both kernel configurations *** rootfs_firmware-nonfree_20250116.tar.bz2 *** the firmware for Raspberry Pi integrated hardware *** rootfs_firmware-bluez_20250116.tar.bz2 *** the firmware for Raspberry Pi Bluetooth hardware ******************************************************************************** *** SETUP ENVIORNMENT VARIABLES NOW_YMDHMS="$(date +"%Y%m%d%H%M%S")" NOW_YMD="$(date +"%Y%m%d")" DATESTAMP="${NOW_YMD}" WORKDIR="/var/datadisk/raspberrypi_gentoo_rpi64/build_attempt_20250116/prebuild_archive_${DATESTAMP}" BOOTFS_ROOT="${WORKDIR}/bootfs" ROOTFS_FIRMWARE_NONFREE="${WORKDIR}/rootfs_firmware-nonfree" ROOTFS_FIRMWARE_BLUEZ="${WORKDIR}/rootfs_firmware_bluez" ROOTFS_MODULES="${WORKDIR}/rootfs_modules" KERNEL_ROOT="/var/datadisk/raspberrypi_gentoo_rpi64/raspberrypi_kernel_20250110/kernel_build_20250113" KERNEL1_ARCHIVE="${KERNEL_ROOT}/linux_6.6.70_kernel8_20250113.tar.bz2" KERNEL1_ARCHIVE_MODULES="${KERNEL_ROOT}/linux_6.6.70_kernel8_modules_20250113.tar.bz2" KERNEL1_ARCHIVE_DTB="${KERNEL_ROOT}/linux_6.6.70_kernel8_dtb_20250113.tar.bz2" KERNEL1_FILENAME_KERNEL="kernel8.img" KERNEL1_FILENAME_CONFIG="kernel8.config" KERNEL2_ARCHIVE="${KERNEL_ROOT}/linux_6.6.70_kernel_2712_20250113.tar.bz2" KERNEL2_ARCHIVE_MODULES="${KERNEL_ROOT}/linux_6.6.70_kernel_2712_modules_20250113.tar.bz2" KERNEL2_ARCHIVE_DTB="${KERNEL_ROOT}/linux_6.6.70_kernel_2712_dtb_20250113.tar.bz2" KERNEL2_FILENAME_KERNEL="kernel_2712.img" KERNEL2_FILENAME_CONFIG="kernel_2712.config" *** prepare the local work directory mkdir -p ${WORKDIR} cd ${WORKDIR} *** download and prepare the sources *** get the current firmware rm -rf ${WORKDIR}/firmware git clone --depth=1 https://github.com/raspberrypi/firmware *** get the current firmware (nonfree) rm -rf ${WORKDIR}/firmware-nonfree git clone --depth=1 https://github.com/RPi-Distro/firmware-nonfree.git *** get the current firmware (bluez-firmware) rm -rf ${WORKDIR}/bluez-firmware git clone --depth=1 https://github.com/RPi-Distro/bluez-firmware.git *** archive downloaded files for later use tar -jcvpf ${WORKDIR}/firmware_${DATESTAMP}.tar.bz2 --directory=${WORKDIR}/firmware . tar -jcvpf ${WORKDIR}/firmware-nonfree_${DATESTAMP}.tar.bz2 --directory=${WORKDIR}/firmware-nonfree . tar -jcvpf ${WORKDIR}/bluez-firmware_${DATESTAMP}.tar.bz2 --directory=${WORKDIR}/bluez-firmware . *** extract the firmware to retrieve necesary files #rm -rf ${WORKDIR}/firmware #mkdir -p ${WORKDIR}/firmware #tar xpjf ${WORKDIR}/firmware_${DATESTAMP}.tar.bz2 -C ${WORKDIR_REMOTE}/firmware *** prepare the bootfs directory rm -rf ${BOOTFS_ROOT} mkdir -p ${BOOTFS_ROOT} *** copy the necessary firmware files cp -a ${WORKDIR}/firmware/boot/COPYING.linux ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/LICENCE.broadcom ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/bootcode.bin ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/fixup.dat ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/fixup4.dat ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/fixup4cd.dat ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/fixup4db.dat ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/fixup4x.dat ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/fixup_cd.dat ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/fixup_db.dat ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/fixup_x.dat ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/start.elf ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/start4.elf ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/start4cd.elf ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/start4db.elf ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/start4x.elf ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/start_cd.elf ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/start_db.elf ${BOOTFS_ROOT}/. cp -a ${WORKDIR}/firmware/boot/start_x.elf ${BOOTFS_ROOT}/. *** examine the current bootfs directory ls ${BOOTFS_ROOT} *** copy the kernel, config, and dtb files #update the kernel1 files on the sd card tar xjfv ${KERNEL1_ARCHIVE} -C ${BOOTFS_ROOT} ./${KERNEL1_FILENAME_KERNEL} tar xjfv ${KERNEL1_ARCHIVE} -C ${BOOTFS_ROOT} ./${KERNEL1_FILENAME_CONFIG} tar xjfv ${KERNEL1_ARCHIVE_DTB} -C ${BOOTFS_ROOT} #update the kernel2 files on the sd card tar xjfv ${KERNEL2_ARCHIVE} -C ${BOOTFS_ROOT} ./${KERNEL2_FILENAME_KERNEL} tar xjfv ${KERNEL2_ARCHIVE} -C ${BOOTFS_ROOT} ./${KERNEL2_FILENAME_CONFIG} #tar xjfv ${KERNEL2_ARCHIVE_DTB} -C ${BOOTFS_ROOT} *** examine the current bootfs directory ls ${BOOTFS_ROOT} *** create the cmdline.txt file #echo "console=serial0,115200 console=tty1 root=PARTUUID=25370e36-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=JP" > ${BOOTFS_ROOT}/cmdline.txt echo "console=serial0,115200 console=tty1 root=/dev/sda2 rootfstype=btrfs rootdelay=10 fsck.repair=yes rootwait plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=JP" > ${BOOTFS_ROOT}/cmdline.txt *** copy the config.txt file in cp -a ${WORKDIR}/../config.txt ${BOOTFS_ROOT}/. *** examine the config.txt file cat ${BOOTFS_ROOT}/config.txt *** examine the current bootfs directory ls ${BOOTFS_ROOT} *** archive the bootfs tar -jcvpf ${WORKDIR}/bootfs_${DATESTAMP}.tar.bz2 --directory=${BOOTFS_ROOT} . *** prepare the rootfs kernel modules directory sudo rm -rf ${ROOTFS_MODULES} mkdir -p ${ROOTFS_MODULES} *** extract the kernel1 modules sudo tar xpjf ${KERNEL1_ARCHIVE_MODULES} -C ${ROOTFS_MODULES} *** extract the kernel2 modules sudo tar xpjf ${KERNEL2_ARCHIVE_MODULES} -C ${ROOTFS_MODULES} *** examine the directory ls -l ${ROOTFS_MODULES} *** archive the rootfs modules tar -jcvpf ${WORKDIR}/rootfs_modules_${DATESTAMP}.tar.bz2 --directory=${ROOTFS_MODULES} . *** extract the firmware-nonfree to retrieve necesary files #rm -rf ${WORKDIR}/firmware-nonfree #mkdir -p ${WORKDIR}/firmware-nonfree #tar xpjf ${WORKDIR}/firmware-nonfree_${DATESTAMP}.tar.bz2 -C ${WORKDIR}/firmware-nonfree *** prepare the rootfs nonfree firmware directory sudo rm -rf ${ROOTFS_FIRMWARE_NONFREE} mkdir -p ${ROOTFS_FIRMWARE_NONFREE} #create the directory structure mkdir -p ${ROOTFS_FIRMWARE_NONFREE}/brcm mkdir -p ${ROOTFS_FIRMWARE_NONFREE}/cypress *** archive necessary firmware-nonfree files #raspberry pi 3 cp -a ${WORKDIR}/firmware-nonfree/debian/config/brcm80211/cypress/cyfmac43430-sdio.bin ${ROOTFS_FIRMWARE_NONFREE}/cypress/. cp -a ${WORKDIR}/firmware-nonfree/debian/config/brcm80211/cypress/cyfmac43430-sdio.clm_blob ${ROOTFS_FIRMWARE_NONFREE}/cypress/. cp -a ${WORKDIR}/firmware-nonfree/debian/config/brcm80211/brcm/brcmfmac43430-sdio.txt ${ROOTFS_FIRMWARE_NONFREE}/brcm/. ##raspberry pi 3b+ and raspberry pi 4 and raspberry pi 5 cp -a ${WORKDIR}/firmware-nonfree/debian/config/brcm80211/cypress/cyfmac43455-sdio-standard.bin ${ROOTFS_FIRMWARE_NONFREE}/cypress/. cp -a ${WORKDIR}/firmware-nonfree/debian/config/brcm80211/cypress/cyfmac43455-sdio.clm_blob ${ROOTFS_FIRMWARE_NONFREE}/cypress/. cp -a ${WORKDIR}/firmware-nonfree/debian/config/brcm80211/brcm/brcmfmac43455-sdio.txt ${ROOTFS_FIRMWARE_NONFREE}/brcm/. #compute module 4 and raspberry pi 400 cp -a ${WORKDIR}/firmware-nonfree/debian/config/brcm80211/brcm/brcmfmac43456-sdio.bin ${ROOTFS_FIRMWARE_NONFREE}/brcm/. cp -a ${WORKDIR}/firmware-nonfree/debian/config/brcm80211/brcm/brcmfmac43456-sdio.clm_blob ${ROOTFS_FIRMWARE_NONFREE}/brcm/. cp -a ${WORKDIR}/firmware-nonfree/debian/config/brcm80211/brcm/brcmfmac43456-sdio.txt ${ROOTFS_FIRMWARE_NONFREE}/brcm/. #raspberry pi zero 2w cp -a ${WORKDIR}/firmware-nonfree/debian/config/brcm80211/brcm/brcmfmac43436-sdio.bin ${ROOTFS_FIRMWARE_NONFREE}/brcm/. cp -a ${WORKDIR}/firmware-nonfree/debian/config/brcm80211/brcm/brcmfmac43436-sdio.clm_blob ${ROOTFS_FIRMWARE_NONFREE}/brcm/. cp -a ${WORKDIR}/firmware-nonfree/debian/config/brcm80211/brcm/brcmfmac43436-sdio.txt ${ROOTFS_FIRMWARE_NONFREE}/brcm/. cp -a ${WORKDIR}/firmware-nonfree/debian/config/brcm80211/brcm/brcmfmac43436s-sdio.bin ${ROOTFS_FIRMWARE_NONFREE}/brcm/. cp -a ${WORKDIR}/firmware-nonfree/debian/config/brcm80211/brcm/brcmfmac43436s-sdio.txt ${ROOTFS_FIRMWARE_NONFREE}/brcm/. *** setup symbolic links cd ${ROOTFS_FIRMWARE_NONFREE}/brcm ln -s ../cypress/cyfmac43430-sdio.bin brcmfmac43430-sdio.raspberrypi,3-model-b.bin ln -s ../cypress/cyfmac43430-sdio.clm_blob brcmfmac43430-sdio.raspberrypi,3-model-b.clm_blob ln -s brcmfmac43430-sdio.txt brcmfmac43430-sdio.raspberrypi,3-model-b.txt #raspberry pi 3a+ cd ${ROOTFS_FIRMWARE_NONFREE}/brcm ln -s ../cypress/cyfmac43455-sdio-standard.bin brcmfmac43455-sdio.raspberrypi,3-model-a-plus.bin ln -s ../cypress/cyfmac43455-sdio.clm_blob brcmfmac43455-sdio.raspberrypi,3-model-a-plus.clm_blob ln -s brcmfmac43455-sdio.txt brcmfmac43455-sdio.raspberrypi,3-model-a-plus.txt #raspberry pi 3b+ cd ${ROOTFS_FIRMWARE_NONFREE}/brcm ln -s ../cypress/cyfmac43455-sdio-standard.bin brcmfmac43455-sdio.raspberrypi,3-model-b-plus.bin ln -s ../cypress/cyfmac43455-sdio.clm_blob brcmfmac43455-sdio.raspberrypi,3-model-b-plus.clm_blob ln -s brcmfmac43455-sdio.txt brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt #raspberry pi 4 cd ${ROOTFS_FIRMWARE_NONFREE}/brcm ln -s ../cypress/cyfmac43455-sdio-standard.bin brcmfmac43455-sdio.raspberrypi,4-model-b.bin ln -s ../cypress/cyfmac43455-sdio.clm_blob brcmfmac43455-sdio.raspberrypi,4-model-b.clm_blob ln -s brcmfmac43455-sdio.txt brcmfmac43455-sdio.raspberrypi,4-model-b.txt #raspberry pi 5 cd ${ROOTFS_FIRMWARE_NONFREE}/brcm ln -s ../cypress/cyfmac43455-sdio-standard.bin brcmfmac43455-sdio.raspberrypi,5-model-b.bin ln -s ../cypress/cyfmac43455-sdio.clm_blob brcmfmac43455-sdio.raspberrypi,5-model-b.clm_blob ln -s brcmfmac43455-sdio.txt brcmfmac43455-sdio.raspberrypi,5-model-b.txt #compute module 4 cd ${ROOTFS_FIRMWARE_NONFREE}/brcm ln -s brcmfmac43456-sdio.bin brcmfmac43456-sdio.raspberrypi,4-compute-module.bin ln -s brcmfmac43456-sdio.clm_blob brcmfmac43456-sdio.raspberrypi,4-compute-module.clm_blob ln -s brcmfmac43456-sdio.txt brcmfmac43456-sdio.raspberrypi,4-compute-module.txt #raspberry pi 400 cd ${ROOTFS_FIRMWARE_NONFREE}/brcm ln -s brcmfmac43456-sdio.bin brcmfmac43456-sdio.raspberrypi,400.bin ln -s brcmfmac43456-sdio.clm_blob brcmfmac43456-sdio.raspberrypi,400.clm_blob ln -s brcmfmac43456-sdio.txt brcmfmac43456-sdio.raspberrypi,400.txt #raspberry pi zero 2w cd ${ROOTFS_FIRMWARE_NONFREE}/brcm ln -s brcmfmac43436s-sdio.bin brcmfmac43430-sdio.raspberrypi,model-zero-2-w.bin ln -s brcmfmac43436s-sdio.txt brcmfmac43430-sdio.raspberrypi,model-zero-2-w.txt ln -s brcmfmac43436-sdio.bin brcmfmac43430b0-sdio.raspberrypi,model-zero-2-w.bin ln -s brcmfmac43436-sdio.clm_blob brcmfmac43430b0-sdio.raspberrypi,model-zero-2-w.clm_blob ln -s brcmfmac43436-sdio.txt brcmfmac43430b0-sdio.raspberrypi,model-zero-2-w.txt ln -s brcmfmac43436-sdio.bin brcmfmac43436-sdio.raspberrypi,model-zero-2-w.bin ln -s brcmfmac43436-sdio.clm_blob brcmfmac43436-sdio.raspberrypi,model-zero-2-w.clm_blob ln -s brcmfmac43436-sdio.txt brcmfmac43436-sdio.raspberrypi,model-zero-2-w.txt ln -s brcmfmac43436s-sdio.bin brcmfmac43436s-sdio.raspberrypi,model-zero-2-w.bin ln -s brcmfmac43436s-sdio.txt brcmfmac43436s-sdio.raspberrypi,model-zero-2-w.txt cd ${WORKDIR} *** correct the permissions sudo chown -R root:root ${ROOTFS_FIRMWARE_NONFREE}/* *** examine the directory ls -l ${ROOTFS_FIRMWARE_NONFREE}/brcm ls -l ${ROOTFS_FIRMWARE_NONFREE}/cypress *** archive the rootfs firmware tar -jcvpf ${WORKDIR}/rootfs_firmware-nonfree_${DATESTAMP}.tar.bz2 --directory=${ROOTFS_FIRMWARE_NONFREE} . *** extract the firmware-bluetooth to retrieve the necessary files #rm -rf ${WORKDIR}/bluez-firmware #mkdir -p ${WORKDIR}/bluez-firmware #tar xpjf ${WORKDIR}/bluez-firmware_${DATESTAMP}.tar.bz2 -C ${WORKDIR}/bluez-firmware *** prepare the rootfs bluez firmware directory sudo rm -rf ${ROOTFS_FIRMWARE_BLUEZ} mkdir -p ${ROOTFS_FIRMWARE_BLUEZ} #create the directory structure mkdir -p ${ROOTFS_FIRMWARE_BLUEZ}/brcm mkdir -p ${ROOTFS_FIRMWARE_BLUEZ}/synaptics *** archive necessary bluez-firmware files #raspberry pi 3 cp -a ${WORKDIR}/bluez-firmware/debian/firmware/broadcom/BCM43430A1.hcd ${ROOTFS_FIRMWARE_BLUEZ}/brcm/. #raspberry pi 3+ and raspberry pi 4 and raspberry pi 5 cp -a ${WORKDIR}/bluez-firmware/debian/firmware/broadcom/BCM4345C0.hcd ${ROOTFS_FIRMWARE_BLUEZ}/brcm/. #compute module 4 and raspberry pi 400 cp -a ${WORKDIR}/bluez-firmware/debian/firmware/broadcom/BCM4345C5.hcd ${ROOTFS_FIRMWARE_BLUEZ}/brcm/. #raspberry pi zero w2 cp -a ${WORKDIR}/bluez-firmware/debian/firmware/synaptics/LICENSE.synaptics ${ROOTFS_FIRMWARE_BLUEZ}/synaptics/. cp -a ${WORKDIR}/bluez-firmware/debian/firmware/synaptics/SYN43430A1.hcd ${ROOTFS_FIRMWARE_BLUEZ}/synaptics/. cp -a ${WORKDIR}/bluez-firmware/debian/firmware/synaptics/SYN43430B0.hcd ${ROOTFS_FIRMWARE_BLUEZ}/synaptics/. *** correct the permissions sudo chown -R root:root ${ROOTFS_FIRMWARE_BLUEZ}/* *** examine the directory ls -l ${ROOTFS_FIRMWARE_BLUEZ}/brcm ls -l ${ROOTFS_FIRMWARE_BLUEZ}/synaptics *** archive the rootfs firmware_bluez tar -jcvpf ${WORKDIR}/rootfs_firmware-bluez_${DATESTAMP}.tar.bz2 --directory=${ROOTFS_FIRMWARE_BLUEZ} . *** examine the project directory ls -l ${WORKDIR}