[OpenWrt-Devel] [PATCH] ramips: HooToo HT-TM02 factory image generation.

John Crispin blogic at openwrt.org
Fri Jan 9 04:48:27 EST 2015



On 09/01/2015 09:16, Vittorio G (VittGam) wrote:
> Hi,
> 
> What is the reason has this been rejected? Do I need to change
> something?
> 
> Thanks, Vittorio
> 
> Il 28.12.2014 13:34 Vittorio G (VittGam) ha scritto:
>> The mkhootoofw.sh is a shell script, because official factory
>> images are shell scripts by themselves, and it made more sense to
>> me to just use a shell script on the build host to put the pieces
>> for the factory image file together, rather than reimplement the
>> wheel in C.
>> 
>> The hootoo_mtd_writer is a stripped-down and modified version of
>> mtd that includes support for flashing at an offset in the MTD.
>> This is needed for the HooToo, because the only usable partition
>> for factory flashing is the one labeled "ALL", and we don't want
>> to flash the u-boot, u-boot-env and factory partitions too...
>> 
>> The hootoo_mtd_writer binary has been compiled using the
>> toolchain contained in the GPL tarball provided by HooToo. (It
>> seems to me from some tests that this is the only way to get
>> executables running on the stock kernel...)
>> 
>> In order to update the firmware from the web interface you need
>> to put a FAT-formatted pendrive in the router USB port, since
>> the original firmware needs this as temporary storage, because
>> the RAM is quite bloated. Then you upload the OpenWrt factory
>> image generated by mkhootoofw.sh, and the script kills unneeded
>> services and partitions to free up RAM, backs up the original
>> firmware on the pendrive, extracts the hootoo_mtd_writer and the
>> sysupgrade image, flashes the sysupgrade image and then reboots.
>> 
>> I've tested the resulting image on the factory firmware, and it 
>> successfully installed OpenWrt on my HT-TM02.
>> 
>> Signed-off-by: Vittorio Gambaletta <openwrt at vittgam.net>
>> 
>> --- a/target/linux/ramips/image/Makefile +++
>> b/target/linux/ramips/image/Makefile @@ -317,6 +317,15 @@ fi 
>> endef
>> 
>> +# Build HooToo factory images +define
>> BuildFirmware/HooToo8M/squashfs +    $(call
>> BuildFirmware/Default8M/$(1),$(1),$(2),$(3)) +    [ -e "$(call
>> sysupname,$(1),$(2))" ] && \ +    $(SCRIPT_DIR)/download.pl
>> "$(DL_DIR)" "hootoo_mtd_writer" 
>> "3d72349cbb1d8e96086a084a6940304d" 
>> "https://github.com/VittGam/hootoo_mtd_writer/releases/download/1.0/"
>>
>> 
&& \
>> +    mkhootoofw.sh "$(DL_DIR)/hootoo_mtd_writer" "$(call 
>> sysupname,$(1),$(2))" "$(call imgname,$(1),$(2))-factory.bin" 
>> +endef +BuildFirmware/HooToo8M/initramfs=$(call 
>> BuildFirmware/OF/initramfs,$(1),$(2),$(3)) +


this bit is really bad. you cannot install a binary from a random
source and use that to flash the unit. the tool needs to be compiled
during the build process


>> # # RT288X Profiles # @@ -480,7 +489,7 @@ endef 
>> Image/Build/Profile/HLKRM04=$(call 
>> BuildFirmware/HLKRM04/$(1),$(1),hlk-rm04,HLKRM04,HLK-RM02)
>> 
>> -Image/Build/Profile/HT-TM02=$(call 
>> BuildFirmware/Default8M/$(1),$(1),ht-tm02,HT-TM02) 
>> +Image/Build/Profile/HT-TM02=$(call 
>> BuildFirmware/HooToo8M/$(1),$(1),ht-tm02,HT-TM02)
>> 
>> Image/Build/Profile/M3=$(call
>> BuildFirmware/Poray4M/$(1),$(1),m3,M3)
>> 
>> --- a/tools/firmware-utils/Makefile +++
>> b/tools/firmware-utils/Makefile @@ -76,6 +76,7 @@
>> 
>> define Host/Install $(INSTALL_BIN) $(HOST_BUILD_DIR)/bin/*
>> $(STAGING_DIR_HOST)/bin/ +    $(INSTALL_BIN) src/mkhootoofw.sh
>> $(STAGING_DIR_HOST)/bin/ endef
>> 
>> $(eval $(call HostBuild)) --- /dev/null +++
>> b/tools/firmware-utils/src/mkhootoofw.sh @@ -0,0 +1,88 @@ 
>> +#!/bin/sh +# +# HooToo Factory Firmware Generator for OpenWrt +#
>> Copyright (C) 2014 Vittorio Gambaletta <openwrt at vittgam.net> +# 
>> +# This is free software, licensed under the GNU General Public 
>> License v2. +# See /LICENSE for more information. +# +# Sources
>> for the hootoo_mtd_writer utility, which must be compiled with
>> the GPL +# toolchain provided by HooToo for it to work on the
>> factory kernel, can be +# found at:
>> https://github.com/VittGam/hootoo_mtd_writer +# +# Usage:
>> mkhootoofw.sh path-to-hootoo_mtd_writer 
>> path-to-openwrt-sysupgrade.bin path-to-openwrt-factory.bin +# + 
>> +# Write the shellscript stub +cat > "${3}.tmp" <<'EOF' +SKIP=57 
>> + +echo "Checking firmware checksum..." +[ "$CRCSUM" != "`sed
>> '1,3d' "$0" | cksum | sed -e 's/ /Z/' -e 's/ /Z/' | cut -dZ -f1`"
>> ] && { +    echo "Firmware checksum error!" +    exit 1 +} +echo
>> "Firmware checksum OK" + +echo "Killing unneeded services..." 
>> +killall -9 fileserv ioos upnpd led_control owndns ownhttp
>> vstddns udhcpc udhcpd udevd minidlna smbd nmbd +sleep 1 + +echo
>> "Unmounting unneeded mounts..." +umount /etc +umount /boot/tmp 
>> +umount /usr/local/samba/var +umount /opt +umount /var + +echo
>> "Backing up original firmware..." 
>> +BKPDIRBASE="/data/UsbDisk1/Volume1/OpenWrt-HooToo-Backup-`sed 
>> 's/:/-/g' < /sys/class/net/ra0/address`-" +BKPDIRNUM=1 
>> +BKPDIR="${BKPDIRBASE}${BKPDIRNUM}" +while [ -e "$BKPDIR" ]; do +
>> BKPDIRNUM=$((${BKPDIRNUM}+1)) +
>> BKPDIR="${BKPDIRBASE}${BKPDIRNUM}" +done +echo "Backup directory:
>> ${BKPDIR}" + +mkdir "$BKPDIR" +cp /dev/mtdblock* "${BKPDIR}/" ||
>> { +    echo "Backup failed!" +    exit 1 +} +sync && echo 3 >
>> /proc/sys/vm/drop_caches +echo "Backup OK" + +echo "Extracting
>> OpenWrt firmware..." +tail -n +$SKIP "$0" | tar xv -C /tmp/ || { 
>> +    echo "Extraction of firmware failed!" +    exit 1 +} +chmod
>> +x /tmp/hootoo_mtd_writer +sync && echo 3 >
>> /proc/sys/vm/drop_caches + +echo "Writing OpenWrt firmware..." 
>> +cd /tmp/ +/tmp/hootoo_mtd_writer /tmp/openwrt.bin ALL 327680 1 
>> + +echo "Upgrade not successful (reboot by hootoo_mtd_writer not 
>> happened)..." +exit 1 +END_OF_STUB +EOF + +# Create and append
>> tar archive containing hootoo_mtd_writer and sysupgrade image to
>> the factory image file +mkdir "${3}-tmpdir" +cp "$1"
>> "${3}-tmpdir/hootoo_mtd_writer" +cp "$2"
>> "${3}-tmpdir/openwrt.bin" +tar cv -C "${3}-tmpdir/"
>> hootoo_mtd_writer openwrt.bin >> "${3}.tmp" +rm -rf
>> "${3}-tmpdir" + +# Generate the final factory image file along
>> with the checksum +echo '#!/bin/sh' > "$3" +echo '# OpenWrt
>> factory installation for HooToo HT-TM02' >> "$3" +echo -n
>> 'CRCSUM=' >> "$3" +cksum < "${3}.tmp" | sed -e 's/ /Z/' -e 's/
>> /Z/' | cut -dZ -f1 >> "$3" +cat "${3}.tmp" >> "$3" +rm
>> "${3}.tmp" + +exit 0 
>> _______________________________________________ openwrt-devel
>> mailing list openwrt-devel at lists.openwrt.org 
>> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
> _______________________________________________ openwrt-devel
> mailing list openwrt-devel at lists.openwrt.org 
> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
> 
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list