Welcome! Log In Create A New Profile

Advanced

Ubiquity MTD partition rewrite, and a lot of unused space

Posted by rusty 
Ubiquity MTD partition rewrite, and a lot of unused space
August 20, 2024 03:27PM
Greetings; long post ahead here.
I got posession of a Amplifi (Ubituity) AF-R router, and found the device had been added to openwrt but is not yet in the main branch; it is supported in snapshots. Cool. Thinking it would be a fun box to play around with, I opened it up and made a UART connection, and was able to start playing around. Following someone elses footsteps, I flashed the image via tftp in the uboot console to (what appears to be) an unused address, modified the bootcmd in uboot, and voila everything works fine. The issue is the stock MTD partitions are still in place, and it's messy.
The device has a 32M flash but it appears only 16 is used (suppose this could be the case from the OEM). My goal is to rewrite the MTD to a) dump the needless ubnt partitions (including recovery), and hopefully expand the blocks to allow for more usable space.

The ubuquity u-boot is still in place and working great; just wasting a lot of space:
ath> printenv
printenv
bootargs=root=31:03 rootfstype=jffs2 init=/init console=0 panic=3
bootdelay=1
ipaddr=192.168.1.20
serverip=192.168.1.254
mtdparts=mtdparts=ath-nor0:384k(u-boot),64k(u-boot-env),11264k(firmware),768k(cfg),3776k(recovery),64k(prst),64k(EEPROM)
ubntappinit=go ${ubntaddr} uappinit;go ${ubntaddr} ufsdetect
ubntrecoveryaddr=0xBFC30000
ubntrecovery=bootm ${ubntrecoveryaddr}
ubnturescue=go ${ubntaddr} uappinit;urescue;go ${ubntaddr} uwrite
ethact=eth0
led1=5
led2=7
appinitdone=true
ubntboot=go ${ubntaddr} uflext 0; bootm 0xBF070000
customboot=bootm bf070000
bootcmd=run ubntappinit customboot
stdin=serial
stdout=serial
stderr=serial
ubntaddr=80200020

^-- This looks to be 16M, the flash is 32M

Flash info:
ath> flinfo
flinfo

Bank # 1: mx25l25635f (Id: 0xc22019)
	Size: 32 MB in 512 sectors

The openwrt device DTS accounts for this, as follows, MTD looks to follow the stock layout:
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT

#include "qca956x.dtsi"

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

/ {
	compatible = "ubnt,amplifi-router-hd", "qca,qca9563";
	model = "Ubiquiti AmpliFi Router HD";

	aliases {
		label-mac-device = &eth0;
	};

	keys {
		compatible = "gpio-keys";

		reset {
			label = "Reset button";
			linux,code = <KEY_RESTART>;
			gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
			debounce-interval = <60>;
		};
	};
};

&pcie {
	status = "okay";

	wifi@0,0 {
		compatible = "qcom,ath10k";
		reg = <0x0000 0 0 0 0>;
		nvmem-cells = <&cal_art_5000>;
		nvmem-cell-names = "calibration";
	};
};

&spi {
	status = "okay";

	flash@0 {
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <25000000>;

		partitions {
			compatible = "fixed-partitions";
			#address-cells = <1>;
			#size-cells = <1>;

			partition@0 {
				label = "u-boot";
				reg = <0x000000 0x060000>;
				read-only;
			};

			partition@60000 {
				compatible = "u-boot,env";
				label = "u-boot-env";
				reg = <0x060000 0x010000>;
			};

			partition@70000 {
				compatible = "denx,uimage";
				label = "firmware";
				reg = <0x070000 0xb00000>;
			};

			partition@b70000 {
				label = "cfg";
				reg = <0xb70000 0x0c0000>;
				read-only;
			};

			partition@c30000 {
				label = "recovery";
				reg = <0xc30000 0x3b0000>;
				read-only;
			};

			partition@fe0000 {
				label = "prst";
				reg = <0xfe0000 0x010000>;
				read-only;
			};

			partition@ff0000 {
				/* eeprom */
				label = "art";
				reg = <0xff0000 0x010000>;
				read-only;

				nvmem-layout {
					compatible = "fixed-layout";
					#address-cells = <1>;
					#size-cells = <1>;

					macaddr_art_0: macaddr@0 {
						compatible = "mac-base";
						reg = <0x0 0x6>;
						#nvmem-cell-cells = <1>;
					};

					cal_art_1000: calibration@1000 {
						reg = <0x1000 0x440>;
					};

					cal_art_5000: calibration@5000 {
						reg = <0x5000 0x844>;
					};
				};
			};

			partition@1000000 {
				label = "bs1";
				reg = <0x1000000 0x010000>;
				};

			partition@1010000 {
				label = "bs2";
				reg = <0x1010000 0x010000>;
				read-only;
			};

			partition@1020000 {
				label = "stats";
				reg = <0x1020000 0x400000>;
				read-only;
			};

			partition@1420000 {
				label = "fw_inactive";
				reg = <0x1420000 0xb00000>;
				read-only;
			};

			partition@1f20000 {
				label = "reserved";
				reg = <0x1f20000 0x0e0000>;
				read-only;
			};
		};
	};
};

&mdio0 {
	status = "okay";

	phy0: ethernet-phy@0 {
		reg = <0>;
		phy-mode = "sgmii";

		qca,ar8327-initvals = <
			0x04 0x00000080 /* AR8327_REG_PAD0_MODE */
			0x08 0x00000000 /* PORT5 PAD MODE CTRL */
			0x0c 0x00000000 /* PORT6 PAD MODE CTRL */
			0x10 0x602613a0 /* AR8327_REG_POWER_ON_STRAP */
			0x50 0xcc35cc35 /* AR8327_REG_LED_CTRL0 */
			0x54 0xca35ca35 /* AR8327_REG_LED_CTRL1 */
			0x58 0xc935c935 /* AR8327_REG_LED_CTRL2 */
			0x5c 0x03ffff00 /* AR8327_REG_LED_CTRL3 */
			0x7c 0x0000007e /* AR8327_REG_PORT_STATUS(0) */
			0x94 0x00001080 /* AR8327_REG_PORT_STATUS(6) */
		>;
	};
};

&eth0 {
	status = "okay";
	
	pll-data = <0x03000101 0x00000101 0x00001919>;

	phy-mode = "sgmii";
	phy-handle = <&phy0>;

	nvmem-cells = <&macaddr_art_0 0>;
	nvmem-cell-names = "mac-address";
};

&wmac {
	status = "okay";

	nvmem-cells = <&macaddr_art_0 (-2)>, <&cal_art_1000>;
	nvmem-cell-names = "mac-address", "calibration";
};

&usb_phy0 {
	status = "okay";
};

&usb0 {
	status = "okay";
};

Just for fun, pointed u-boot to the recovery partition and it functions as expected, back to the Ubiquity recovery OS. I don't see a need for this at all, as I have a UART now. Just wasted space.

Looking from openwrt, mtd is as follows:
root@OpenWrt:/# cat /proc/mtd
cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00060000 00010000 "u-boot"
mtd1: 00010000 00010000 "u-boot-env"
mtd2: 00b00000 00010000 "firmware"
mtd3: 002b0000 00010000 "kernel"
mtd4: 00850000 00010000 "rootfs"
mtd5: 004a0000 00010000 "rootfs_data"
mtd6: 000c0000 00010000 "cfg"
mtd7: 003b0000 00010000 "recovery"
mtd8: 00010000 00010000 "prst"
mtd9: 00010000 00010000 "art"
mtd10: 00010000 00010000 "bs1"
mtd11: 00010000 00010000 "bs2"
mtd12: 00400000 00010000 "stats"
mtd13: 00b00000 00010000 "fw_inactive"
mtd14: 000e0000 00010000 "reserved"

So I need:
mtd0: uboot - yes;
mtd1: u-boot-env - yes,
mtd2: firmware - yes
mtd9: art - yes

AFAIK the other partitions are just wasting space - let alone we are only using half the flash.
My goal is to keep uboot and wash the rest, only left with a functional firmware partition and eeprom (art) partition.
Am I able to re-define those addresses in the DTS, and "write-back" a (currently) saved MTD to the new address(s)? ie: backup mtd 0/1/9, write a new layout, and flash them back to the new layout address(s)? I'm hesitant to break the stock u-boot as it is working fine, but everything from 0x70000 on seems like it could use a big cleanup to give me more usable space. Changing mtdparts in u-boot to reflect the changes would certainly be needed as well?


here is the commit for reference:
AFI-R device support commit

And dmesg [some bad blocks at 0.410750]:
[    0.000000] Linux version 6.6.45 (builder@buildhost) (mips-openwrt-linux-musl-gcc (OpenWrt GCC 13.3.0 r27160-b72c4b5386) 13.3.0, GNU ld (GNU Binutils) 2.42) #0 Fri Aug 16 18:40:34 2024
[    0.000000] printk: bootconsole [early0] enabled
[    0.000000] CPU0 revision is: 00019750 (MIPS 74Kc)
[    0.000000] MIPS: machine is Ubiquiti AmpliFi Router HD
[    0.000000] SoC: Qualcomm Atheros QCA956X ver 1 rev 0
[    0.000000] Initrd not found or empty - disabling initrd
[    0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
[    0.000000] Primary data cache 32kB, 4-way, VIPT, cache aliases, linesize 32 bytes
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000000000000-0x0000000007ffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x0000000007ffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000007ffffff]
[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000] pcpu-alloc: [0] 0 
[    0.000000] Kernel command line: console=ttyS0,115200n8 rootfstype=squashfs,jffs2
[    0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes, linear)
[    0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
[    0.000000] Writing ErrCtl register=00000000
[    0.000000] Readback ErrCtl register=00000000
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 32480
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 119416K/131072K available (6721K kernel code, 600K rwdata, 1580K rodata, 1204K init, 215K bss, 11656K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] NR_IRQS: 51
[    0.000000] CPU clock: 775.000 MHz
[    0.000000] clocksource: MIPS: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 4932285024 ns
[    0.000001] sched_clock: 32 bits at 388MHz, resolution 2ns, wraps every 5541893118ns
[    0.008299] Calibrating delay loop... 385.84 BogoMIPS (lpj=1929216)
[    0.074799] pid_max: default: 32768 minimum: 301
[    0.089171] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.096909] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.113489] RCU Tasks Trace: Setting shift to 0 and lim to 1 rcu_task_cb_adjust=1.
[    0.125993] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.136415] futex hash table entries: 256 (order: -1, 3072 bytes, linear)
[    0.146074] pinctrl core: initialized pinctrl subsystem
[    0.154339] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.161136] thermal_sys: Registered thermal governor 'step_wise'
[    0.174785] clocksource: Switched to clocksource MIPS
[    0.196749] NET: Registered PF_INET protocol family
[    0.202138] IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear)
[    0.211195] tcp_listen_portaddr_hash hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.220182] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.228371] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.236468] TCP bind hash table entries: 1024 (order: 1, 8192 bytes, linear)
[    0.243937] TCP: Hash tables configured (established 1024 bind 1024)
[    0.250796] UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
[    0.257763] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
[    0.266027] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.272048] PCI: CLS 0 bytes, default 32
[    0.280735] workingset: timestamp_bits=14 max_order=15 bucket_order=1
[    0.289206] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.295402] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
[    0.312930] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251)
[    0.324254] pinctrl-single 1804002c.pinmux: 544 pins, size 68
[    0.331582] Serial: 8250/16550 driver, 16 ports, IRQ sharing enabled
[    0.343369] printk: console [ttyS0] disabled
[    0.348475] 18020000.uart: ttyS0 at MMIO 0x18020000 (irq = 11, base_baud = 1562500) is a 16550A
[    0.357738] printk: console [ttyS0] enabled
[    0.366807] printk: bootconsole [early0] disabled
[    0.410750] spi-nor spi0.0: mx25l25635e (32768 Kbytes)
[    0.416294] 12 fixed-partitions partitions found on MTD device spi0.0
[    0.422986] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[    0.429880] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[    0.436995] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[    0.443850] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[    0.450927] Creating 12 MTD partitions on "spi0.0":
[    0.456011] 0x000000000000-0x000000060000 : "u-boot"
[    0.464549] 0x000000060000-0x000000070000 : "u-boot-env"
[    0.471548] 0x000000070000-0x000000b70000 : "firmware"
[    0.479041] 2 uimage-fw partitions found on MTD device firmware
[    0.485221] Creating 2 MTD partitions on "firmware":
[    0.490397] 0x000000000000-0x0000002b0000 : "kernel"
[    0.497369] 0x0000002b0000-0x000000b00000 : "rootfs"
[    0.504359] mtd: setting mtd4 (rootfs) as root device
[    0.509707] 1 squashfs-split partitions found on MTD device rootfs
[    0.516117] 0x000000660000-0x000000b00000 : "rootfs_data"
[    0.523669] 0x000000b70000-0x000000c30000 : "cfg"
[    0.530517] 0x000000c30000-0x000000fe0000 : "recovery"
[    0.537889] 0x000000fe0000-0x000000ff0000 : "prst"
[    0.544858] 0x000000ff0000-0x000001000000 : "art"
[    0.551885] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[    0.559076] 0x000001000000-0x000001010000 : "bs1"
[    0.566343] 0x000001010000-0x000001020000 : "bs2"
[    0.573174] 0x000001020000-0x000001420000 : "stats"
[    0.580255] 0x000001420000-0x000001f20000 : "fw_inactive"
[    0.587902] 0x000001f20000-0x000002000000 : "reserved"
[    1.289283] switch0: Atheros AR8327 rev. 4 switch registered on mdio.0
[    1.946514] ag71xx 19000000.eth: connected to PHY at mdio.0:00 [uid=004dd034, driver=Atheros AR8216/AR8236/AR8316]
[    1.957999] eth0: Atheros AG71xx at 0xb9000000, irq 4, mode: sgmii
[    1.964995] i2c_dev: i2c /dev entries driver
[    2.014201] NET: Registered PF_INET6 protocol family
[    2.029497] Segment Routing with IPv6
[    2.033374] In-situ OAM (IOAM) with IPv6
[    2.037650] NET: Registered PF_PACKET protocol family
[    2.042915] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[    2.056766] 8021q: 802.1Q VLAN Support v1.8
[    2.078832] PCI host bridge to bus 0000:00
[    2.083090] pci_bus 0000:00: root bus resource [mem 0x12000000-0x13ffffff]
[    2.090244] pci_bus 0000:00: root bus resource [io  0x0000]
[    2.096014] pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff]
[    2.104238] pci 0000:00:00.0: [168c:003c] type 00 class 0x028000
[    2.110492] pci 0000:00:00.0: reg 0x10: [mem 0x00000000-0x001fffff 64bit]
[    2.117563] pci 0000:00:00.0: reg 0x30: [mem 0x00000000-0x0000ffff pref]
[    2.124558] pci 0000:00:00.0: supports D1
[    2.128713] pci 0000:00:00.0: PME# supported from D0 D1 D3hot
[    2.135613] pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to 00
[    2.142476] pci 0000:00:00.0: BAR 0: assigned [mem 0x12000000-0x121fffff 64bit]
[    2.150084] pci 0000:00:00.0: BAR 6: assigned [mem 0x12200000-0x1220ffff pref]
[    2.177259] clk: Disabling unused clocks
[    2.190266] VFS: Mounted root (squashfs filesystem) readonly on device 31:4.
[    2.204026] Freeing unused kernel image (initmem) memory: 1204K
[    2.210202] This architecture does not have kernel memory protection.
[    2.216876] Run /sbin/init as init process
[    2.221101]   with arguments:
[    2.221106]     /sbin/init
[    2.221111]   with environment:
[    2.221116]     HOME=/
[    2.221120]     TERM=linux
[    2.860356] init: Console is alive
[    2.864289] init: - watchdog -
[    4.366025] kmodloader: loading kernel modules from /etc/modules-boot.d/*
[    4.448052] usbcore: registered new interface driver usbfs
[    4.453836] usbcore: registered new interface driver hub
[    4.459497] usbcore: registered new device driver usb
[    4.468942] gpio_button_hotplug: loading out-of-tree module taints kernel.
[    4.487796] ehci-platform 1b000000.usb: EHCI Host Controller
[    4.493687] ehci-platform 1b000000.usb: new USB bus registered, assigned bus number 1
[    4.502009] ehci-platform 1b000000.usb: irq 13, io mem 0x1b000000
[    4.534804] ehci-platform 1b000000.usb: USB 2.0 started, EHCI 1.00
[    4.542206] hub 1-0:1.0: USB hub found
[    4.547029] hub 1-0:1.0: 1 port detected
[    4.556622] kmodloader: done loading kernel modules from /etc/modules-boot.d/*
[    4.574670] init: - preinit -
[    4.908642] usb 1-1: new high-speed USB device number 2 using ehci-platform
[    5.350338] hub 1-1:1.0: USB hub found
[    5.411475] hub 1-1:1.0: 4 ports detected
[    7.624818] random: crng init done
[    9.388779] Atheros AR8216/AR8236/AR8316 mdio.0:00: Port 1 is up
[    9.395225] Atheros AR8216/AR8236/AR8316 mdio.0:00: Port 2 is up
[    9.408847] eth0: link up (1000Mbps/Full duplex)
[   11.755179] jffs2: notice: (534) jffs2_build_xattr_subsystem: complete building xattr subsystem, 31 of xdatum (31 unchecked, 0 orphan) and 46 of xref (5 dead, 0 orphan) found.
[   11.773460] mount_root: switching to jffs2 overlay
[   11.782684] overlayfs: upper fs does not support tmpfile.
[   11.797366] urandom-seed: Seeding with /etc/urandom.seed
[   11.865416] eth0: link down
[   11.899335] procd: - early -
[   11.902624] procd: - watchdog -
[   12.725002] procd: - watchdog -
[   12.729170] procd: - ubus -
[   12.935958] procd: - init -
[   15.904970] kmodloader: loading kernel modules from /etc/modules.d/*
[   16.488272] urngd: v1.0.2 started.
[   18.065247] hid: raw HID events driver (C) Jiri Kosina
[   18.391667] Bluetooth: Core ver 2.22
[   18.395537] NET: Registered PF_BLUETOOTH protocol family
[   18.401035] Bluetooth: HCI device and connection manager initialized
[   18.407633] Bluetooth: HCI socket layer initialized
[   18.412678] Bluetooth: L2CAP socket layer initialized
[   18.417968] Bluetooth: SCO socket layer initialized
[   18.428521] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[   18.434036] Bluetooth: BNEP filters: protocol multicast
[   18.439491] Bluetooth: BNEP socket layer initialized
[   18.494897] usbcore: registered new interface driver btusb
[   18.501777] Loading modules backported from Linux version v6.9.9-0-g28fdf4518483
[   18.509477] Backport generated by backports.git v6.1.97-1-29-gf1d24a3683b2
[   18.528267] Bluetooth: HCI UART driver ver 2.3
[   18.532884] Bluetooth: HCI UART protocol H4 registered
[   18.538238] Bluetooth: HCI UART protocol BCSP registered
[   18.543722] Bluetooth: HCI UART protocol ATH3K registered
[   18.559298] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[   18.565490] Bluetooth: HIDP socket layer initialized
[   18.617549] Bluetooth: RFCOMM TTY layer initialized
[   18.622623] Bluetooth: RFCOMM socket layer initialized
[   18.627997] Bluetooth: RFCOMM ver 1.11
[   18.635756] SPI driver spidev has no spi_device_id for rohm,bh2228fv
[   19.161004] ath10k 6.9 driver, optimized for CT firmware, probing pci device: 0x3c.
[   19.170456] ath10k_pci 0000:00:00.0: enabling device (0000 -> 0002)
[   19.179248] ath10k_pci 0000:00:00.0: pci irq legacy oper_irq_mode 1 irq_mode 0 reset_mode 0
[   22.438815] ath10k_pci 0000:00:00.0: qca988x hw2.0 target 0x4100016c chip_id 0x043202ff sub 0000:0000
[   22.448432] ath10k_pci 0000:00:00.0: kconfig debug 0 debugfs 1 tracing 0 dfs 1 testmode 0
[   22.458890] ath10k_pci 0000:00:00.0: firmware ver 10.1-ct-8x-__fW-022-ecad3248 api 2 features wmi-10.x,has-wmi-mgmt-tx,mfp,txstatus-noack,wmi-10.x-CT,ratemask-CT,txrate-CT,get-temp-CT,tx-rc-CT,cust-stats-CT,retry-gt2-CT,txrate2-CT,beacon-cb-CT,wmi-block-ack-CT crc32 3e4cf97f
[   23.344741] ath10k_pci 0000:00:00.0: board_file api 1 bmi_id N/A crc32 bebc7c08
[   24.301346] ath10k_pci 0000:00:00.0: 10.1 wmi init: vdevs: 16  peers: 127  tid: 256
[   24.318117] ath10k_pci 0000:00:00.0: wmi print 'P 128 V 8 T 410'
[   24.324371] ath10k_pci 0000:00:00.0: wmi print 'msdu-desc: 1424  sw-crypt: 0 ct-sta: 0'
[   24.332660] ath10k_pci 0000:00:00.0: wmi print 'alloc rem: 24984 iram: 38672'
[   24.382706] ath10k_pci 0000:00:00.0: htt-ver 2.1 wmi-op 2 htt-op 2 cal nvmem max-sta 128 raw 0 hwcrypto 1
[   24.395611] ath10k_pci 0000:00:00.0: NOTE:  Firmware DBGLOG output disabled in debug_mask: 0x10000000
[   24.536513] ath: EEPROM regdomain: 0x2a
[   24.536539] ath: EEPROM indicates we should expect a direct regpair map
[   24.536554] ath: Country alpha2 being used: US
[   24.536561] ath: Regpair used: 0x2a
[   24.608916] ath: EEPROM regdomain: 0x2a
[   24.608942] ath: EEPROM indicates we should expect a direct regpair map
[   24.608958] ath: Country alpha2 being used: US
[   24.608965] ath: Regpair used: 0x2a
[   24.620754] ieee80211 phy1: Selected rate control algorithm 'minstrel_ht'
[   24.621718] ieee80211 phy1: Atheros AR9561 Rev:0 mem=0x5a90922c, irq=2
[   24.655547] kmodloader: done loading kernel modules from /etc/modules.d/*
[   40.642334] eth0: link up (1000Mbps/Full duplex)
[   40.674941] br-lan: port 1(eth0.1) entered blocking state
[   40.680546] br-lan: port 1(eth0.1) entered disabled state
[   40.686215] eth0.1: entered allmulticast mode
[   40.690732] ag71xx 19000000.eth eth0: entered allmulticast mode
[   40.697141] eth0.1: entered promiscuous mode
[   40.701575] ag71xx 19000000.eth eth0: entered promiscuous mode
[   40.744980] br-lan: port 1(eth0.1) entered blocking state
[   40.750586] br-lan: port 1(eth0.1) entered forwarding state

I'd appreciate some insight into cleaning this up. Bodhi is the u-boot/mtd master!
Re: Ubiquity MTD partition rewrite, and a lot of unused space
August 21, 2024 12:41AM
rusty,

Boot with serial console,

ver
bdinfo
printenv

And post the entire boot log until here.

I briefly did a quick calculation and my initial observation is that you don't need (probably should not) repartition the flash. Will come back and elaborate more.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Ubiquity MTD partition rewrite, and a lot of unused space
August 21, 2024 09:11AM
Here you go - FYI no bdinfo, not built in to this u-boot apparently.
ath> ver
ver

U-Boot unifi-home-.g345bbabc (Aug 16 2019 - 16:21:51)

ath> printenv
printenv
bootargs=root=31:03 rootfstype=jffs2 init=/init console=0 panic=3
bootdelay=1
ipaddr=192.168.1.20
serverip=192.168.1.254
mtdparts=mtdparts=ath-nor0:384k(u-boot),64k(u-boot-env),11264k(firmware),768k(cfg),3776k(recovery),64k(prst),64k(EEPROM)
ubntappinit=go ${ubntaddr} uappinit;go ${ubntaddr} ufsdetect
ubntrecoveryaddr=0xBFC30000
ubntrecovery=bootm ${ubntrecoveryaddr}
ubnturescue=go ${ubntaddr} uappinit;urescue;go ${ubntaddr} uwrite
ethact=eth0
led1=5
led2=7
appinitdone=true
ubntboot=go ${ubntaddr} uflext 0; bootm 0xBF070000
customboot=bootm bf070000
bootcmd=run ubntappinit customboot
stdin=serial
stdout=serial
stderr=serial
ubntaddr=80200020

Environment size: 650/65532 bytes
:BOOT:
U-Boot unifi-home-.g345bbabc (Aug 16 2019 - 16:21:51)

DRAM:  
sri
ath_ddr_initial_config(278): (ddr2 init)
ath_sys_frequency: cpu 775 ddr 650 ahb 258
Tap values = (0xf, 0xf, 0xf, 0xf)
128 MB
Flash Manuf Id 0xc2, DeviceId0 0x20, DeviceId1 0x19
Flash: 32 MB
PCIe WLAN Module found (tries: 1). 
Net:   ath_gmac_enet_initialize...
Fetching MAC Address from 0x87fec3cc
ath_gmac_enet_initialize: reset mask:c02200 
athr_mgmt_init ::done
Dragonfly  ----> S17 PHY *
 ath_gmac_enet_initialize: is_s17()=1, is_ar8033()=0, phy id1=4d phy_id2=d034 
athrs17_reg_init: complete
SGMII in forced mode
athr_gmac_sgmii_setup SGMII done
: cfg1 0x80000000 cfg2 0x7114
eth0: f0:9f:c2:f3:5d:5c
eth0 up
eth0
Setting 0x181162c0 to 0x20402100
Board: Copyright Ubiquiti Networks Inc. 2016
Hit any key to stop autoboot:  0 
Board: Ubiquiti Networks AR956X board (ea36-19.1150.0030.0040)
 0. Name = u-boot, offset = 0, start_addr=bf000000, size=393216,start_sector=0, end_sector=5 
 1. Name = u-boot-env, offset = 60000, start_addr=bf060000, size=65536,start_sector=6, end_sector=6 
 2. Name = firmware, offset = 70000, start_addr=bf070000, size=11534336,start_sector=7, end_sector=182 
 3. Name = cfg, offset = b70000, start_addr=bfb70000, size=786432,start_sector=183, end_sector=194 
 4. Name = recovery, offset = c30000, start_addr=bfc30000, size=3866624,start_sector=195, end_sector=253 
 5. Name = prst, offset = fe0000, start_addr=bffe0000, size=65536,start_sector=254, end_sector=254 
 6. Name = EEPROM, offset = ff0000, start_addr=bfff0000, size=65536,start_sector=255, end_sector=255 
UBNT application initialized 
Detecting boot selection
bs1: 5AFEB007 B5B5B5B5 valid active
bs2: 5AFEB007 FFFFFFFF valid inactive
First firmware is active
## Booting image at bf070000 ...
   Image Name:   MIPS OpenWrt Linux-6.6.45
   Created:      2024-08-16  18:40:34 UTC
   Image Type:   MIPS Linux Kernel Image (lzma compressed)
   Data Size:    2769695 Bytes =  2.6 MB
   Load Address: 80060000
   Entry Point:  80060000
   Verifying Checksum at 0xbf070040 ...OK
   Uncompressing Kernel Image ... OK

Starting kernel ...

[    0.000000] Linux version 6.6.45 (builder@buildhost) (mips-openwrt-linux-musl-gcc (OpenWrt GCC 13.3.0 r27160-b72c4b5386) 13.3.0, GNU ld (GNU Binutils) 2.42) #0 Fri Aug 16 18:40:34 2024
[    0.000000] printk: bootconsole [early0] enabled
[    0.000000] CPU0 revision is: 00019750 (MIPS 74Kc)
[    0.000000] MIPS: machine is Ubiquiti AmpliFi Router HD
[    0.000000] SoC: Qualcomm Atheros QCA956X ver 1 rev 0
[    0.000000] Initrd not found or empty - disabling initrd
[    0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
[    0.000000] Primary data cache 32kB, 4-way, VIPT, cache aliases, linesize 32 bytes
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000000000000-0x0000000007ffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x0000000007ffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000007ffffff]
[    0.000000] Kernel command line: console=ttyS0,115200n8 rootfstype=squashfs,jffs2
[    0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes, linear)
[    0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
[    0.000000] Writing ErrCtl register=00000000
[    0.000000] Readback ErrCtl register=00000000
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 32480
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 119416K/131072K available (6721K kernel code, 600K rwdata, 1580K rodata, 1204K init, 215K bss, 11656K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] NR_IRQS: 51
[    0.000000] CPU clock: 775.000 MHz
[    0.000000] clocksource: MIPS: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 4932285024 ns
[    0.000001] sched_clock: 32 bits at 388MHz, resolution 2ns, wraps every 5541893118ns
[    0.008299] Calibrating delay loop... 385.84 BogoMIPS (lpj=1929216)
[    0.074799] pid_max: default: 32768 minimum: 301
[    0.089171] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.096909] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.113501] RCU Tasks Trace: Setting shift to 0 and lim to 1 rcu_task_cb_adjust=1.
[    0.126013] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.136431] futex hash table entries: 256 (order: -1, 3072 bytes, linear)
[    0.146089] pinctrl core: initialized pinctrl subsystem
[    0.154335] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.161131] thermal_sys: Registered thermal governor 'step_wise'
[    0.174817] clocksource: Switched to clocksource MIPS
[    0.196781] NET: Registered PF_INET protocol family
[    0.202169] IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear)
[    0.211229] tcp_listen_portaddr_hash hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.220214] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.228396] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.236485] TCP bind hash table entries: 1024 (order: 1, 8192 bytes, linear)
[    0.243953] TCP: Hash tables configured (established 1024 bind 1024)
[    0.250815] UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
[    0.257780] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
[    0.266048] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.272077] PCI: CLS 0 bytes, default 32
[    0.280788] workingset: timestamp_bits=14 max_order=15 bucket_order=1
[    0.289265] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.295461] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
[    0.312988] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251)
[    0.324324] pinctrl-single 1804002c.pinmux: 544 pins, size 68
[    0.331656] Serial: 8250/16550 driver, 16 ports, IRQ sharing enabled
[    0.343437] printk: console [ttyS0] disabled
[    0.348538] 18020000.uart: ttyS0 at MMIO 0x18020000 (irq = 11, base_baud = 1562500) is a 16550A
[    0.357806] printk: console [ttyS0] enabled
[    0.357806] printk: console [ttyS0] enabled
[    0.366874] printk: bootconsole [early0] disabled
[    0.366874] printk: bootconsole [early0] disabled
[    0.410817] spi-nor spi0.0: mx25l25635e (32768 Kbytes)
[    0.416359] 12 fixed-partitions partitions found on MTD device spi0.0
[    0.423049] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[    0.429946] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[    0.437062] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[    0.443916] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[    0.450995] Creating 12 MTD partitions on "spi0.0":
[    0.456079] 0x000000000000-0x000000060000 : "u-boot"
[    0.464605] 0x000000060000-0x000000070000 : "u-boot-env"
[    0.471606] 0x000000070000-0x000000b70000 : "firmware"
[    0.479089] 2 uimage-fw partitions found on MTD device firmware
[    0.485271] Creating 2 MTD partitions on "firmware":
[    0.490446] 0x000000000000-0x0000002b0000 : "kernel"
[    0.497423] 0x0000002b0000-0x000000b00000 : "rootfs"
[    0.504392] mtd: setting mtd4 (rootfs) as root device
[    0.509745] 1 squashfs-split partitions found on MTD device rootfs
[    0.516156] 0x000000660000-0x000000b00000 : "rootfs_data"
[    0.523711] 0x000000b70000-0x000000c30000 : "cfg"
[    0.530565] 0x000000c30000-0x000000fe0000 : "recovery"
[    0.537944] 0x000000fe0000-0x000000ff0000 : "prst"
[    0.544940] 0x000000ff0000-0x000001000000 : "art"
[    0.551960] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[    0.559149] 0x000001000000-0x000001010000 : "bs1"
[    0.566414] 0x000001010000-0x000001020000 : "bs2"
[    0.573246] 0x000001020000-0x000001420000 : "stats"
[    0.580340] 0x000001420000-0x000001f20000 : "fw_inactive"
[    0.587981] 0x000001f20000-0x000002000000 : "reserved"
[    1.289297] switch0: Atheros AR8327 rev. 4 switch registered on mdio.0
[    1.946543] ag71xx 19000000.eth: connected to PHY at mdio.0:00 [uid=004dd034, driver=Atheros AR8216/AR8236/AR8316]
[    1.958032] eth0: Atheros AG71xx at 0xb9000000, irq 4, mode: sgmii
[    1.965030] i2c_dev: i2c /dev entries driver
[    2.014246] NET: Registered PF_INET6 protocol family
[    2.029484] Segment Routing with IPv6
[    2.033359] In-situ OAM (IOAM) with IPv6
[    2.037631] NET: Registered PF_PACKET protocol family
[    2.042904] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[    2.056765] 8021q: 802.1Q VLAN Support v1.8
[    2.078730] PCI host bridge to bus 0000:00
[    2.082986] pci_bus 0000:00: root bus resource [mem 0x12000000-0x13ffffff]
[    2.090142] pci_bus 0000:00: root bus resource [io  0x0000]
[    2.095910] pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff]
[    2.104135] pci 0000:00:00.0: [168c:003c] type 00 class 0x028000
[    2.110387] pci 0000:00:00.0: reg 0x10: [mem 0x00000000-0x001fffff 64bit]
[    2.117459] pci 0000:00:00.0: reg 0x30: [mem 0x00000000-0x0000ffff pref]
[    2.124455] pci 0000:00:00.0: supports D1
[    2.128611] pci 0000:00:00.0: PME# supported from D0 D1 D3hot
[    2.135525] pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to 00
[    2.142392] pci 0000:00:00.0: BAR 0: assigned [mem 0x12000000-0x121fffff 64bit]
[    2.149982] pci 0000:00:00.0: BAR 6: assigned [mem 0x12200000-0x1220ffff pref]
[    2.177226] clk: Disabling unused clocks
[    2.190235] VFS: Mounted root (squashfs filesystem) readonly on device 31:4.
[    2.203993] Freeing unused kernel image (initmem) memory: 1204K
[    2.210169] This architecture does not have kernel memory protection.
[    2.216844] Run /sbin/init as init process
[    2.860414] init: Console is alive
[    2.864356] init: - watchdog -
[    4.366372] kmodloader: loading kernel modules from /etc/modules-boot.d/*
[    4.448446] usbcore: registered new interface driver usbfs
[    4.454226] usbcore: registered new interface driver hub
[    4.459886] usbcore: registered new device driver usb
[    4.469323] gpio_button_hotplug: loading out-of-tree module taints kernel.
[    4.488259] ehci-platform 1b000000.usb: EHCI Host Controller
[    4.494149] ehci-platform 1b000000.usb: new USB bus registered, assigned bus number 1
[    4.502469] ehci-platform 1b000000.usb: irq 13, io mem 0x1b000000
[    4.534837] ehci-platform 1b000000.usb: USB 2.0 started, EHCI 1.00
[    4.542253] hub 1-0:1.0: USB hub found
[    4.547066] hub 1-0:1.0: 1 port detected
[    4.556661] kmodloader: done loading kernel modules from /etc/modules-boot.d/*
[    4.574707] init: - preinit -
[    4.908434] usb 1-1: new high-speed USB device number 2 using ehci-platform
[    5.325950] hub 1-1:1.0: USB hub found
[    5.387152] hub 1-1:1.0: 4 ports detected
[    7.614851] random: crng init done
[    9.378751] Atheros AR8216/AR8236/AR8316 mdio.0:00: Port 1 is up
[    9.385203] Atheros AR8216/AR8236/AR8316 mdio.0:00: Port 2 is up
[    9.393426] eth0: link up (1000Mbps/Full duplex)
Press the [f] key and hit [enter] to enter failsafe mode
Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level
[   11.744249] jffs2: notice: (534) jffs2_build_xattr_subsystem: complete building xattr subsystem, 33 of xdatum (31 unchecked, 2 orphan) and 48 of xref (7 dead, 0 orphan) found.
[   11.762577] mount_root: switching to jffs2 overlay
[   11.769874] overlayfs: upper fs does not support tmpfile.
[   11.784444] urandom-seed: Seeding with /etc/urandom.seed
[   11.852337] eth0: link down
[   11.886590] procd: - early -
[   11.889875] procd: - watchdog -
[   12.697350] procd: - watchdog -
[   12.701506] procd: - ubus -
[   12.984686] procd: - init -
Please press Enter to activate this console.
[   15.650723] kmodloader: loading kernel modules from /etc/modules.d/*
[   16.905798] urngd: v1.0.2 started.
[   17.456209] hid: raw HID events driver (C) Jiri Kosina
[   18.426804] Bluetooth: Core ver 2.22
[   18.430637] NET: Registered PF_BLUETOOTH protocol family
[   18.436167] Bluetooth: HCI device and connection manager initialized
[   18.442740] Bluetooth: HCI socket layer initialized
[   18.447793] Bluetooth: L2CAP socket layer initialized
[   18.453060] Bluetooth: SCO socket layer initialized
[   18.474458] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[   18.480034] Bluetooth: BNEP filters: protocol multicast
[   18.485453] Bluetooth: BNEP socket layer initialized
[   18.539487] usbcore: registered new interface driver btusb
[   18.547365] Loading modules backported from Linux version v6.9.9-0-g28fdf4518483
[   18.555070] Backport generated by backports.git v6.1.97-1-29-gf1d24a3683b2
[   18.572537] Bluetooth: HCI UART driver ver 2.3
[   18.577209] Bluetooth: HCI UART protocol H4 registered
[   18.582513] Bluetooth: HCI UART protocol BCSP registered
[   18.588007] Bluetooth: HCI UART protocol ATH3K registered
[   18.604370] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[   18.610584] Bluetooth: HIDP socket layer initialized
[   18.659757] Bluetooth: RFCOMM TTY layer initialized
[   18.664891] Bluetooth: RFCOMM socket layer initialized
[   18.670222] Bluetooth: RFCOMM ver 1.11
[   18.677149] SPI driver spidev has no spi_device_id for rohm,bh2228fv
[   19.197900] ath10k 6.9 driver, optimized for CT firmware, probing pci device: 0x3c.
[   19.208114] ath10k_pci 0000:00:00.0: enabling device (0000 -> 0002)
[   19.214789] ath10k_pci 0000:00:00.0: pci irq legacy oper_irq_mode 1 irq_mode 0 reset_mode 0
[   22.476317] ath10k_pci 0000:00:00.0: qca988x hw2.0 target 0x4100016c chip_id 0x043202ff sub 0000:0000
[   22.485944] ath10k_pci 0000:00:00.0: kconfig debug 0 debugfs 1 tracing 0 dfs 1 testmode 0
[   22.496405] ath10k_pci 0000:00:00.0: firmware ver 10.1-ct-8x-__fW-022-ecad3248 api 2 features wmi-10.x,has-wmi-mgmt-tx,mfp,txstatus-noack,wmi-10.x-CT,ratemask-CT,txrate-CT,get-temp-CT,tx-rc-CT,cust-stats-CT,retry-gt2-CT,txrate2-CT,beacon-cb-CT,wmi-block-ack-CT crc32 3e4cf97f
[   23.389618] ath10k_pci 0000:00:00.0: board_file api 1 bmi_id N/A crc32 bebc7c08
[   24.344296] ath10k_pci 0000:00:00.0: 10.1 wmi init: vdevs: 16  peers: 127  tid: 256
[   24.361090] ath10k_pci 0000:00:00.0: wmi print 'P 128 V 8 T 410'
[   24.367364] ath10k_pci 0000:00:00.0: wmi print 'msdu-desc: 1424  sw-crypt: 0 ct-sta: 0'
[   24.375658] ath10k_pci 0000:00:00.0: wmi print 'alloc rem: 24984 iram: 38672'
[   24.425347] ath10k_pci 0000:00:00.0: htt-ver 2.1 wmi-op 2 htt-op 2 cal nvmem max-sta 128 raw 0 hwcrypto 1
[   24.438250] ath10k_pci 0000:00:00.0: NOTE:  Firmware DBGLOG output disabled in debug_mask: 0x10000000
[   24.683355] ieee80211 phy1: Atheros AR9561 Rev:0 mem=0x9f4b270a, irq=2
[   24.725274] kmodloader: done loading kernel modules from /etc/modules.d/*
[   40.590609] eth0: link up (1000Mbps/Full duplex)
[   40.609865] br-lan: port 1(eth0.1) entered blocking state
[   40.615514] br-lan: port 1(eth0.1) entered disabled state
[   40.621128] eth0.1: entered allmulticast mode
[   40.625664] ag71xx 19000000.eth eth0: entered allmulticast mode
[   40.632034] eth0.1: entered promiscuous mode
[   40.636512] ag71xx 19000000.eth eth0: entered promiscuous mode
[   40.688054] br-lan: port 1(eth0.1) entered blocking state
[   40.693658] br-lan: port 1(eth0.1) entered forwarding state





BusyBox v1.36.1 (2024-08-16 18:40:34 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt SNAPSHOT, r27160-b72c4b5386
 -----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------
root@OpenWrt:/#

Cheers



Edited 1 time(s). Last edit at 08/21/2024 09:15AM by rusty.
Re: Ubiquity MTD partition rewrite, and a lot of unused space
August 22, 2024 11:10AM
rusty,

I would not recommend repartitioning the MTDs at the moment.

1. The OpenWrt installation you have is from staging. The MTD layout will likely change when it is merged into the official release tree. So whatever you do now will be most likely wasted if you want to keep running OpenWrt.

2. Now from the look of the layout, you might be able to use 11 MB free space from stock definition, assuming the OpenWrt official release will use stock MTD definition.

mtd13: 00b00000 00010000 "fw_inactive"

But it might get wiped out when you install the official OpenWrt version.

3. The flash size is too small. 32MB is OK for OpenWrt, but not for any other distro. Gaining 16 MB free space is not worth the effort, unless you already have some usage in mind.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Ubiquity MTD partition rewrite, and a lot of unused space
August 24, 2024 08:25AM
Yes, entirely. I'm more interested to see if I can move things around to open up some space (specifically for openwrt to avoid having tu use extroot). This is all being built locally, so I'm not planning on needing or using a release build. It's basically a one-off for myself.
Author:

Your Email:


Subject:


Spam prevention:
Please, enter the code that you see below in the input field. This is for blocking bots that try to post this form automatically. If the code is hard to read, then just try to guess it right. If you enter the wrong code, a new image is created and you get another chance to enter it right.
Message: