{"id":8280,"date":"2026-10-09T00:29:21","date_gmt":"2026-10-09T00:29:21","guid":{"rendered":"https:\/\/41j.com\/blog\/?p=8280"},"modified":"2026-10-09T00:29:22","modified_gmt":"2026-10-09T00:29:22","slug":"archer-a10-v2-0-jp-openwrt","status":"publish","type":"post","link":"https:\/\/41j.com\/blog\/2026\/10\/archer-a10-v2-0-jp-openwrt\/","title":{"rendered":"Archer A10 V2.0 JP OpenWRT"},"content":{"rendered":"\n<p>This is an update to the bundle posted yesterday.<\/p>\n\n\n\n<p>The install bundle requires UART access which is pretty easy. RX\/TX are the pins nearest the side of the case of the left.<\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>Here&#8217;s the overly verbose approach Codex made&#8230; files below.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Installation command sheet<\/h1>\n\n\n\n<p>Use the <strong>binary release bundle<\/strong>, Linux, 3.3 V UART and isolated Ethernet.<br>Connect Ethernet to WAN initially. Connect UART GND\/RX\/TX with TX\/RX crossed; do not connect the adapter&#8217;s power pin. Substitute <code>enp3s0<\/code> and <code>\/dev\/ttyUSB0<\/code>.<br>Read INSTALL_FROM_STOCK.md for expected model\/partition sizes and failure handling.<br>The exact new installer and pristine-overlay installation have not been hardware-tested.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. HOST \u2014 prepare Ethernet, UART and servers<\/h2>\n\n\n\n<p>Run UART, TFTP and HTTP servers in separate terminals; leave servers running.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ntar -xzf archer-a10-v2-port-with-images.tar.gz\ncd archer-a10-v2-port\nsha256sum -c SHA256SUMS\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo apt install tftpd-hpa picocom python3 openssh-client\nsudo systemctl stop tftpd-hpa\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nWIRED_INTERFACE=enp3s0\nsudo ip link set &quot;$WIRED_INTERFACE&quot; up\nsudo ip addr replace 10.42.0.1\/24 dev &quot;$WIRED_INTERFACE&quot;\npicocom -b 115200 \/dev\/ttyUSB0\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo in.tftpd --listen --foreground --address 10.42.0.1:69 \\\n  --secure &quot;$PWD\/install\/tftp&quot;\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npython3 -m http.server 8000 --bind 10.42.0.1 --directory install\/payload\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">2. UART\/U-BOOT \u2014 load OpenWrt into RAM<\/h2>\n\n\n\n<p>Select boot menu 4. Require image_boot=0, image_copy=1. Wait for complete TFTP transfer before bootm. Never saveenv.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nprintenv image_boot image_copy\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsetenv autostart no\nsetenv autoscript no\nsetenv ipaddr 10.42.0.185\nsetenv serverip 10.42.0.1\ntftpboot 0x84000000 archer-a10-v2-stock-installer-ram.bin\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nbootm 0x84000000\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">3. ROUTER \u2014 establish Ethernet and verify the installer<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nubus call system board\ncat \/proc\/mtd\nip link show\nip addr add 10.42.0.185\/24 dev br-lan\nping -c 3 10.42.0.1\n<\/pre><\/div>\n\n\n<p>The model must be <code>TP-Link Archer A10 v2 (OS0-only installer RAM environment)<\/code> and rootfs must be <code>initramfs<\/code>. Verify the partition map against INSTALL_FROM_STOCK.md.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. HOST \u2014 save this router&#8217;s own backups before writing<\/h2>\n\n\n\n<p>The last block runs on ROUTER. Compare all seven backup hashes and sizes before proceeding.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nmkdir -m 700 backups\nfor idx in 0 1 2 3 4 5 6; do\n  ssh -o UserKnownHostsFile=.\/installer-known-hosts \\\n    -o StrictHostKeyChecking=accept-new root@10.42.0.185 \\\n    &quot;cat \/dev\/mtd$idx&quot; &gt; &quot;backups\/mtd$idx.bin&quot; || break\ndone\nwc -c backups\/*.bin\nsha256sum backups\/*.bin\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsha256sum \/dev\/mtd0 \/dev\/mtd1 \/dev\/mtd2 \/dev\/mtd3 \\\n  \/dev\/mtd4 \/dev\/mtd5 \/dev\/mtd6\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">5. ROUTER \u2014 download and verify the installation payload<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nmkdir -p \/tmp\/install\ncd \/tmp\/install\nwget http:\/\/10.42.0.1:8000\/mtd-os0-install\nwget http:\/\/10.42.0.1:8000\/boot.jffs2\nwget http:\/\/10.42.0.1:8000\/rootfs.ubi\nwget http:\/\/10.42.0.1:8000\/SHA256SUMS\nsha256sum -c SHA256SUMS\nchmod +x mtd-os0-install\n.\/mtd-os0-install --check boot.jffs2 rootfs.ubi\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nmd5sum \/dev\/mtd0 \/dev\/mtd1 \/dev\/mtd3 \/dev\/mtd4 \\\n  \/dev\/mtd5 \/dev\/mtd6 &gt; \/tmp\/protected.before\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">6. ROUTER \u2014 explicitly flash OS0, verify, then reboot<\/h2>\n\n\n\n<p><strong>ERASES OS0.<\/strong> Require all checks to pass and OS0 hash to match install\/OS0-SHA256.txt before reboot. On failure keep RAM installer running.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncd \/tmp\/install\nsha256sum -c SHA256SUMS &amp;amp;&amp;amp;\n.\/mtd-os0-install --write-os0 boot.jffs2 rootfs.ubi &amp;amp;&amp;amp;\nsha256sum \/dev\/mtd2 &amp;amp;&amp;amp;\nmd5sum -c \/tmp\/protected.before\n<\/pre><\/div>\n\n\n<p>Expected <code>\/dev\/mtd2<\/code> SHA256:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncc23f1632b0fa09f930394b4c55364d8cb9865b6a08ab94c001371041852f493\n<\/pre><\/div>\n\n\n<p>Only after every check passes:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsync\nreboot\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">7. After reboot \u2014 LAN management and AP setup<\/h2>\n\n\n\n<p>Move Ethernet to LAN. DHCP hostname: archer-a10; fallback address: 10.42.0.185. LuCI: http:\/\/10.42.0.185\/<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nssh -o UserKnownHostsFile=.\/installed-known-hosts \\\n  -o StrictHostKeyChecking=accept-new root@10.42.0.185\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncat \/root\/a10-wifi-password\npasswd\n<\/pre><\/div>\n\n\n<p>APs: Archer-A10 \/ Archer-A10-5G; generated key above. Set correct country (default JP). Generic sysupgrade is disabled.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><a href=\"https:\/\/41j.com\/blog\/wp-content\/uploads\/2026\/10\/archer-a10-v2-port-with-images.tar-2.gz\">https:\/\/41j.com\/blog\/wp-content\/uploads\/2026\/10\/archer-a10-v2-port-with-images.tar-2.gz<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Older version:<\/p>\n\n\n\n<p><a href=\"https:\/\/41j.com\/blog\/wp-content\/uploads\/2026\/10\/archer-a10-v2-port-with-images.tar-1.gz\">https:\/\/41j.com\/blog\/wp-content\/uploads\/2026\/10\/archer-a10-v2-port-with-images.tar-1.gz<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>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 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-8280","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1RRoU-29y","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/posts\/8280","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/comments?post=8280"}],"version-history":[{"count":1,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/posts\/8280\/revisions"}],"predecessor-version":[{"id":8283,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/posts\/8280\/revisions\/8283"}],"wp:attachment":[{"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/media?parent=8280"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/categories?post=8280"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/tags?post=8280"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}