Archive for the ‘Uncategorized’ Category.

Pixel 5 PostMarketOS Port

Using Claude and not entirely usable, wifi and GPU should be working but not tested. This version doesn’t have bluetooth.

Instructions and everything else bundled up in the tarball below.

https://41j.com/blog/wp-content/uploads/2026/10/pixel5-linux-port.tar.gz

Updated version, with bluetooth and other bits and pieces:

https://41j.com/blog/wp-content/uploads/2026/10/pixel5-linux-port-v3.tar.gz

Updated version, with camera stuff:

https://41j.com/blog/wp-content/uploads/2026/10/pixel5-linux-port-v4.tar.gz

Archer A10 V2.0 JP OpenWRT

This is an update to the bundle posted yesterday.

The install bundle requires UART access which is pretty easy. RX/TX are the pins nearest the side of the case of the left.

Codex built a two stage installer. The first loads a RAM image over tftp. So you need to enter uboot (press t while booting 115200 8N1 works). Then start up a tftp server.

Here’s the overly verbose approach Codex made… files below.

Installation command sheet

Use the binary release bundle, Linux, 3.3 V UART and isolated Ethernet.
Connect Ethernet to WAN initially. Connect UART GND/RX/TX with TX/RX crossed; do not connect the adapter’s power pin. Substitute enp3s0 and /dev/ttyUSB0.
Read INSTALL_FROM_STOCK.md for expected model/partition sizes and failure handling.
The exact new installer and pristine-overlay installation have not been hardware-tested.

1. HOST — prepare Ethernet, UART and servers

Run UART, TFTP and HTTP servers in separate terminals; leave servers running.

tar -xzf archer-a10-v2-port-with-images.tar.gz
cd archer-a10-v2-port
sha256sum -c SHA256SUMS
sudo apt install tftpd-hpa picocom python3 openssh-client
sudo systemctl stop tftpd-hpa
WIRED_INTERFACE=enp3s0
sudo ip link set "$WIRED_INTERFACE" up
sudo ip addr replace 10.42.0.1/24 dev "$WIRED_INTERFACE"
picocom -b 115200 /dev/ttyUSB0
sudo in.tftpd --listen --foreground --address 10.42.0.1:69 \
  --secure "$PWD/install/tftp"
python3 -m http.server 8000 --bind 10.42.0.1 --directory install/payload

2. UART/U-BOOT — load OpenWrt into RAM

Select boot menu 4. Require image_boot=0, image_copy=1. Wait for complete TFTP transfer before bootm. Never saveenv.

printenv image_boot image_copy
setenv autostart no
setenv autoscript no
setenv ipaddr 10.42.0.185
setenv serverip 10.42.0.1
tftpboot 0x84000000 archer-a10-v2-stock-installer-ram.bin
bootm 0x84000000

3. ROUTER — establish Ethernet and verify the installer

ubus call system board
cat /proc/mtd
ip link show
ip addr add 10.42.0.185/24 dev br-lan
ping -c 3 10.42.0.1

The model must be TP-Link Archer A10 v2 (OS0-only installer RAM environment) and rootfs must be initramfs. Verify the partition map against INSTALL_FROM_STOCK.md.

4. HOST — save this router’s own backups before writing

The last block runs on ROUTER. Compare all seven backup hashes and sizes before proceeding.

mkdir -m 700 backups
for idx in 0 1 2 3 4 5 6; do
  ssh -o UserKnownHostsFile=./installer-known-hosts \
    -o StrictHostKeyChecking=accept-new [email protected] \
    "cat /dev/mtd$idx" > "backups/mtd$idx.bin" || break
done
wc -c backups/*.bin
sha256sum backups/*.bin
sha256sum /dev/mtd0 /dev/mtd1 /dev/mtd2 /dev/mtd3 \
  /dev/mtd4 /dev/mtd5 /dev/mtd6

5. ROUTER — download and verify the installation payload

mkdir -p /tmp/install
cd /tmp/install
wget http://10.42.0.1:8000/mtd-os0-install
wget http://10.42.0.1:8000/boot.jffs2
wget http://10.42.0.1:8000/rootfs.ubi
wget http://10.42.0.1:8000/SHA256SUMS
sha256sum -c SHA256SUMS
chmod +x mtd-os0-install
./mtd-os0-install --check boot.jffs2 rootfs.ubi
md5sum /dev/mtd0 /dev/mtd1 /dev/mtd3 /dev/mtd4 \
  /dev/mtd5 /dev/mtd6 > /tmp/protected.before

6. ROUTER — explicitly flash OS0, verify, then reboot

ERASES OS0. Require all checks to pass and OS0 hash to match install/OS0-SHA256.txt before reboot. On failure keep RAM installer running.

cd /tmp/install
sha256sum -c SHA256SUMS &&
./mtd-os0-install --write-os0 boot.jffs2 rootfs.ubi &&
sha256sum /dev/mtd2 &&
md5sum -c /tmp/protected.before

Expected /dev/mtd2 SHA256:

cc23f1632b0fa09f930394b4c55364d8cb9865b6a08ab94c001371041852f493

Only after every check passes:

sync
reboot

7. After reboot — LAN management and AP setup

Move Ethernet to LAN. DHCP hostname: archer-a10; fallback address: 10.42.0.185. LuCI: http://10.42.0.185/

ssh -o UserKnownHostsFile=./installed-known-hosts \
  -o StrictHostKeyChecking=accept-new [email protected]
cat /root/a10-wifi-password
passwd

APs: Archer-A10 / Archer-A10-5G; generated key above. Set correct country (default JP). Generic sysupgrade is disabled.

https://41j.com/blog/wp-content/uploads/2026/10/archer-a10-v2-port-with-images.tar-2.gz

Older version:

https://41j.com/blog/wp-content/uploads/2026/10/archer-a10-v2-port-with-images.tar-1.gz

TPLink Archer A10 JP V2.0 OpenWRT

I bought this router second hand today. ChatGPT Sol then ported OpenWRT across to it, everything seems to work fine.

If you want to replicate this on your own router it will require some work (mainly modification to bring in the stock wifi calibration). But this might help you get moving. ChatGPTs notes below!

This project brings up an experimental OpenWrt port on the TP-Link Archer A10 hardware revision V2. It has been tested on one router and is not an official OpenWrt release.

  ## Hardware

  • SoC: MediaTek MT7621, with 128 MiB RAM.

  • Flash: ESMT PSU1GA30DT, 128 MiB NAND; 128 KiB erase blocks, 2 KiB pages and 64-byte OOB.

  • Ethernet: MT7530 switch. Physical WAN corresponds to switch port 0; the four LAN sockets use ports 1–4.

  • Wi-Fi: Two MT7615 radios, used for 2.4 GHz and 5 GHz.

  • Bootloader: Vendor U-Boot 1.1.3, supporting TFTP RAM loading.

  • Firmware slots: Two 48 MiB slots, OS0 and OS1, with separate bootloader, environment and calibration partitions.

  ## What was done

  All non-overlapping stock partitions were backed up and checked against the device. Development began with a minimal, read-only NAND initramfs loaded through U-Boot over TFTP. RAM, NAND geometry,

  Ethernet and PCIe were validated before adding Wi-Fi using the router’s own calibration.

  The persistent boot format was reverse-engineered. The installed OS0 image contains a 4 MiB JFFS2 boot region followed by 44 MiB of UBI, holding a SquashFS root and writable UBIFS overlay. A guarded

  installer wrote OS0 and verified its complete contents. Protected partitions, including OS1 and calibration, matched their original backups afterward.

  The running system is based on OpenWrt v25.12.5 / Linux 6.12.94. Its final configuration provides:

  • LAN DHCP client, with the upstream connection through a LAN socket.

  • SSH and LuCI management on the leased address.

  • WPA2 APs on both bands, bridged to LAN.

  • No local DHCP server; clients receive addresses from the upstream network.

  Persistent boot, management access and automatic AP startup were verified after reboot. The owner confirmed AP client use and LuCI operation. Normal operation no longer requires UART.

  ## How to reproduce or adapt it

  1. Confirm the exact hardware revision. Back up your own router and establish UART/U-Boot recovery before changing flash.

  2. Extract the bundle and read source/PORTING_GUIDE.md. Clone the pinned OpenWrt revision, apply patches/archer-a10-v2.patch, and build the minimal RAM profile using config.source-toolchain.seed.

  3. Check the image header, DTB, addresses and partition protection. Boot the initramfs through the documented TFTP procedure and validate hardware incrementally.

  4. Use your own unit’s calibration for Wi-Fi. The included private Wi-Fi images contain the tested router’s calibration and local MAC addresses.

  5. Review PERSISTENT.md, INSTALL_CANDIDATE.md and RECOVERY.md before considering installation. The OS0 payload is not a stock web-upgrade or generic sysupgrade image.

  6. Follow OPERATING.md for the final AP/bridge configuration, then verify access after reboot.

  ## Limitations

  LuCI and the final AP/management settings were added to the installed overlay; they are not baked into the included original OS0 image, and a factory reset removes them. The later calibration-

  independent shared candidate has not been boot-tested. Generic sysupgrade, stock restoration, bad-block handling on other units, LEDs/buttons and long-term stability remain unfinished.

https://41j.com/blog/wp-content/uploads/2026/10/archer-a10-v2-porting-source.tar.gz

https://41j.com/blog/wp-content/uploads/2026/10/mt7621-backup.tar.gz

https://41j.com/blog/wp-content/uploads/2026/10/archer-a10-v2-port-with-images.tar.gz

Epson J300 GPS Watch Disassembly

C17V04001, F17377BCS

CC7541

7MA17, RM213

Display appears to be ET011TJ1