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

2015-01-09 Thread Vittorio G (VittGam)

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.

2015-01-09 Thread Florian Fainelli
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.

2015-01-09 Thread Vittorio G (VittGam)

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.

2015-01-09 Thread John Crispin


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.

2015-01-09 Thread Vittorio G (VittGam)

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