Re: [OpenWrt-Devel] [PATCH] ramips: HooToo HT-TM02 factory image generation.
Il 09.01.2015 16:17 Florian Fainelli ha scritto: What about a statically linked binary at least? Of course I've missed the obvious thing here. :) Thanks for the suggestion! I'm going to try this as soon as I've some spare time (in a week or so). Otherwise the code is on my github if you want to try to do it in the meantime (and you have the hardware...). Cheers, Vittorio G ___ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
Re: [OpenWrt-Devel] [PATCH] ramips: HooToo HT-TM02 factory image generation.
Le 9 janv. 2015 07:09, Vittorio G (VittGam) open...@vittgam.net a écrit : Il 09.01.2015 10:48 John Crispin ha scritto: +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 Unfortunately the factory image uses an ancient version of uclibc, so binaries compiled with the newer version bundled with OpenWrt do not work on it... Anyway I've compiled that binary using the toolchain provided by HooToo, and the build is reproducible, so you or anybody else can easily verify that I'm not lying. :) Please let me know if you have a better solution, because in fact this is not quite clean. What about a statically linked binary at least? Cheers, Vittorio ___ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel ___ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
Re: [OpenWrt-Devel] [PATCH] ramips: HooToo HT-TM02 factory image generation.
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 open...@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)) + # # 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 open...@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
Re: [OpenWrt-Devel] [PATCH] ramips: HooToo HT-TM02 factory image generation.
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 open...@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 open...@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
Re: [OpenWrt-Devel] [PATCH] ramips: HooToo HT-TM02 factory image generation.
Il 09.01.2015 10:48 John Crispin ha scritto: +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 Unfortunately the factory image uses an ancient version of uclibc, so binaries compiled with the newer version bundled with OpenWrt do not work on it... Anyway I've compiled that binary using the toolchain provided by HooToo, and the build is reproducible, so you or anybody else can easily verify that I'm not lying. :) Please let me know if you have a better solution, because in fact this is not quite clean. Cheers, Vittorio ___ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel