This repository contains all the information needed to update the firmware of Zsun-SD100 to OpenWrt version 22.03.
These are the main features of this release when compared to other community releases:
- Firmware image based on OpenWrt 22.03
- the latest and greatest release
- Recovery image based on OpenWrt 19.07 (no more bricking!)
- the old-stable branch which introduced the new ath79 architecture
- read-only partition with so it can't be damaged
- Updated u-boot to accommodate future OpenWrt releases
- changed kernel boot offset to the start of the flash memory
- Built with reviewed and tweaked community patches
- all code has been reviewed for usefulness
- deprecated, non-functional or non-relevant code was removed
None of this would have been possible without the work of many other community members that have contributed throughout several years to have OpenWrt running smoothly on Zsun-SD100.
My patches are heavily based on the community releases from the following members:
- Emeryth : who made the very first OpenWrt port of Chaos Calmer 15.05 to Zsun-SD100 and whose patches are still heavily present on the most current OpenWrt releases
- puteulanus : for its implementation of the brilliant recovery partition concept! (this has saved me countless times! Kudos!)
These instructions and software are provided "AS IS", without support or warranty of any kind, express or implied.
I take no responsability if you damage your device - proceed at your own risk!
The update process for Zsun-SD100 can be summarized as follows:
- Identify the current firmware
- Download the required update files
- Prepare the device to be updated
- Flash the update files
- Wait for the update process to complete
- Verify recovery image
- Update to the latest versions
Login to the Zsun-SD100 and execute the following command:
md5sum /proc/mtd
Then compare its output with the following table to identify the firmware:
md5sum | Version |
---|---|
c10cba35a7eea4ddde8534dd0c9a48fa | Original Firmware |
fb97079eb3bd5feffb080e5be71574ea | Emeryth 15.05.0 Firmware |
471167cedc5bdaa9fb56d97f52f662d7 | maurer 17.01.4 Firmware |
6ac5a0c1c919bd49d56205c9abd8b51d | puteulanus 17.01.6 Firmware |
46cc21d44db073f99efe9ecd6437d25a | puteulanus 18.06.1 Firmware |
37e381cbb2c9e7660442e1525b3c3c58 | puteulanus 18.06.1_rec Firmware |
If you cannot find your version in the above table then STOP! DO NOT CONTINUE! (unless you really know what you're doing)
Download the corresponding files for your firmware version:
Version | Update Image Parts |
---|---|
Original Firmware (part1) | zsun-sd100.update.variant1.part1.bin |
Original Firmware (part2) | zsun-sd100.update.variant1.part2.bin |
Emeryth 15.05.0 Firmware (part1) | zsun-sd100.update.variant1.part1.bin |
Emeryth 15.05.0 Firmware (part2) | zsun-sd100.update.variant1.part2.bin |
maurer 17.01.4 Firmware (part1) | zsun-sd100.update.variant1.part1.bin |
maurer 17.01.4 Firmware (part2) | zsun-sd100.update.variant1.part2.bin |
puteulanus 17.01.6 Firmware (part1) | zsun-sd100.update.variant1.part1.bin |
puteulanus 17.01.6 Firmware (part2) | zsun-sd100.update.variant1.part2.bin |
puteulanus 18.06.1 Firmware (part1) | zsun-sd100.update.variant2.part1.bin |
puteulanus 18.06.1 Firmware (part2) | zsun-sd100.update.variant2.part2.bin |
puteulanus 18.06.1_rec Firmware (part1) | zsun-sd100.update.variant3.part1.bin |
puteulanus 18.06.1_rec Firmware (part2) | zsun-sd100.update.variant3.part2.bin |
Copy the update image parts to the /tmp
directory of your Zsun-SD100 using one of the many methods available (tftp, ftp, scp, nc, ...).
Then verify the integrity of your update files according to the table below:
md5sum /tmp/zsun-sd100.update.variant?.part?.bin
Update Image Parts | md5sum |
---|---|
zsun-sd100.update.variant1.part1.bin | aef8bc50aa08f58e16752716a94ea36f |
zsun-sd100.update.variant1.part2.bin | 3473e84fb47442a75a8e20b1df482fde |
zsun-sd100.update.variant2.part1.bin | 5def5e6b5e6f61fb10a784f971329b50 |
zsun-sd100.update.variant2.part2.bin | bad94959877872b2a3d75d6edd04b66f |
zsun-sd100.update.variant3.part1.bin | 046a4eec4c7b2db6e5bd2e0c2141d505 |
zsun-sd100.update.variant3.part2.bin | 75a8421899f881c1b229405b71174735 |
If your files md5sum don't match the ones you see on the table then STOP! DELETE THE FILES AND START OVER!
Remount the main filesystems as read-only to avoid data corruption:
- For the Original Firmware execute:
mount -o remount,ro /dev/root /
- For all others execute:
mount -o remount,ro /
mount -o remount,ro /overlay
Copy the mtd utility to memory so it's always available throughout this process:
- For the Original Firmware execute:
cp /sbin/mtd_write /tmp
- For all others execute:
cp /sbin/mtd /tmp
The final step before starting to flash is to change to the memory filesystem:
cd /tmp
<HERE BE DRAGONS>
YOU ARE ENTERING THE DANGER ZONE!
I TAKE NO RESPONSIBILITY IF YOU BRICK YOUR DEVICE!
PROCEED AT YOUR OWN RISK!
You are now ready to start flashing your device! To be on the safer side, you'll start by flashing the kernel (part2), and only then the rootfs (part1).
- If you're running the Original Firmware then execute:
./mtd_write write zsun-sd100.update.variant?.part2.bin /dev/mtd3
./mtd_write -r write zsun-sd100.update.variant?.part1.bin /dev/mtd2
- For all others execute:
./mtd write zsun-sd100.update.variant?.part2.bin /dev/mtd4
./mtd -r write zsun-sd100.update.variant?.part1.bin /dev/mtd2
</HERE BE DRAGONS>
If everything goes according to plan your device will go through the following steps:
- Automatic reboot after flashing the update image
- Boot to the update image
- will automatically flash the new u-boot
- will automatically flash the recovery image (overwriting the update kernel)
- will automatically reboot once done
- Boot to the main firmware
- will automatically initialize its rootfs_data (overwriting the update rootfs)
While the update image is running you'll see a WiFi SSID: Zsun is Updating! Please wait....
Once the LED on your Zsun-SD100 stops flashing you should see a new WiFi SSID: OpenWrt.
The entire process should take about 2min - be patient and wait until it finishes.
Devices like the Zsun-SD100 are very unforgiving when it comes to mistakes, making it very easy to brick the device.
This is why it is imperative to make sure your recovery image is in good conditions before starting to customize your main firmware.
During the flash of the update image parts you have overwritten all of the data of the operating system that was running at that time, and although precautions were taken to avoid data corruption there's still a small chance of this happening.
Check the integrity of the recovery image by running and comparing the output of the following command:
md5sum /dev/mtd6
MTD Partition | md5sum |
---|---|
/dev/mtd6 | b8e5722762408a2b0520a95189e3e4bc |
If your md5sum matches then your recovery image was successfully flashed and you may continue to Recovery Image if you want to test it.
If your md5sum doesn't match the one you see above then your recovery image is corrupted and you must reflash it.
Reflashing the recovery image is a very straight forward process:
- Download the mtd-rw kernel module
- Download the recovery image
- Flash the recovery image
The recovery image is stored on a read-only partition, so before flashing it you need to change the partition to read-write.
This is done by installing and loading the mtd-rw kernel module that changes all partitions to read-write.
Download the mtd-rw kernel module for your OpenWrt version:
Copy the file to the /tmp
directory of your Zsun-SD100 and then use the following command to install it:
opkg install /tmp/kmod-mtd-rw_*.ipk
Finally, load the mtd-rw kernel module to change all partitions to read-write:
insmod $(find /lib/modules/ -name mtd-rw.ko) i_want_a_brick=1
Download the recovery image:
Version | Recovery Image |
---|---|
Recovery Image 18.06.5 | zsun-sd100.recovery.bin |
Then copy it to the /tmp
directory of your Zsun-SD100 and check its md5sum:
md5sum /tmp/zsun-sd100.recovery.bin
Recovery Image | md5sum |
---|---|
zsun-sd100.recovery.bin | b8e5722762408a2b0520a95189e3e4bc |
If your md5sum doesn't match the one you see on the table then delete the file and download it again!
You are now ready to reflash your recovery image!
Execute the command:
mtd write /tmp/zsun-sd100.recovery.bin recovery
Once it finishes go back to the Check recovery image integrity section to verify its integrity once again.
The update image includes OpenWrt 19.07.0-rc1 as the main firmware and OpenWrt 18.06.5 as the recovery firmware, both of which are already outdated.
You may upgrade to the latest versions found on Releases as long as you follow the release instructions to upgrade without preserving any settings!
You now have a recovery image that you may boot if you ever get locked out of your main firmware.
The recovery image is stored on a read-only partition so it cannot be (easily/accidently) damaged.
To boot the recovery image:
- Disconnect your device from USB
- Eject the SD card but do not remove it (you'll need to push it back in during the initial boot process)
- Connect your Zsun to the USB
- When the LED flashes for the first time, immediately insert the SD Card1 to boot into the recovery image
If you successfully triggered the recovery image then after a few seconds you'll see WiFi SSID: Zsun Recovery
1You don't need to insert it completely, just pushing it in - without locking it in place - for about one to two seconds should be enough.
A very useful feature of the recovery image is that allows you to mount your main firmware so you may fix any configuraton issues.
This is done using the mount-firmware
script included on the recovery image.
To mount your main firmware execute:
# For Recovery Image 18.06.5:
mount_firmware
# For Recovery Image 19.07.8:
mount-firmware
To unmount your main firmware execute:
# For Recovery Image 18.06.5:
umount_firmware
# For Recovery Image 19.07.8:
umount-firmware
To reset the main firmware (delete all changes done to it) execute:
# For Recovery Image 19.07.8:
reset-firmware
All mtd partitions - except firmware - are marked as read-only to avoid accidental damage.
However, it is possible to unlock them if needed by executing the following command while on the recovery image:
# For Recovery Image 18.06.5:
insmod $(find /lib/modules/ -name mtd-rw.ko) i_want_a_brick=1
# For Recovery Image 19.07.8:
mtd-rw unlock
All partitions will be locked again on the next reboot.
The new recovery image 19.07.8 is capable of persisting changes.
To save all changes done to the recovery:
recovery-config save
To reset all saved changes:
recovery-config reset
Please be aware the amount of space available for storing changes is very limited!
Below you'll find instructions on how to build each of the images you find on this repository.
All binary images available on this repository have been compiled using a clean installation of Ubuntu Server:
- Ubuntu Server 16.04: used for all the older images up to version 21.02.5
- Ubuntu Server 18.04: used for image versions between 22.03.0-rc1 and 22.03.7
- Ubuntu Server 20.04: used for all images from version 23.05.0-rc1 onwards
Prepare your build environment using the instructions below:
- Download and install Ubuntu Server on a VM:
- Ubuntu Server 16.04: Network Installer
- Ubuntu Server 18.04: Network Installer
- Ubuntu Server 20.04: Network Installer
- Once done, install the required build dependencies:
sudo apt install build-essential pkg-config python python3-distutils libncurses5-dev libssl-dev zlib1g-dev
sudo apt install gawk gettext unzip subversion git
- Clone this repository so you have all patches available on your environment:
git clone https://github.com/brunompena/zsun-resources.git
Follow the below instructions for each image type.
git clone https://github.com/pepe2k/u-boot_mod.git zsun-sd100.u-boot
cd zsun-sd100.u-boot
git checkout 7a540a7
patch -p1 < ../zsun-resources/zsun-sd100.u-boot.u-boot_mod[7a540a7].patch
wget http://downloads.openwrt.org/releases/18.06.5/targets/ar71xx/generic/openwrt-sdk-18.06.5-ar71xx-generic_gcc-7.3.0_musl.Linux-x86_64.tar.xz
tar xJvf openwrt-sdk-18.06.5-ar71xx-generic_gcc-7.3.0_musl.Linux-x86_64.tar.xz
make zsun_sd100 PATH=${PATH}:$(pwd)/openwrt-sdk-18.06.5-ar71xx-generic_gcc-7.3.0_musl.Linux-x86_64/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/bin/
git clone https://github.com/openwrt/openwrt.git zsun-sd100.firmware
cd zsun-sd100.firmware
git checkout v19.07.0-rc1
patch -p1 < ../zsun-resources/zsun-sd100.firmware.ath79[v19.07.0-rc1].patch
chmod +x target/linux/ath79/base-files/etc/rc.button/BTN_0
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
cp ../zsun-resources/zsun-sd100.firmware.ath79[v19.07.0-rc1].config .config
make -j$(nproc)
git clone https://github.com/openwrt/openwrt.git zsun-sd100.recovery
cd zsun-sd100.recovery
git checkout v18.06.5
patch -p1 < ../zsun-resources/zsun-sd100.recovery.ar71xx[v18.06.5].patch
chmod +x target/linux/ar71xx/base-files/etc/rc.button/BTN_0
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
cp ../zsun-resources/zsun-sd100.recovery.ar71xx[v18.06.5].config .config
make -j$(nproc)
git clone https://github.com/openwrt/archive.git zsun-sd100.update
cd zsun-sd100.update
git checkout v15.05.1
patch -p1 < ../zsun-resources/zsun-sd100.update.ar71xx[v15.05.1].patch
chmod +x target/linux/ar71xx/base-files/etc/rc.button/BTN_0
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
cp ../zsun-resources/zsun-sd100.update.ar71xx[v15.05.1].config .config
make -j$(nproc)
On this repository you can also find patches to add support for Zsun-SD100 to the official OpenWrt Image Builder.
To use these patches, start by customizing the below environment variables:
IMAGEBUILDER_VERSION="19.07.0" # OpenWrt version to build
IMAGEBUILDER_PACKAGES="" # List of packages to add/remove (see official documentation for details)
Then execute the following commands to build your image:
IMAGEBUILDER_PATCH="$(pwd)/zsun-resources/zsun-sd100.imagebuilder.ath79[v${IMAGEBUILDER_VERSION}].patch"
IMAGEBUILDER_NAME="openwrt-imagebuilder-${IMAGEBUILDER_VERSION}-ath79-generic.Linux-x86_64"
IMAGEBUILDER_URL="https://downloads.openwrt.org/releases/${IMAGEBUILDER_VERSION}/targets/ath79/generic/${IMAGEBUILDER_NAME}.tar.xz"
IMAGEBUILDER_IMAGE="$(pwd)/${IMAGEBUILDER_NAME}/bin/targets/ath79/generic/openwrt-${IMAGEBUILDER_VERSION}-ath79-generic-zsun_sd100-squashfs-sysupgrade.bin"
wget -qO- "${IMAGEBUILDER_URL}" | tar xJvf -
cd "${IMAGEBUILDER_NAME}"
patch -p1 < "${IMAGEBUILDER_PATCH}"
find files/ -type f -exec chmod 0755 {} \;
make image PROFILE="zsun_sd100" FILES="files/" PACKAGES="${IMAGEBUILDER_PACKAGES}" && \
echo -e "\n\nOpenWrt image was built successfully and can be found at:\n ${IMAGEBUILDER_IMAGE}\n\n"
Once your customized image is built, you can then use any of the standard methods to flash it.