diff --git a/releasetools/arm_sdimage_omap.sh b/releasetools/arm_sdimage_omap.sh index 79f974e7c..64983d7ea 100755 --- a/releasetools/arm_sdimage_omap.sh +++ b/releasetools/arm_sdimage_omap.sh @@ -64,32 +64,8 @@ then exit 1 fi -case $(uname -s) in -Darwin) - MKFS_VFAT_CMD=newfs_msdos - MKFS_VFAT_OPTS="-h 64 -u 32 -S 512 -s ${FAT_SIZE} -o 0" -;; -FreeBSD) - MKFS_VFAT_CMD=newfs_msdos - MKFS_VFAT_OPTS= -;; -*) - MKFS_VFAT_CMD=mkfs.vfat - MKFS_VFAT_OPTS= -;; -esac - export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:${PATH} -for needed in mcopy dd ${MKFS_VFAT_CMD} git -do - if ! which $needed 2>&1 > /dev/null - then - echo "**Skipping image creation: missing tool '$needed'" - exit 1 - fi -done - # we create a disk image of about 2 gig's # for alignment reasons, prefer sizes which are multiples of 4096 bytes : ${IMG_SIZE=$(( 2*(2**30) ))} @@ -130,67 +106,9 @@ echo "Creating specification files..." create_input_spec create_protos "usr home" -# -# Create the FAT partition, which contains the bootloader files, kernel and modules -# -dd if=/dev/zero of=${WORK_DIR}/fat.img bs=512 count=1 seek=$(($FAT_SIZE -1)) 2>/dev/null - -# -# Format the fat partition and put the bootloaders -# uEnv and the kernel command line in the FAT partition -# -${MKFS_VFAT_CMD} ${MKFS_VFAT_OPTS} ${WORK_DIR}/fat.img - -# # Download the stage 1 bootloader and u-boot # ${RELEASETOOLSDIR}/checkout_repo.sh -o ${RELEASETOOLSDIR}/u-boot -b ${U_BOOT_BRANCH} -n ${U_BOOT_REVISION} ${U_BOOT_URL} -cp ${RELEASETOOLSDIR}/u-boot/${U_BOOT_BIN_DIR}/MLO ${WORK_DIR}/ -cp ${RELEASETOOLSDIR}/u-boot/${U_BOOT_BIN_DIR}/u-boot.img ${WORK_DIR}/ - -# -# Create a uEnv.txt file -# -n default to network boot -# -p add a prefix to the network booted files (e.g. xm/" -# -c set console e.g. tty02 or tty00 -# -v set verbosity e.g. 0 to 3 -#${RELEASETOOLSDIR}/gen_uEnv.txt.sh -c ${CONSOLE} -n -p bb/ > ${WORK_DIR}/uEnv.txt -${RELEASETOOLSDIR}/gen_uEnv.txt.sh -c ${CONSOLE} > ${WORK_DIR}/uEnv.txt - -echo "Copying configuration kernel and boot modules" -mcopy -bsp -i ${WORK_DIR}/fat.img ${WORK_DIR}/$MLO ::MLO -mcopy -bsp -i ${WORK_DIR}/fat.img ${WORK_DIR}/$UBOOT ::u-boot.img -mcopy -bsp -i ${WORK_DIR}/fat.img ${WORK_DIR}/uEnv.txt ::uEnv.txt - -# -# Do some last processing of the kernel and servers and then put them on the FAT -# partition. -# -${CROSS_PREFIX}objcopy ${OBJ}/minix/kernel/kernel -O binary ${OBJ}/kernel.bin -mcopy -bsp -i ${WORK_DIR}/fat.img ${OBJ}/kernel.bin ::kernel.bin - -for f in servers/vm/vm servers/rs/rs servers/pm/pm servers/sched/sched \ - servers/vfs/vfs servers/ds/ds servers/mib/mib fs/pfs/pfs fs/mfs/mfs \ - ../sbin/init/init -do - fn=`basename $f`.elf - cp ${OBJ}/minix/${f} ${OBJ}/${fn} - ${CROSS_PREFIX}strip -s ${OBJ}/${fn} - mcopy -bsp -i ${WORK_DIR}/fat.img ${OBJ}/${fn} ::${fn} -done - -for f in tty/tty/tty storage/memory/memory -do - fn=`basename $f`.elf - cp ${OBJ}/minix/drivers/${f} ${OBJ}/${fn} - ${CROSS_PREFIX}strip -s ${OBJ}/${fn} - mcopy -bsp -i ${WORK_DIR}/fat.img ${OBJ}/${fn} ::${fn} -done - -# -# For tftp booting -# -cp ${WORK_DIR}/uEnv.txt ${OBJ}/ # Clean image if [ -f ${IMG} ] # IMG might be a block device @@ -222,12 +140,63 @@ HOME_START=$((${USR_START} + ${_USR_SIZE})) echo " * HOME" _HOME_SIZE=$(${CROSS_TOOLS}/nbmkfs.mfs -d ${HOMESIZEARG} -I $((${HOME_START}*512)) ${IMG} ${WORK_DIR}/proto.home) _HOME_SIZE=$(($_HOME_SIZE / 512)) +echo " * BOOT" +rm -rf ${ROOT_DIR}/* +cp ${RELEASETOOLSDIR}/u-boot/${U_BOOT_BIN_DIR}/MLO ${ROOT_DIR}/ +cp ${RELEASETOOLSDIR}/u-boot/${U_BOOT_BIN_DIR}/u-boot.img ${ROOT_DIR}/ + +# Create a uEnv.txt file +# -n default to network boot +# -p add a prefix to the network booted files (e.g. xm/" +# -c set console e.g. tty02 or tty00 +# -v set verbosity e.g. 0 to 3 +#${RELEASETOOLSDIR}/gen_uEnv.txt.sh -c ${CONSOLE} -n -p bb/ > ${WORK_DIR}/uEnv.txt +${RELEASETOOLSDIR}/gen_uEnv.txt.sh -c ${CONSOLE} > ${ROOT_DIR}/uEnv.txt + +# Do some last processing of the kernel and servers and then put them on the FAT +# partition. +${CROSS_PREFIX}objcopy ${OBJ}/minix/kernel/kernel -O binary ${ROOT_DIR}/kernel.bin + +for f in servers/vm/vm servers/rs/rs servers/pm/pm servers/sched/sched \ + servers/vfs/vfs servers/ds/ds servers/mib/mib fs/pfs/pfs fs/mfs/mfs \ + ../sbin/init/init drivers/tty/tty/tty drivers/storage/memory/memory +do + fn=`basename $f`.elf + cp ${OBJ}/minix/${f} ${ROOT_DIR}/${fn} + ${CROSS_PREFIX}strip -s ${ROOT_DIR}/${fn} +done +cat >${WORK_DIR}/boot.mtree <${ROOT_DIR}/etc/fstab </dev/null + +# +# Create the empty image where we later will put the partitions in. +# Make sure it is at least 2GB, otherwise the SD card will not be detected +# correctly in qemu / HW. +# +dd if=/dev/zero of=${IMG} bs=512 count=1 seek=$((($IMG_SIZE / 512) -1)) # # Generate /root, /usr and /home partition images. # echo "Writing disk image..." - -# -# Write FAT bootloader partition -# +FAT_START=$((4096 / 512)) # those are sectors +ROOT_START=$(($FAT_START + $FAT_SIZE)) +echo " * ROOT" +_ROOT_SIZE=$(${CROSS_TOOLS}/nbmkfs.mfs -d ${ROOTSIZEARG} -I $((${ROOT_START}*512)) ${IMG} ${WORK_DIR}/proto.root) +_ROOT_SIZE=$(($_ROOT_SIZE / 512)) +USR_START=$((${ROOT_START} + ${_ROOT_SIZE})) +echo " * USR" +_USR_SIZE=$(${CROSS_TOOLS}/nbmkfs.mfs -d ${USRSIZEARG} -I $((${USR_START}*512)) ${IMG} ${WORK_DIR}/proto.usr) +_USR_SIZE=$(($_USR_SIZE / 512)) +HOME_START=$((${USR_START} + ${_USR_SIZE})) +echo " * HOME" +_HOME_SIZE=$(${CROSS_TOOLS}/nbmkfs.mfs -d ${HOMESIZEARG} -I $((${HOME_START}*512)) ${IMG} ${WORK_DIR}/proto.home) +_HOME_SIZE=$(($_HOME_SIZE / 512)) echo " * BOOT" rm -rf ${ROOT_DIR}/* -# copy over all modules -for i in ${MODDIR}/* -do - cp $i ${ROOT_DIR}/$(basename $i).elf -done -${CROSS_PREFIX}objcopy ${OBJ}/minix/kernel/kernel -O binary ${ROOT_DIR}/kernel.bin -# create packer -${CROSS_PREFIX}as ${RELEASETOOLSDIR}/rpi-bootloader/bootloader.S -o ${RELEASETOOLSDIR}/rpi-bootloader/bootloader.o -${CROSS_PREFIX}ld ${RELEASETOOLSDIR}/rpi-bootloader/bootloader.o -o ${RELEASETOOLSDIR}/rpi-bootloader/bootloader.elf -Ttext=0x8000 2> /dev/null -${CROSS_PREFIX}objcopy -O binary ${RELEASETOOLSDIR}/rpi-bootloader/bootloader.elf ${ROOT_DIR}/minix_rpi.bin # copy device trees -cp ${RELEASETOOLSDIR}/rpi-firmware/bcm*.dtb ${ROOT_DIR} -# pack modules -(cd ${ROOT_DIR} && cat <> ${ROOT_DIR}/minix_rpi.bin 2>/dev/null -kernel.bin -mod01_ds.elf -mod02_rs.elf -mod03_pm.elf -mod04_sched.elf -mod05_vfs.elf -mod06_memory.elf -mod07_tty.elf -mod08_mib.elf -mod09_vm.elf -mod10_pfs.elf -mod11_mfs.elf -mod12_init.elf -EOF -) cp -r releasetools/rpi-firmware/* ${ROOT_DIR} # Write GPU config file @@ -125,16 +137,82 @@ kernel=minix_rpi.bin dtparam=i2c_arm=on EOF -${CROSS_TOOLS}/nbmakefs -t msdos -s $FAT_SIZE -O $FAT_START -o "F=32,c=1" ${IMG} ${ROOT_DIR} >/dev/null +# +# Do some last processing of the kernel and servers and then put them on the FAT +# partition. +# + +# copy over all modules +for i in ${MODDIR}/* +do + cp $i ${WORK_DIR}/$(basename $i).elf +done +${CROSS_PREFIX}objcopy ${OBJ}/minix/kernel/kernel -O binary ${WORK_DIR}/kernel.bin + +( + # create packer + export CROSS_PREFIX=$PWD/${CROSS_PREFIX} + ${CROSS_PREFIX}as ${RELEASETOOLSDIR}/rpi-bootloader/bootloader.S -o ${WORK_DIR}/bootloader.o + + cd ${WORK_DIR} + ${CROSS_PREFIX}ld bootloader.o -o bootloader.elf -Ttext=0x8000 + ${CROSS_PREFIX}objcopy -O binary bootloader.elf ${ROOT_DIR}/minix_rpi.bin + + # pack modules + cpio -o --format=newc >> ${ROOT_DIR}/minix_rpi.bin <${WORK_DIR}/boot.mtree <