From c68d4d88a538f364dfd28db155fc3f2d5e6f3cac Mon Sep 17 00:00:00 2001 From: John Klug Date: Wed, 17 Nov 2021 13:37:14 -0600 Subject: umountfs for flashing MTRV1-0.4 with mLinux --- recipes-core/initscripts/initscripts-1.0/README | 77 +++++++++++++++++++++++ recipes-core/initscripts/initscripts-1.0/umountfs | 36 ++++++++--- 2 files changed, 106 insertions(+), 7 deletions(-) create mode 100644 recipes-core/initscripts/initscripts-1.0/README (limited to 'recipes-core') diff --git a/recipes-core/initscripts/initscripts-1.0/README b/recipes-core/initscripts/initscripts-1.0/README new file mode 100644 index 0000000..d2b67e1 --- /dev/null +++ b/recipes-core/initscripts/initscripts-1.0/README @@ -0,0 +1,77 @@ +# Procedure for flashing MTRV1-0.4 + +cd /var/volatile +find . -type f | xargs rm +# Now copy the upgrade image to /var/volatile +mlinux-firmware-upgrade -f upgrade-image.bin + +# +# Requirements for upgrade-image.bin + +# All partition images (at91bootstrap, u-boot, +# uImage, and rootfs.jffs2) must have md5sums. +# rootfs.jffs2 should be padded with 1's to +# the next even multiple of dd blocks. +# In this example the dd "blocksz" is set to +# 131072 (128*1024). +# +# Find the size of the jffs2: +# ls -l +# total 50040 +# -rw-r--r-- 1 jklug jklug 51232792 Nov 1 11:30 rootfs.jffs2 +# In this case it is 51232792. This is then divided by +# 131072. This is 390.87 ... so we round up to 391. +# +# This means we must pad the file to 391*131072 or +# 51249152. +# +# We can use objcopy to enlarge the file: +# +# mkdir padded +# objcopy -I binary -O binary --pad-to 51249152 --gap-fill 0xff rootfs.jffs2 padded/rootfs.jffs2 +# +# This puts the padded version of the jffs2 file in the padded directory. +# Now we must calculate the md5sum of the new padded file: +# cd padded +# cat rootfs.jffs2 | md5sum >rootfs.jffs2.md5 +# +# Now we must replace the files in the archive with the +# padded file and its md5sum. +# +# We must also add a new file. do_flash_upgrade. It must +# be created like this: +# +# echo 131072 391 >do_flash_upgrade +# +# These two parameters are used by dd to read the correct +# size of the flash. The first parameter is the block size, +# and the second parameter is the number of blocks of the +# padded file. +# +# The result tar file is not compressed: +# +# tar -cf ~/rcell-padded-5.3.6.bin bstrap* do* model mpo* root* ub* uI* +# +# and the contents of the tar file are these: +# +# tar -tvf rcell-padded-5.3.6.bin +# -rw-rw-r-- jklug/jklug 10360 2021-11-01 11:30 bstrap.bin +# -rw-rw-r-- jklug/jklug 36 2021-11-01 11:30 bstrap.bin.md5 +# -rw-rw-r-- jklug/jklug 11 2021-11-17 12:35 do_flash_upgrade +# -rw-rw-r-- jklug/jklug 6 2021-11-01 11:30 model +# -rw-rw-r-- jklug/jklug 6 2021-11-01 11:30 mpower_version +# -rw-rw-r-- jklug/jklug 51249152 2021-11-17 06:23 rootfs.jffs2 +# -rw-rw-r-- jklug/jklug 36 2021-11-17 06:36 rootfs.jffs2.md5 +# -rwxr-xr-x jklug/jklug 473720 2021-11-01 11:30 uboot.bin +# -rw-rw-r-- jklug/jklug 36 2021-11-01 11:30 uboot.bin.md5 +# -rw-r--r-- jklug/jklug 3435940 2021-11-01 11:30 uImage.bin +# -rw-rw-r-- jklug/jklug 36 2021-11-01 11:30 uImage.bin.md5 +# +# The changes are as follows: +# do_flash_upgrade -- new file +# rootfs.jffs2 -- padded with 0xff at the end of the file +# rootfs.jffs2.md5 -- new md5 sum to reflect the added padding + + + + diff --git a/recipes-core/initscripts/initscripts-1.0/umountfs b/recipes-core/initscripts/initscripts-1.0/umountfs index d3ac460..14aa441 100644 --- a/recipes-core/initscripts/initscripts-1.0/umountfs +++ b/recipes-core/initscripts/initscripts-1.0/umountfs @@ -245,7 +245,11 @@ flash_upgrade() { cd /var/volatile # rootfs should always be flashed last, so always keep it last here - local files=(${bootstrap_file} ${uboot_file} ${config_file} ${oem_file} ${kernel_file} ${rootfs_file} ${install_file}) + if ((factory_up == 0)) ; then + local files=(${bootstrap_file} ${uboot_file} ${config_file} ${oem_file} ${kernel_file} ${rootfs_file} ${install_file}) + else + local files=(${bootstrap_file} ${uboot_file} ${config_file} ${oem_file} ${kernel_file} ${rootfs_file}) + fi local devs=(${bootstrap_mtd} ${uboot_mtd} ${config_mtd} ${oem_mtd} ${kernel_mtd} ${rootfs_mtd}) if [ -f "${upgrade_file}" ]; then @@ -342,11 +346,14 @@ flash_upgrade() { sed -i -e "\\|${flash_root}| d" /etc/mtab umount_all + mount -o remount,rw /var/volatile + grep volatile /proc/mounts if [ -f "${upgrade_file}" ]; then for (( i = 0; i < ${#files[@]}; i++ )); do local file=${files[i]} local dev=${devs[i]} + echo "Processing file $file" if tar -t -f ${upgrade_file} | grep -F -q "${file}"; then if [ "${file}" == "${bootstrap_file}" ] || [ "${file}" == "${uboot_file}" ]; then file_size=$(get_file_size "${upgrade_file}" "${file}") @@ -368,13 +375,26 @@ flash_upgrade() { flash_erase ${extraopt} -j ${dev} 0 0 tar -xO -f ${upgrade_file} ${file} | ${flash_dir}/nandwrite.static ${extraopt} -p ${dev} if ((factory_up == 1)) ; then - if dd if=${dev} bs=${file_size} count=1 | md5sum -c ${file}.md5; then + if [[ ${file} == rootfs.jffs2 ]] ; then + pwd + rm -f ${upgrade_file} + echo "Block size is $rootbs, count=$rootcount" + dd if=${dev} bs=${rootbs} count=${rootcount} | md5sum -c ${file}.md5 + result=$? + else + dd if=${dev} bs=${file_size} count=1 | md5sum -c ${file}.md5 + result=$? + fi + if ((result == 0)); then echo "SUCCESS: File ${file} was written successfully" else - cat ${file}.md5 - echo ${file_size} - echo dd if=${dev} bs=${file_size} count=1 | md5sum - dd if=${dev} bs=${file_size} count=1 | md5sum + if [[ ${file} == rootfs.jffs2 ]] ; then + echo "dd if=${dev} bs=${rootbs} count=${rootcount} | md5sum" + dd if=${dev} bs=${rootbs} count=${rootcount} | md5sum + else + echo "dd if=${dev} bs=${file_size} count=1 | md5sum -c ${file}.md5" + dd if=${dev} bs=${file_size} count=1 | md5sum -c ${file}.md5 + fi echo "ERROR: File ${file} is bad" fi fi # factory upgrade @@ -441,7 +461,9 @@ if [[ -f ${wipe_fname} ]] ; then fi fi if [[ -f ${upgrade_fname} ]] ; then - if [[ $(cat ${upgrade_fname}) == "1" ]] ; then + read rootbs rootcount < ${upgrade_fname} + echo "Root Block Size is $rootbs, rootcount is $rootcount" + if [[ -n $rootbs ]] ; then factory_up=1 extraopt="-q" else -- cgit v1.2.3