# OpenIPC Wiki [Table of Content](../README.md) Introduction ------------ This page describes OpenWRT-based firmware variant. ### Firmware features * RTSP, ONVIF, NETIP * Native ipeye service support * Support squashfs, jffs2, overlayfs, vfat * Vlan and bridges support * Standard OPKG package system * Tiny SNMP daemon * Curl with SSL for upload/download files * Run arbitrary command from u-boot ENV (linux_cmd=) * Simple L2/L3 VPN with traffic shaping and compression (vtun) * Simply sender Telegram bot (estgb) * Low cost 3G/4G USB modems support in hilink mode * µVPN tunnel service * and more ... ### Supported devices We aim to develop **universal**, portable firmware supporting wide range of manufacturers and delivering updates and fixes which vendors oftentimes unable to deliver. The list is constantly updated, please visit often and/or follow our Telegram groups for new release notifications. More information about sensors: [https://cctvsp.ru][8] (translated from Russian with Google Translate). ### Web interface * - Standard system interface based on OpenWrt Luci ### Majestic streamer Majestic is a video streaming application, the heart of our firmware (in relation to camera/video surveillance functionality). It's configurable via file `/etc/majestic.yaml` and by default has many features/services enabled. Unneeded options can be turned off for better security and performance. To run `majestic` in debug mode: ```bash killall -sigint majestic; export SENSOR=$(ipctool --sensor_id); majestic ``` To run `majestic` in production mode restart the camera or run command: ```bash killall -sigint majestic; export SENSOR=$(ipctool --sensor_id); majestic 2>&1 | logger -p daemon.info -t majestic & ``` ### Camera related URLs in firmware Information on streamer URLs and their description can be found in the [Wiki][9]. ### Statistical data Software might do product usage data collection including SoC and sensor model name to gather statistics used in QA process. We guaranty that the data is fully anonymized, and does not contain anything that can arguably be considered data about an individual, that could be considered end-user data; or that could be sensitive or confidential to users. Getting firmware ---------------- ### Downloads (latest dev) | Building status | SoC | U-Boot | Kernel | Rootfs | |----------------------------|-------------|-------------|---------------|---------------| | ![Hi3516Cv100 images][b1] | Hi3516CV100 | [uboot][u1] | [kernel][k1] | [rootfs][r1] | | ![Hi3516Cv200 images][b2] | Hi3516CV200 | [uboot][u2] | [kernel][k2] | [rootfs][r2] | | ![Hi3516Cv300 images][b3] | Hi3516CV300 | [uboot][u3] | [kernel][k3] | [rootfs][r3] | | ![Hi3516Ev100 images][b4] | Hi3516EV100 | [uboot][u4] | [kernel][k4] | [rootfs][r4] | | ![Hi3518Av100 images][b5] | Hi3518AV100 | [uboot][u5] | [kernel][k5] | [rootfs][r5] | | ![Hi3518Cv100 images][b6] | Hi3518CV100 | [uboot][u6] | [kernel][k6] | [rootfs][r6] | | ![Hi3518Ev100 images][b7] | Hi3518EV100 | [uboot][u7] | [kernel][k7] | [rootfs][r7] | | ![Hi3518Ev200 images][b8] | Hi3518EV200 | [uboot][u8] | [kernel][k8] | [rootfs][r8] | | ![Hi3518Ev201 images][b9] | Hi3518EV201 | [uboot][u9] | [kernel][k9] | [rootfs][r9] | | ![Hi3520Dv100 images][b10] | Hi3520DV100 | ! | [kernel][k10] | [rootfs][r10] | | ![Hi3520Dv200 images][b11] | Hi3520DV200 | ! | [kernel][k11] | [rootfs][r11] | ### Releases The **releases** of the OpenIPC firmware are hosted at . ### Source code The **source code** of the OpenIPC firmware is hosted at . Building from source -------------------- ### Build on Linux machine Usage example for Debian 8/9 ```bash git clone --depth=1 https://github.com/OpenIPC/chaos_calmer.git OpenIPC cd OpenIPC ./Project_OpenIPC.sh update ./Project_OpenIPC.sh 16cv300_DEFAULT ``` ### Use Docker for building > **Default Dockerfile.openipc** ```docker FROM debian:stretch RUN DEBIAN_FRONTEND=noninteractive apt-get update \ && apt-get --no-install-recommends -y install bc bison build-essential \ ca-certificates cmake cpio curl dos2unix file flex gawk gcc-multilib \ gettext gettext-base git intltool libc6-dev liblocale-gettext-perl \ libncurses-dev libssl-dev locales mc openssl python rsync subversion \ time tofrodos unzip upx wget zlib1g-dev \ && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias \ en_US.UTF-8 && rm -rf /var/lib/apt/lists/* ENV LANG en_US.utf8 WORKDIR /src/openipc RUN git clone --depth=1 https://github.com/OpenIPC/chaos_calmer.git /src/openipc RUN ./Project_OpenIPC.sh update RUN ./Project_OpenIPC.sh 18ev200_DEFAULT # <= Change this ID to you profile ``` > **Start building** ```bash #!/bin/bash docker build -t openipc -f Dockerfile.openipc . ``` Preparing to install -------------------- ### Get access to U-boot Serial (UART) connection to your camera device is required. * CamHi | Press **Ctrl+C** in U-boot start and access password - HI2105CHIP * Dahua | Press **Shift 8** in U-boot start * JVT | Press **Ctrl+Q** in U-boot start * XM | Press **Ctrl+C** in U-boot start * SigmaStar | Press **Ctrl+B** (UNIV) or **Enter** (Anjvision) in U-boot start ### Backup original MAC You should definitely write the original MAC of your device on the eth0 port. This is **important** and will be necessary at the final stage of device configuration. ### Backup original firmware #### 8M Flash ```txt setenv ipaddr 192.168.1.10 setenv serverip 192.168.1.254 sf probe 0 mw.b 0x82000000 ff 1000000 sf read 0x82000000 0x0 0x800000 tftp 0x82000000 fullflash.img 0x800000 ``` #### 16M Flash ```txt setenv ipaddr 192.168.1.10 setenv serverip 192.168.1.254 sf probe 0 mw.b 0x82000000 ff 1000000 sf read 0x82000000 0x0 0x1000000 tftp 0x82000000 fullflash.img 0x1000000 ``` #### 32M Flash ```txt setenv ipaddr 192.168.1.10 setenv serverip 192.168.1.254 sf probe 0 mw.b 0x82000000 ff 2000000 sf read 0x82000000 0x0 0x2000000 tftp 0x82000000 fullflash.img 0x2000000 ``` ### Flash and memory layout We have developed a universal partition system for camera flash chips, and it is now available as standard for all types of devices. (Note that it means it likely doesn't match vendor flash layout.) #### OpenIPC flash layout ```txt 0x000000000000-0x000000040000 : "boot" 0x000000040000-0x000000050000 : "env" 0x000000050000-0x000000250000 : "kernel" 0x000000250000-0x000000750000 : "rootfs" 0x000000750000-0x000001000000 : "rootfs_data" ``` #### Kernel Memory Load Addresses ```txt loadaddr-$(CONFIG_TARGET_hi35xx_16cv100) := 0x80008000 loadaddr-$(CONFIG_TARGET_hi35xx_16cv200) := 0x80008000 loadaddr-$(CONFIG_TARGET_hi35xx_16cv300) := 0x80008000 loadaddr-$(CONFIG_TARGET_hi35xx_16dv100) := 0x80008000 loadaddr-$(CONFIG_TARGET_hi35xx_16ev100) := 0x80008000 loadaddr-$(CONFIG_TARGET_hi35xx_16ev200) := 0x40008000 loadaddr-$(CONFIG_TARGET_hi35xx_16ev300) := 0x40008000 loadaddr-$(CONFIG_TARGET_hi35xx_18cv100) := 0x80008000 loadaddr-$(CONFIG_TARGET_hi35xx_18ev100) := 0x80008000 loadaddr-$(CONFIG_TARGET_hi35xx_18ev200) := 0x80008000 loadaddr-$(CONFIG_TARGET_hi35xx_18ev201) := 0x80008000 loadaddr-$(CONFIG_TARGET_hi35xx_18ev300) := 0x40008000 loadaddr-$(CONFIG_TARGET_hi35xx_20dv100) := 0x80008000 loadaddr-$(CONFIG_TARGET_hi35xx_20dv200) := 0x80008000 ``` Flashing new firmware --------------------- **Attention!** All examples indicate the download of firmware components via the TFTP server. If your device does not have an Ethernet port, replace all `tftp` commands with `fatload mmc 0:1`. For example: ```txt tftp 0x82000000 openwrt-hi35xx-XXXXX-u-boot.bin # fatload mmc 0:1 0x82000000 openwrt-hi35xx-XXXXX-u-boot.bin ``` ### Hi3516Cv100 **This type of board has additional Ethernet control systems via GPIO and registers. Consult with experts!** **Experimental devices:** * 00:12:16:FA:F3:52 * 00:12:12:10:31:54 - BLK18C_0222_38x38_S_v1.03 ```txt setenv ipaddr 192.168.1.10 setenv serverip 192.168.1.254 sf probe 0; sf lock 0 mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-16cv100-u-boot.bin sf erase 0x0 0x50000 sf write 0x82000000 0x0 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-16cv100-default-uImage sf erase 0x50000 0x200000 sf write 0x82000000 0x50000 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-16cv100-default-root.squashfs sf erase 0x250000 0x500000 sf write 0x82000000 0x250000 ${filesize} ``` ### Hi3516Cv200 ```txt setenv ipaddr 192.168.1.10 setenv serverip 192.168.1.254 sf probe 0; sf lock 0 mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-16cv200-u-boot.bin sf erase 0x0 0x50000 sf write 0x82000000 0x0 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-16cv200-default-uImage sf erase 0x50000 0x200000 sf write 0x82000000 0x50000 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-16cv200-default-root.squashfs sf erase 0x250000 0x500000 sf write 0x82000000 0x250000 ${filesize} ``` ### Hi3516Cv300 ```txt setenv ipaddr 192.168.1.10 setenv serverip 192.168.1.254 sf probe 0; sf lock 0 mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-16cv300-u-boot.bin sf erase 0x0 0x50000 sf write 0x82000000 0x0 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-16cv300-default-uImage sf erase 0x50000 0x200000 sf write 0x82000000 0x50000 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-16cv300-default-root.squashfs sf erase 0x250000 0x500000 sf write 0x82000000 0x250000 ${filesize} ``` ### Hi3516Ev100 **Experimental devices:** * 00:12:13:02:d7:2c ```txt setenv ipaddr 192.168.1.10 setenv serverip 192.168.1.254 sf probe 0; sf lock 0 mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-16ev100-u-boot.bin sf erase 0x0 0x50000 sf write 0x82000000 0x0 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-16cv300-default-uImage sf erase 0x50000 0x200000 sf write 0x82000000 0x50000 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-16cv300-default-root.squashfs sf erase 0x250000 0x500000 sf write 0x82000000 0x250000 ${filesize} ``` ### Hi3518Cv100 **This type of board has additional Ethernet control systems via GPIO and registers. Consult with experts!** ```txt setenv ipaddr 192.168.1.10 setenv serverip 192.168.1.254 sf probe 0; sf lock 0 mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-18cv100-u-boot.bin sf erase 0x0 0x50000 sf write 0x82000000 0x0 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-16cv100-default-uImage sf erase 0x50000 0x200000 sf write 0x82000000 0x50000 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-16cv100-default-root.squashfs sf erase 0x250000 0x500000 sf write 0x82000000 0x250000 ${filesize} ``` ### Hi3518Ev100 **This type of board has additional Ethernet control systems via GPIO and registers. Consult with experts!** ```txt setenv ipaddr 192.168.1.10 setenv serverip 192.168.1.254 sf probe 0; sf lock 0 mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-18ev100-u-boot.bin sf erase 0x0 0x50000 sf write 0x82000000 0x0 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-18ev100-default-uImage sf erase 0x50000 0x200000 sf write 0x82000000 0x50000 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-18ev100-default-root.squashfs sf erase 0x250000 0x500000 sf write 0x82000000 0x250000 ${filesize} ``` ### Hi3518Ev200 ```txt setenv ipaddr 192.168.1.10 setenv serverip 192.168.1.254 sf probe 0; sf lock 0 mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-18ev200-u-boot.bin sf erase 0x0 0x50000 sf write 0x82000000 0x0 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-18ev200-default-uImage sf erase 0x50000 0x200000 sf write 0x82000000 0x50000 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-18ev200-default-root.squashfs sf erase 0x250000 0x500000 sf write 0x82000000 0x250000 ${filesize} ``` ### Hi3520Dv100 ```txt setenv ipaddr 192.168.1.10 setenv serverip 192.168.1.254 sf probe 0; sf lock 0 mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-20dv100-experimental-u-boot.bin sf erase 0x0 0x50000 sf write 0x82000000 0x0 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-20dv100-default-uImage sf erase 0x50000 0x200000 sf write 0x82000000 0x50000 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-20dv100-default-root.squashfs sf erase 0x250000 0x500000 sf write 0x82000000 0x250000 ${filesize} ``` ### Hi3520Dv200 ```txt setenv ipaddr 192.168.1.10 setenv serverip 192.168.1.254 sf probe 0; sf lock 0 mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-20dv200-experimental-u-boot.bin sf erase 0x0 0x50000 sf write 0x82000000 0x0 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-20dv200-default-uImage sf erase 0x50000 0x200000 sf write 0x82000000 0x50000 ${filesize} mw.b 0x82000000 ff 1000000 tftp 0x82000000 openwrt-hi35xx-20dv200-default-root.squashfs sf erase 0x250000 0x500000 sf write 0x82000000 0x250000 ${filesize} ``` Updating parts of the firmware ------------------------------ If you already have OpenIPC firmware installed, you can update individual flash partitions from shell command line: ### Update u-boot ```bash flashcp -v openwrt-hi35xx-XXXXX-u-boot.bin boot ``` > **or** ```bash flashcp -v openwrt-hi35xx-XXXXX-u-boot.bin /dev/mtd0 ``` ### Update kernel ```bash flashcp -v openwrt-hi35xx-XXXXX-default-uImage kernel ``` ### Update rootfs ```bash flashcp -v openwrt-hi35xx-XXXXX-default-root.squashfs rootfs ``` Configuring system after installation -------------------------------------- ### Format overlayfs partition **Must be executed on the first run!** ```txt flash_eraseall -j /dev/$(awk -F ':' '/rootfs_data/ {print $1}' /proc/mtd) reboot ``` ### Installing the original MAC > **U-boot ENV and Linux UCI** ```txt fw_setenv ethaddr 00:01:02:03:04:05 uci set network.lan.macaddr=00:01:02:03:04:05 uci commit ``` ### Installing the correct sensor > **Specify your correct sensor, control type, and data bus** ```txt fw_setenv sensor imx291_i2c_lvds ``` Resetting configuration ----------------------- If something went wrong, you can reset configuration to defaults. ### Clean overlayfs (reset) > **Restore to default Linux settings** ```txt firstboot reboot ``` ### Clean u-boot env > **Restore to default u-boot env** ```txt flash_eraseall -j /dev/$(awk -F ':' '/env/ {print $1}' /proc/mtd) reboot ``` ### Recover backup firmware If something goes horribly wrong, and you want your backed up firmware back > **Restore backup up firmware via serial** Install kermit using [this instruction](https://glasstty.com/?p=662) or similar. Here are the sample commands for 8MB Flash. ``` kermit Linux Kermit> CONNECT Connecting to /dev/ttyUSB0, speed 115200 Escape character: Ctrl-\ (ASCII 28, FS): enabled Type the escape character followed by C to get back, or followed by ? to see other options. ---------------------------------------------------- ## Total Size = 0x002fb3f1 = 3126257 Bytes ## Start Addr = 0x82000000 OpenIPC # sf probe 0 8192 KiB hi_sfc at 0:0 is now current device OpenIPC # mw.b 0x82000000 ff 1000000 OpenIPC # loadb 0x82000000 ## Ready for binary (kermit) download to 0x82000000 at 115200 bps... (Back at alex-B85M-D3H) ---------------------------------------------------- Linux Kermit> SEND /srv/tftp/fullflash.img Linux Kermit> CONNECT Connecting to /dev/ttyUSB0, speed 115200 Escape character: Ctrl-\ (ASCII 28, FS): enabled Type the escape character followed by C to get back, or followed by ? to see other options. ---------------------------------------------------- ## Total Size = 0x00800000 = 8388608 Bytes ## Start Addr = 0x82000000 OpenIPC # sf erase 0x0 0x00800000 Erasing at 0x800000 -- 100% complete. OpenIPC # sf write 0x82000000 0x0 ${filesize} Writing at 0x800000 -- 100% complete. OpenIPC # ``` > **Restore backup up firmware via TFTP** Here are the commands for 8MB Flash. ```shell setenv ipaddr 192.168.1.10 setenv serverip 192.168.1.254 sf probe 0; sf lock 0 mw.b 0x82000000 ff 1000000 tftp 0x82000000 fullflash.img sf erase 0x0 0x00800000 sf write 0x82000000 0x0 ${filesize} ``` ## Reference Book To be written... [1]: https://aliexpress.com/item/32493067946.html [2]: https://aliexpress.com/item/32851596596.html [3]: https://aliexpress.com/item/1005002315913099.html [4]: https://aliexpress.com/item/1005002298832047.html [5]: https://aliexpress.com/item/4000119561119.html [6]: https://aliexpress.com/item/4000054902736.html [7]: https://aliexpress.com/item/1005001933429701.html [8]: https://translate.google.com/translate?sl=ru&tl=en&u=https://www.cctvsp.ru/articles/obzor-i-sravnenie-matrits-dlya-kamer-videonablyudeniya [9]: majestic-streamer.md [b1]: https://github.com/openipc/chaos_calmer/actions/workflows/hi3516cv100_images.yml/badge.svg?branch=master [b2]: https://github.com/openipc/chaos_calmer/actions/workflows/hi3516cv200_images.yml/badge.svg?branch=master [b3]: https://github.com/openipc/chaos_calmer/actions/workflows/hi3516cv300_images.yml/badge.svg?branch=master [b4]: https://github.com/openipc/chaos_calmer/actions/workflows/hi3516cv300_images.yml/badge.svg?branch=master [b5]: https://github.com/openipc/chaos_calmer/actions/workflows/hi3516cv100_images.yml/badge.svg?branch=master [b6]: https://github.com/openipc/chaos_calmer/actions/workflows/hi3516cv100_images.yml/badge.svg?branch=master [b7]: https://github.com/openipc/chaos_calmer/actions/workflows/hi3516cv100_images.yml/badge.svg?branch=master [b8]: https://github.com/openipc/chaos_calmer/actions/workflows/hi3516cv200_images.yml/badge.svg?branch=master [b9]: https://github.com/openipc/chaos_calmer/actions/workflows/hi3516cv200_images.yml/badge.svg?branch=master [b10]: https://github.com/openipc/chaos_calmer/actions/workflows/hi3520dv200_images.yml/badge.svg?branch=master [b11]: https://github.com/openipc/chaos_calmer/actions/workflows/hi3520dv200_images.yml/badge.svg?branch=master [u1]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-16cv100-u-boot.bin [u2]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-16cv200-u-boot.bin [u3]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-16cv300-u-boot.bin [u4]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-16ev100-u-boot.bin [u5]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-18av100-u-boot.bin [u6]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-18cv100-u-boot.bin [u7]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-18ev100-u-boot.bin [u8]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-18ev200-u-boot.bin [u9]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-18ev201-u-boot.bin [k1]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-16cv100-default-uImage [k2]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-16cv200-default-uImage [k3]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-16cv300-default-uImage [k4]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-16ev100-default-uImage [k5]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-18av100-default-uImage [k6]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-18cv100-default-uImage [k7]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-18ev100-default-uImage [k8]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-18ev200-default-uImage [k9]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-18ev201-default-uImage [k10]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-20dv100-default-uImage [k11]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-20dv200-default-uImage [r1]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-16cv100-default-root.squashfs [r2]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-16cv200-default-root.squashfs [r3]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-16cv300-default-root.squashfs [r4]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-16ev100-default-root.squashfs [r5]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-18av100-default-root.squashfs [r6]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-18cv100-default-root.squashfs [r7]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-18ev100-default-root.squashfs [r8]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-18ev200-default-root.squashfs [r9]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-18ev201-default-root.squashfs [r10]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-20dv100-default-root.squashfs [r11]: https://github.com/OpenIPC/chaos_calmer/releases/download/latest/openwrt-hi35xx-20dv200-default-root.squashfs