Netgear X10 (R9000)

I have no issues doing this, it would be the least I could do for OpenWRT community.
I mean if a config could be built with all packages then its just a matter of time per release.

Any idea where this could be put? I know there is an official place for factory and sysupgrade images but I have no idea how to get a release inside there.

It we get the switch stuff working then ill put another Dropbox link here.

Done:
image

I'm not very familiar with that, the problem is this is an unofficial hw and not sure whether OpenWRT will accept our packages and releases.

You can proceed with dumping of your NAND partitions.
All partitions are listed here: cat /proc/mtd. Just dump the first 4 partitions, the others contain just OpenWRT images.

I'll upload the uboot env in the meantime.

Just trying to figure out how to get the dump out of the router.
I have a USB Flash drive in it, but I cant recall how to mount stuff :smiley:

Edit: I cant post any more reply messages. Forum has limited me.
I am going to try the UBoot stuff and if it fails/works I wont be able to post a reply until after 14 hours according the the rules.

u-boot env script:

arch arm
autoload n
baudrate 115200
board alpine_hw29765235p0p512p1024p4x4p4x4_32_db
board_name alpine_hw29765235p0p512p1024p4x4p4x4_32_db
bootargs console=ttyS0,115200 pci=pcie_bus_perf earlycon
bootargshd run rootargshd; setenv bootargs $rootargs pci=pcie_bus_perf console=ttyS0,115200 $bootargsextra; printenv bootargs
bootargsnand run rootargsnand; setenv bootargs $rootargs pci=pcie_bus_perf console=ttyS0,115200 $bootargsextra; printenv bootargs
bootargsnfs run rootargsnfs; setenv bootargs $rootargs pci=pcie_bus_perf console=ttyS0,115200 $bootargsextra; printenv bootargs
bootcmd nmrp;run check_dni_image;run bootargsnand;qca8337_init_one; ledtoggle;sleep 1;run bootnand
bootdelay 2
bootext4 lcd_print "Loading OS...";scsi init; ext4load scsi ${ext4dev}:${ext4part} $loadaddr ${ext4dir}${dt_filename};if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr_dt $loadaddr;if test $? -ne 0; then run fail; exit; fi;fi;ext4load scsi ${ext4dev}:${ext4part} $loadaddr ${ext4dir}uImage;if test $? -ne 0; then run fail; exit; fi;fdt addr $loadaddr_dt;bootm $loadaddr - $fdtaddr;run fail; exit
bootnand lcd_print "Loading OS...";nand set_partition_offset $nand_pt_addr_kernel;nand read $loadaddr $nand_pt_addr_kernel 4;setenvmem filesize $loadaddr;incenv filesize 4;nand read $loadaddr $nand_pt_addr_kernel $filesize;ledtoggle;nand set_partition_offset $nand_pt_addr_al_boot;bootm $loadaddr_payload - $fdtaddr;lcd_print Failed!
bootnandmulti run kernel_select;if test $kernel_selected -ne 0; then run bootnand; fi
boottftp lcd_print "Loading OS...";tftpboot $loadaddr ${tftpdir}${dt_filename};if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr_dt $loadaddr;if test $? -ne 0; then run fail; exit; fi;fi;tftpboot $loadaddr ${tftpdir}uImage;if test $? -ne 0; then run fail; exit; fi;fdt addr $loadaddr_dt;bootm $loadaddr - $fdtaddr;run fail; exit
bootupd is_nand_boot; if test $? -eq 0; then run bootupdspi; else; run bootupdnand; fi
bootupdnand lcd_print "Updating al-boot" "to NAND"; tftpboot $loadaddr ${tftpdir}boot.img; if test $? -ne 0; then run fail; exit; fi;nand set_partition_offset $nand_pt_addr_al_boot;nand erase.spread $nand_pt_addr_al_boot $filesize; nand write $loadaddr $nand_pt_addr_al_boot $filesize; lcd_print "Done"
bootupdnandy lcd_print "Updating al-boot" "to NAND"; echo >> Use YModem to upload the boot image binary...;loady $loadaddr;if test $? -ne 0; then run fail; exit; fi;nand set_partition_offset $nand_pt_addr_al_boot;nand erase.spread $nand_pt_addr_al_boot $filesize; nand write $loadaddr $nand_pt_addr_al_boot $filesize; lcd_print "Done"
bootupdspi lcd_print "Updating al-boot" "to SPI"; tftpboot ${loadaddr} ${tftpdir}boot.img; if test $? -ne 0; then run fail; exit; fi;sf probe; sf erase 0 +${filesize}; sf write ${loadaddr} 0 ${filesize}; echo bootupd done;echo Notice: Changes in default environment variables will only take effect once the;echo environment variables are deleted from flash using the 'delenv' script;lcd_print "Done"
bootupdspiy lcd_print "Updating al-boot" "to SPI"; echo >> Use YModem to upload the boot image binary...;loady ${loadaddr};if test $? -ne 0; then run fail; exit; fi;sf probe; sf erase 0 +${filesize}; sf write ${loadaddr} 0 ${filesize}; echo bootupd done;echo Notice: Changes in default environment variables will only take effect once the;echo environment variables are deleted from flash using the 'delenv' script;lcd_print "Done"
bootupdy is_nand_boot; if test $? -eq 0; then run bootupdspiy;else; run bootupdnandy; fi
check_dni_image lcd_print "Loading DNI firmware for checking...";nand set_partition_offset $nand_pt_addr_kernel;ledtoggle;loadn_dniimg 0 $nand_pt_addr_kernel $loadaddr;ledtoggle;calc_rootaddr $nand_pt_addr_kernel $loadaddr;nand set_partition_offset $nand_pt_addr_al_boot;setenv kernel_addr_for_fw_checking $loadaddr;incenv kernel_addr_for_fw_checking 4;iminfo $kernel_addr_for_fw_checking;if test $? -ne 0; then echo "linux checksum error";fw_recovery; fi;ledtoggle;iminfo $rootfs_addr_for_fw_checking;if test $? -ne 0; then echo "rootfs checksum error";fw_recovery; fi;ledtoggle;lcd_print Failed!
cpu armv7
cvos_tags 0x01000000
cvos_tags_seed_a 0x01000004
cvos_tags_seed_b 0x01000008
cvos_tags_validate mw.l ${cvos_tags} 0xcf05cf05
delenv is_nand_boot; if test $? -eq 0; then run delenvspi; else; run delenvnand; fi
delenvnand lcd_print "Deleting env..."; nand erase ${env_offset} 2000; if test -n ${env_offset_redund}; then nand erase ${env_offset_redund} 2000; fi;lcd_print "Done"
delenvspi lcd_print "Deleting env..."; sf probe; sf erase ${env_offset} +2000;if test -n ${env_offset_redund}; then sf erase ${env_offset_redund} +2000;fi;lcd_print "Done"
dtupd is_nand_boot; if test $? -eq 0; then run dtupdspi; else; run dtupdnand; fi
dtupdnand lcd_print "Updating DT" "to NAND"; tftpboot $loadaddr_dt ${tftpdir}${dt_filename};if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;fi;nand set_partition_offset $nand_pt_addr_al_boot;nand erase.spread ${dt_location} 10000; nand write ${loadaddr_dt} ${dt_location} 10000; lcd_print "Done"
dtupdnandy lcd_print "Updating DT" "to NAND"; echo >> Use YModem to upload the device tree binary...;loady $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;fi;nand set_partition_offset $nand_pt_addr_al_boot;nand erase.spread ${dt_location} 10000; nand write ${loadaddr_dt} ${dt_location} 10000; lcd_print "Done"
dtupdspi lcd_print "Updating DT" "to SPI"; tftpboot $loadaddr_dt ${tftpdir}${dt_filename};if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;fi;sf probe; sf erase ${dt_location} +${filesize}; sf write ${loadaddr_dt} ${dt_location} ${filesize};echo dtupd done;lcd_print "Done"
dtupdspiy lcd_print "Updating DT" "to SPI"; echo >> Use YModem to upload the device tree binary...;loady $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;fi;sf probe; sf erase ${dt_location} +${filesize}; sf write ${loadaddr_dt} ${dt_location} ${filesize}; echo dtupd done;lcd_print "Done"
dtupdy is_nand_boot; if test $? -eq 0; then run dtupdspiy; else; run dtupdnandy; fi
eepromupd confirm_msg "Perform EEPROM update? [y/n] ";if test $? -ne 0; then exit; fi;tftpboot ${tftpdir}eeprom.bin;if test $? -ne 0; then exit; fi;i2c probe ${pld_i2c_addr};if test $? -ne 0; then exit; fi;i2c write $fileaddr ${pld_i2c_addr} 0.2 $filesize;if test $? -ne 0; then exit;fi;echo eepromupd done
eepromupdy confirm_msg "Perform EEPROM update? [y/n] ";if test $? -ne 0; then exit; fi;echo >> Use YModem to upload the EEPROM binary...;loady $loadaddr;if test $? -ne 0; then exit; fi;i2c probe ${pld_i2c_addr};if test $? -ne 0; then exit; fi;i2c write $loadaddr ${pld_i2c_addr} 0.2 $filesize;if test $? -ne 0; then exit;fi;echo eepromupdy done
eth1addr CC:40:D0:33:A1:36
eth3addr 8A:D0:A1:12:26:A5
ethact al_eth1
ethaddr CC:40:D0:33:A1:37
ethprime al_eth1
ext4dev 0
ext4dir boot/
ext4part 1
fail echo Failed!; lcd_print "Failed!"
hdroot /dev/sda1
iocc_force 1
iocc_force_val 1
ipaddr 192.168.1.1
kernel_rename_1 editenv nand_pt_desc_kernel_1;saveenv
kernel_rename_2 editenv nand_pt_desc_kernel_2;saveenv
kernel_select_1 setenv nand_pt_addr_kernel ${nand_pt_addr_kernel_1};setenv kernel_selected 1
kernel_select_2 setenv nand_pt_desc_kernel ${nand_pt_desc_kernel_2};setenv nand_pt_addr_kernel ${nand_pt_addr_kernel_2};setenv nand_pt_desc_kernel_2 ${nand_pt_desc_kernel_1};setenv nand_pt_addr_kernel_2 ${nand_pt_addr_kernel_1};setenv nand_pt_desc_kernel_1 ${nand_pt_desc_kernel};setenv nand_pt_addr_kernel_1 ${nand_pt_addr_kernel};saveenv;setenv kernel_selected 2
kernel_select setenv kernel_selected 0;setenv bootmenu_0 ${nand_pt_desc_kernel_1}=run kernel_select_1;setenv bootmenu_1 ${nand_pt_desc_kernel_2}=run kernel_select_2;bootmenu
kernelupd lcd_print "Updating kernel...";tftpboot $loadaddr_payload ${tftpdir}uImage;if test $? -ne 0; then run fail; exit; fi;nand set_partition_offset $nand_pt_addr_kernel;mw.l $loadaddr $filesize;incenv filesize 4;nand erase.spread $nand_pt_addr_kernel $filesize;nand write $loadaddr $nand_pt_addr_kernel $filesize;nand set_partition_offset $nand_pt_addr_al_boot;echo kernelupd done;lcd_print "Done"
loadaddr 0x08000000
loadaddr_dt 0x07000000
loadaddr_payload 0x08000004
loadaddr_rootfs_chk 0x07000000
nand_pt_addr_al_boot 0x0
nand_pt_addr_fs 0x01000000
nand_pt_addr_kernel 0x00580000
nand_pt_addr_kernel_1 0x00400000
nand_pt_addr_kernel_2 0x00a00000
nand_pt_desc_kernel_1 Test kernel A
nand_pt_desc_kernel_2 Test kernel B
nand_pt_size_fs 0x1f000000
nand_pt_size_kernel 0x00c00000
netmask 255.255.255.0
nfsrootdir /srv/root/
preboot 
rootargshd setenv rootargs root=${hdroot} rw
rootargsnand setenv rootargs root=ubi0:root rootfstype=ubifs ubi.mtd=3
rootargsnfs setenv rootargs root=/dev/nfs rw nfsroot=${serverip}:${nfsrootdir},tcp,nolock rw ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${board_name}:eth1:none
rootfsupd lcd_print "Updating rootfs...";tftpboot $loadaddr_rootfs_chk ${tftpdir}rootfs.ubi.md5;if test $? -ne 0; then run fail; exit; fi;tftpboot $loadaddr ${tftpdir}rootfs.ubi;if test $? -ne 0; then run fail; exit; fi;md5sum -v $loadaddr $filesize *$loadaddr_rootfs_chk;if test $? -ne 0; then run fail; exit; fi;nand set_partition_offset $nand_pt_addr_fs;nand erase.spread $nand_pt_addr_fs $nand_pt_size_fs;nand write $loadaddr $nand_pt_addr_fs $filesize;nand set_partition_offset $nand_pt_addr_al_boot;echo rootfsupd done;lcd_print "Done"
serverip 192.168.1.10
skip_eth_halt 0
soc alpine_hw29765235p0p512p1024p4x4p4x4
vendor annapurna-labs

Put this into a file, copy the file to the device and then run this:
fw_setenv --script <path to the file>
Then do NOT reboot yet.
Verify that the env can be read with fw_printenv.

1 Like

yes, mount and copy to USB or scp from it ?

a usb drive will usually appear as sda1.

mount /dev/sda1 /mnt

1 Like

This is crazy, i'm not able to build IPK file for a single package.
And found many forum posts complaining about this but no solution :rofl:
Apparently, wiki is obsolete in this regard.

Still not able to build nand-utils separately at all.

This doesn't work :rofl:

I think i got it now.
compile also installs the IPK of a package into bin.

1 Like

Testing my trust level.

Ah nice! Ok, I can reply again. This was 30 minutes wasted on trying to figure out a way to get around the limitation of my trust level.
Got it and done.

Next issue please.

Seems to work.
Output:

root@OpenWrt:/tmp/test# fw_printenv
baudrate=115200
arch=arm
autoload=n
board=alpine_hw29765235p0p512p1024p4x4p4x4_32_db
board_name=alpine_hw29765235p0p512p1024p4x4p4x4_32_db
bootargs=console=ttyS0,115200 pci=pcie_bus_perf earlycon
bootargshd=run rootargshd; setenv bootargs $rootargs pci=pcie_bus_perf console=ttyS0,115200 $bootargsextra; printenv bootargs
bootargsnand=run rootargsnand; setenv bootargs $rootargs pci=pcie_bus_perf console=ttyS0,115200 $bootargsextra; printenv bootargs
bootargsnfs=run rootargsnfs; setenv bootargs $rootargs pci=pcie_bus_perf console=ttyS0,115200 $bootargsextra; printenv bootargs
bootcmd=nmrp;run check_dni_image;run bootargsnand;qca8337_init_one; ledtoggle;sleep 1;run bootnand
bootdelay=2
bootext4=lcd_print "Loading OS...";scsi init; ext4load scsi ${ext4dev}:${ext4part} $loadaddr ${ext4dir}${dt_filename};if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr_dt $loadaddr;if test $? -ne 0; then run fail; exit; fi;fi;ext4load scsi ${ext4dev}:${ext4part} $loadaddr ${ext4dir}uImage;if test $? -ne 0; then run fail; exit; fi;fdt addr $loadaddr_dt;bootm $loadaddr - $fdtaddr;run fail; exit
bootnand=lcd_print "Loading OS...";nand set_partition_offset $nand_pt_addr_kernel;nand read $loadaddr $nand_pt_addr_kernel 4;setenvmem filesize $loadaddr;incenv filesize 4;nand read $loadaddr $nand_pt_addr_kernel $filesize;ledtoggle;nand set_partition_offset $nand_pt_addr_al_boot;bootm $loadaddr_payload - $fdtaddr;lcd_print Failed!
bootnandmulti=run kernel_select;if test $kernel_selected -ne 0; then run bootnand; fi
boottftp=lcd_print "Loading OS...";tftpboot $loadaddr ${tftpdir}${dt_filename};if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr_dt $loadaddr;if test $? -ne 0; then run fail; exit; fi;fi;tftpboot $loadaddr ${tftpdir}uImage;if test $? -ne 0; then run fail; exit; fi;fdt addr $loadaddr_dt;bootm $loadaddr - $fdtaddr;run fail; exit
bootupd=is_nand_boot; if test $? -eq 0; then run bootupdspi; else; run bootupdnand; fi
bootupdnand=lcd_print "Updating al-boot" "to NAND"; tftpboot $loadaddr ${tftpdir}boot.img; if test $? -ne 0; then run fail; exit; fi;nand set_partition_offset $nand_pt_addr_al_boot;nand erase.spread $nand_pt_addr_al_boot $filesize; nand write $loadaddr $nand_pt_addr_al_boot $filesize; lcd_print "Done"
bootupdnandy=lcd_print "Updating al-boot" "to NAND"; echo >> Use YModem to upload the boot image binary...;loady $loadaddr;if test $? -ne 0; then run fail; exit; fi;nand set_partition_offset $nand_pt_addr_al_boot;nand erase.spread $nand_pt_addr_al_boot $filesize; nand write $loadaddr $nand_pt_addr_al_boot $filesize; lcd_print "Done"
bootupdspi=lcd_print "Updating al-boot" "to SPI"; tftpboot ${loadaddr} ${tftpdir}boot.img; if test $? -ne 0; then run fail; exit; fi;sf probe; sf erase 0 +${filesize}; sf write ${loadaddr} 0 ${filesize}; echo bootupd done;echo Notice: Changes in default environment variables will only take effect once the;echo environment variables are deleted from flash using the 'delenv' script;lcd_print "Done"
bootupdspiy=lcd_print "Updating al-boot" "to SPI"; echo >> Use YModem to upload the boot image binary...;loady ${loadaddr};if test $? -ne 0; then run fail; exit; fi;sf probe; sf erase 0 +${filesize}; sf write ${loadaddr} 0 ${filesize}; echo bootupd done;echo Notice: Changes in default environment variables will only take effect once the;echo environment variables are deleted from flash using the 'delenv' script;lcd_print "Done"
bootupdy=is_nand_boot; if test $? -eq 0; then run bootupdspiy;else; run bootupdnandy; fi
check_dni_image=lcd_print "Loading DNI firmware for checking...";nand set_partition_offset $nand_pt_addr_kernel;ledtoggle;loadn_dniimg 0 $nand_pt_addr_kernel $loadaddr;ledtoggle;calc_rootaddr $nand_pt_addr_kernel $loadaddr;nand set_partition_offset $nand_pt_addr_al_boot;setenv kernel_addr_for_fw_checking $loadaddr;incenv kernel_addr_for_fw_checking 4;iminfo $kernel_addr_for_fw_checking;if test $? -ne 0; then echo "linux checksum error";fw_recovery; fi;ledtoggle;iminfo $rootfs_addr_for_fw_checking;if test $? -ne 0; then echo "rootfs checksum error";fw_recovery; fi;ledtoggle;lcd_print Failed!
cpu=armv7
cvos_tags=0x01000000
cvos_tags_seed_a=0x01000004
cvos_tags_seed_b=0x01000008
cvos_tags_validate=mw.l ${cvos_tags} 0xcf05cf05
delenv=is_nand_boot; if test $? -eq 0; then run delenvspi; else; run delenvnand; fi
delenvnand=lcd_print "Deleting env..."; nand erase ${env_offset} 2000; if test -n ${env_offset_redund}; then nand erase ${env_offset_redund} 2000; fi;lcd_print "Done"
delenvspi=lcd_print "Deleting env..."; sf probe; sf erase ${env_offset} +2000;if test -n ${env_offset_redund}; then sf erase ${env_offset_redund} +2000;fi;lcd_print "Done"
dtupd=is_nand_boot; if test $? -eq 0; then run dtupdspi; else; run dtupdnand; fi
dtupdnand=lcd_print "Updating DT" "to NAND"; tftpboot $loadaddr_dt ${tftpdir}${dt_filename};if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;fi;nand set_partition_offset $nand_pt_addr_al_boot;nand erase.spread ${dt_location} 10000; nand write ${loadaddr_dt} ${dt_location} 10000; lcd_print "Done"
dtupdnandy=lcd_print "Updating DT" "to NAND"; echo >> Use YModem to upload the device tree binary...;loady $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;fi;nand set_partition_offset $nand_pt_addr_al_boot;nand erase.spread ${dt_location} 10000; nand write ${loadaddr_dt} ${dt_location} 10000; lcd_print "Done"
dtupdspi=lcd_print "Updating DT" "to SPI"; tftpboot $loadaddr_dt ${tftpdir}${dt_filename};if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;fi;sf probe; sf erase ${dt_location} +${filesize}; sf write ${loadaddr_dt} ${dt_location} ${filesize};echo dtupd done;lcd_print "Done"
dtupdspiy=lcd_print "Updating DT" "to SPI"; echo >> Use YModem to upload the device tree binary...;loady $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;fi;sf probe; sf erase ${dt_location} +${filesize}; sf write ${loadaddr_dt} ${dt_location} ${filesize}; echo dtupd done;lcd_print "Done"
dtupdy=is_nand_boot; if test $? -eq 0; then run dtupdspiy; else; run dtupdnandy; fi
eepromupd=confirm_msg "Perform EEPROM update? [y/n] ";if test $? -ne 0; then exit; fi;tftpboot ${tftpdir}eeprom.bin;if test $? -ne 0; then exit; fi;i2c probe ${pld_i2c_addr};if test $? -ne 0; then exit; fi;i2c write $fileaddr ${pld_i2c_addr} 0.2 $filesize;if test $? -ne 0; then exit;fi;echo eepromupd done
eepromupdy=confirm_msg "Perform EEPROM update? [y/n] ";if test $? -ne 0; then exit; fi;echo >> Use YModem to upload the EEPROM binary...;loady $loadaddr;if test $? -ne 0; then exit; fi;i2c probe ${pld_i2c_addr};if test $? -ne 0; then exit; fi;i2c write $loadaddr ${pld_i2c_addr} 0.2 $filesize;if test $? -ne 0; then exit;fi;echo eepromupdy done
eth1addr=CC:40:D0:33:A1:36
eth3addr=8A:D0:A1:12:26:A5
ethact=al_eth1
ethaddr=CC:40:D0:33:A1:37
ethprime=al_eth1
ext4dev=0
ext4dir=boot/
ext4part=1
fail=echo Failed!; lcd_print "Failed!"
hdroot=/dev/sda1
iocc_force=1
iocc_force_val=1
ipaddr=192.168.1.1
kernel_rename_1=editenv nand_pt_desc_kernel_1;saveenv
kernel_rename_2=editenv nand_pt_desc_kernel_2;saveenv
kernel_select_1=setenv nand_pt_addr_kernel ${nand_pt_addr_kernel_1};setenv kernel_selected 1
kernel_select_2=setenv nand_pt_desc_kernel ${nand_pt_desc_kernel_2};setenv nand_pt_addr_kernel ${nand_pt_addr_kernel_2};setenv nand_pt_desc_kernel_2 ${nand_pt_desc_kernel_1};setenv nand_pt_addr_kernel_2 ${nand_pt_addr_kernel_1};setenv nand_pt_desc_kernel_1 ${nand_pt_desc_kernel};setenv nand_pt_addr_kernel_1 ${nand_pt_addr_kernel};saveenv;setenv kernel_selected 2
kernel_select=setenv kernel_selected 0;setenv bootmenu_0 ${nand_pt_desc_kernel_1}=run kernel_select_1;setenv bootmenu_1 ${nand_pt_desc_kernel_2}=run kernel_select_2;bootmenu
kernelupd=lcd_print "Updating kernel...";tftpboot $loadaddr_payload ${tftpdir}uImage;if test $? -ne 0; then run fail; exit; fi;nand set_partition_offset $nand_pt_addr_kernel;mw.l $loadaddr $filesize;incenv filesize 4;nand erase.spread $nand_pt_addr_kernel $filesize;nand write $loadaddr $nand_pt_addr_kernel $filesize;nand set_partition_offset $nand_pt_addr_al_boot;echo kernelupd done;lcd_print "Done"
loadaddr=0x08000000
loadaddr_dt=0x07000000
loadaddr_payload=0x08000004
loadaddr_rootfs_chk=0x07000000
nand_pt_addr_al_boot=0x0
nand_pt_addr_fs=0x01000000
nand_pt_addr_kernel=0x00580000
nand_pt_addr_kernel_1=0x00400000
nand_pt_addr_kernel_2=0x00a00000
nand_pt_desc_kernel_1=Test kernel A
nand_pt_desc_kernel_2=Test kernel B
nand_pt_size_fs=0x1f000000
nand_pt_size_kernel=0x00c00000
netmask=255.255.255.0
nfsrootdir=/srv/root/
rootargshd=setenv rootargs root=${hdroot} rw
rootargsnand=setenv rootargs root=ubi0:root rootfstype=ubifs ubi.mtd=3
rootargsnfs=setenv rootargs root=/dev/nfs rw nfsroot=${serverip}:${nfsrootdir},tcp,nolock rw ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${board_name}:eth1:none
rootfsupd=lcd_print "Updating rootfs...";tftpboot $loadaddr_rootfs_chk ${tftpdir}rootfs.ubi.md5;if test $? -ne 0; then run fail; exit; fi;tftpboot $loadaddr ${tftpdir}rootfs.ubi;if test $? -ne 0; then run fail; exit; fi;md5sum -v $loadaddr $filesize *$loadaddr_rootfs_chk;if test $? -ne 0; then run fail; exit; fi;nand set_partition_offset $nand_pt_addr_fs;nand erase.spread $nand_pt_addr_fs $nand_pt_size_fs;nand write $loadaddr $nand_pt_addr_fs $filesize;nand set_partition_offset $nand_pt_addr_al_boot;echo rootfsupd done;lcd_print "Done"
serverip=192.168.1.10
skip_eth_halt=0
soc=alpine_hw29765235p0p512p1024p4x4p4x4
vendor=annapurna-labs

Can I reboot?

the output looks ok.
yes, please, and send a prayer :slight_smile:

How to build nand-utils.
First select it in the menuconfig.
Then do this:

make V=s -j$(($(nproc)+1)) package/utils/mtd-utils/clean
make V=s -j$(($(nproc)+1)) package/utils/mtd-utils/compile
ls -l bin/targets/alpine/generic/packages/nand-utils*.ipk

It booted fine..... but DHCP leaked.
Luci is up and reconnecting the ethernet cable resulted in expected DHCP address.

First step is success then. Not done yet.
We didn't remove switch setup from u-boot env yet. Now the next step.

We need to modify this line:
bootcmd nmrp;run check_dni_image;run bootargsnand;qca8337_init_one; ledtoggle;sleep 1;run bootnand

And remove qca8337_init_one.

The line becomes this:
bootcmd nmrp;run check_dni_image;run bootargsnand;ledtoggle;sleep 1;run bootnand

Use this:

fw_setenv bootcmd 'nmrp;run check_dni_image;run bootargsnand; ledtoggle;sleep 1;run bootnand'

Then verify with fw_printenv that qca8337_init_one is not present within bootcmd.

After that command the line ended up at the bottom. Is that ok?

root@OpenWrt:/tmp# fw_printenv
baudrate=115200
arch=arm
autoload=n
board=alpine_hw29765235p0p512p1024p4x4p4x4_32_db
board_name=alpine_hw29765235p0p512p1024p4x4p4x4_32_db
bootargs=console=ttyS0,115200 pci=pcie_bus_perf earlycon
bootargshd=run rootargshd; setenv bootargs $rootargs pci=pcie_bus_perf console=ttyS0,115200 $bootargsextra; printenv bootargs
bootargsnand=run rootargsnand; setenv bootargs $rootargs pci=pcie_bus_perf console=ttyS0,115200 $bootargsextra; printenv bootargs
bootargsnfs=run rootargsnfs; setenv bootargs $rootargs pci=pcie_bus_perf console=ttyS0,115200 $bootargsextra; printenv bootargs
bootdelay=2
bootext4=lcd_print "Loading OS...";scsi init; ext4load scsi ${ext4dev}:${ext4part} $loadaddr ${ext4dir}${dt_filename};if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr_dt $loadaddr;if test $? -ne 0; then run fail; exit; fi;fi;ext4load scsi ${ext4dev}:${ext4part} $loadaddr ${ext4dir}uImage;if test $? -ne 0; then run fail; exit; fi;fdt addr $loadaddr_dt;bootm $loadaddr - $fdtaddr;run fail; exit
bootnand=lcd_print "Loading OS...";nand set_partition_offset $nand_pt_addr_kernel;nand read $loadaddr $nand_pt_addr_kernel 4;setenvmem filesize $loadaddr;incenv filesize 4;nand read $loadaddr $nand_pt_addr_kernel $filesize;ledtoggle;nand set_partition_offset $nand_pt_addr_al_boot;bootm $loadaddr_payload - $fdtaddr;lcd_print Failed!
bootnandmulti=run kernel_select;if test $kernel_selected -ne 0; then run bootnand; fi
boottftp=lcd_print "Loading OS...";tftpboot $loadaddr ${tftpdir}${dt_filename};if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr_dt $loadaddr;if test $? -ne 0; then run fail; exit; fi;fi;tftpboot $loadaddr ${tftpdir}uImage;if test $? -ne 0; then run fail; exit; fi;fdt addr $loadaddr_dt;bootm $loadaddr - $fdtaddr;run fail; exit
bootupd=is_nand_boot; if test $? -eq 0; then run bootupdspi; else; run bootupdnand; fi
bootupdnand=lcd_print "Updating al-boot" "to NAND"; tftpboot $loadaddr ${tftpdir}boot.img; if test $? -ne 0; then run fail; exit; fi;nand set_partition_offset $nand_pt_addr_al_boot;nand erase.spread $nand_pt_addr_al_boot $filesize; nand write $loadaddr $nand_pt_addr_al_boot $filesize; lcd_print "Done"
bootupdnandy=lcd_print "Updating al-boot" "to NAND"; echo >> Use YModem to upload the boot image binary...;loady $loadaddr;if test $? -ne 0; then run fail; exit; fi;nand set_partition_offset $nand_pt_addr_al_boot;nand erase.spread $nand_pt_addr_al_boot $filesize; nand write $loadaddr $nand_pt_addr_al_boot $filesize; lcd_print "Done"
bootupdspi=lcd_print "Updating al-boot" "to SPI"; tftpboot ${loadaddr} ${tftpdir}boot.img; if test $? -ne 0; then run fail; exit; fi;sf probe; sf erase 0 +${filesize}; sf write ${loadaddr} 0 ${filesize}; echo bootupd done;echo Notice: Changes in default environment variables will only take effect once the;echo environment variables are deleted from flash using the 'delenv' script;lcd_print "Done"
bootupdspiy=lcd_print "Updating al-boot" "to SPI"; echo >> Use YModem to upload the boot image binary...;loady ${loadaddr};if test $? -ne 0; then run fail; exit; fi;sf probe; sf erase 0 +${filesize}; sf write ${loadaddr} 0 ${filesize}; echo bootupd done;echo Notice: Changes in default environment variables will only take effect once the;echo environment variables are deleted from flash using the 'delenv' script;lcd_print "Done"
bootupdy=is_nand_boot; if test $? -eq 0; then run bootupdspiy;else; run bootupdnandy; fi
check_dni_image=lcd_print "Loading DNI firmware for checking...";nand set_partition_offset $nand_pt_addr_kernel;ledtoggle;loadn_dniimg 0 $nand_pt_addr_kernel $loadaddr;ledtoggle;calc_rootaddr $nand_pt_addr_kernel $loadaddr;nand set_partition_offset $nand_pt_addr_al_boot;setenv kernel_addr_for_fw_checking $loadaddr;incenv kernel_addr_for_fw_checking 4;iminfo $kernel_addr_for_fw_checking;if test $? -ne 0; then echo "linux checksum error";fw_recovery; fi;ledtoggle;iminfo $rootfs_addr_for_fw_checking;if test $? -ne 0; then echo "rootfs checksum error";fw_recovery; fi;ledtoggle;lcd_print Failed!
cpu=armv7
cvos_tags=0x01000000
cvos_tags_seed_a=0x01000004
cvos_tags_seed_b=0x01000008
cvos_tags_validate=mw.l ${cvos_tags} 0xcf05cf05
delenv=is_nand_boot; if test $? -eq 0; then run delenvspi; else; run delenvnand; fi
delenvnand=lcd_print "Deleting env..."; nand erase ${env_offset} 2000; if test -n ${env_offset_redund}; then nand erase ${env_offset_redund} 2000; fi;lcd_print "Done"
delenvspi=lcd_print "Deleting env..."; sf probe; sf erase ${env_offset} +2000;if test -n ${env_offset_redund}; then sf erase ${env_offset_redund} +2000;fi;lcd_print "Done"
dtupd=is_nand_boot; if test $? -eq 0; then run dtupdspi; else; run dtupdnand; fi
dtupdnand=lcd_print "Updating DT" "to NAND"; tftpboot $loadaddr_dt ${tftpdir}${dt_filename};if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;fi;nand set_partition_offset $nand_pt_addr_al_boot;nand erase.spread ${dt_location} 10000; nand write ${loadaddr_dt} ${dt_location} 10000; lcd_print "Done"
dtupdnandy=lcd_print "Updating DT" "to NAND"; echo >> Use YModem to upload the device tree binary...;loady $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;fi;nand set_partition_offset $nand_pt_addr_al_boot;nand erase.spread ${dt_location} 10000; nand write ${loadaddr_dt} ${dt_location} 10000; lcd_print "Done"
dtupdspi=lcd_print "Updating DT" "to SPI"; tftpboot $loadaddr_dt ${tftpdir}${dt_filename};if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;fi;sf probe; sf erase ${dt_location} +${filesize}; sf write ${loadaddr_dt} ${dt_location} ${filesize};echo dtupd done;lcd_print "Done"
dtupdspiy=lcd_print "Updating DT" "to SPI"; echo >> Use YModem to upload the device tree binary...;loady $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;if test ${dt_is_from_toc} != 1; then; else flash_contents_obj_read_mem $loadaddr $loadaddr_dt;if test $? -ne 0; then run fail; exit; fi;fi;sf probe; sf erase ${dt_location} +${filesize}; sf write ${loadaddr_dt} ${dt_location} ${filesize}; echo dtupd done;lcd_print "Done"
dtupdy=is_nand_boot; if test $? -eq 0; then run dtupdspiy; else; run dtupdnandy; fi
eepromupd=confirm_msg "Perform EEPROM update? [y/n] ";if test $? -ne 0; then exit; fi;tftpboot ${tftpdir}eeprom.bin;if test $? -ne 0; then exit; fi;i2c probe ${pld_i2c_addr};if test $? -ne 0; then exit; fi;i2c write $fileaddr ${pld_i2c_addr} 0.2 $filesize;if test $? -ne 0; then exit;fi;echo eepromupd done
eepromupdy=confirm_msg "Perform EEPROM update? [y/n] ";if test $? -ne 0; then exit; fi;echo >> Use YModem to upload the EEPROM binary...;loady $loadaddr;if test $? -ne 0; then exit; fi;i2c probe ${pld_i2c_addr};if test $? -ne 0; then exit; fi;i2c write $loadaddr ${pld_i2c_addr} 0.2 $filesize;if test $? -ne 0; then exit;fi;echo eepromupdy done
eth1addr=CC:40:D0:33:A1:36
eth3addr=8A:D0:A1:12:26:A5
ethact=al_eth1
ethaddr=CC:40:D0:33:A1:37
ethprime=al_eth1
ext4dev=0
ext4dir=boot/
ext4part=1
fail=echo Failed!; lcd_print "Failed!"
hdroot=/dev/sda1
iocc_force=1
iocc_force_val=1
ipaddr=192.168.1.1
kernel_rename_1=editenv nand_pt_desc_kernel_1;saveenv
kernel_rename_2=editenv nand_pt_desc_kernel_2;saveenv
kernel_select_1=setenv nand_pt_addr_kernel ${nand_pt_addr_kernel_1};setenv kernel_selected 1
kernel_select_2=setenv nand_pt_desc_kernel ${nand_pt_desc_kernel_2};setenv nand_pt_addr_kernel ${nand_pt_addr_kernel_2};setenv nand_pt_desc_kernel_2 ${nand_pt_desc_kernel_1};setenv nand_pt_addr_kernel_2 ${nand_pt_addr_kernel_1};setenv nand_pt_desc_kernel_1 ${nand_pt_desc_kernel};setenv nand_pt_addr_kernel_1 ${nand_pt_addr_kernel};saveenv;setenv kernel_selected 2
kernel_select=setenv kernel_selected 0;setenv bootmenu_0 ${nand_pt_desc_kernel_1}=run kernel_select_1;setenv bootmenu_1 ${nand_pt_desc_kernel_2}=run kernel_select_2;bootmenu
kernelupd=lcd_print "Updating kernel...";tftpboot $loadaddr_payload ${tftpdir}uImage;if test $? -ne 0; then run fail; exit; fi;nand set_partition_offset $nand_pt_addr_kernel;mw.l $loadaddr $filesize;incenv filesize 4;nand erase.spread $nand_pt_addr_kernel $filesize;nand write $loadaddr $nand_pt_addr_kernel $filesize;nand set_partition_offset $nand_pt_addr_al_boot;echo kernelupd done;lcd_print "Done"
loadaddr=0x08000000
loadaddr_dt=0x07000000
loadaddr_payload=0x08000004
loadaddr_rootfs_chk=0x07000000
nand_pt_addr_al_boot=0x0
nand_pt_addr_fs=0x01000000
nand_pt_addr_kernel=0x00580000
nand_pt_addr_kernel_1=0x00400000
nand_pt_addr_kernel_2=0x00a00000
nand_pt_desc_kernel_1=Test kernel A
nand_pt_desc_kernel_2=Test kernel B
nand_pt_size_fs=0x1f000000
nand_pt_size_kernel=0x00c00000
netmask=255.255.255.0
nfsrootdir=/srv/root/
rootargshd=setenv rootargs root=${hdroot} rw
rootargsnand=setenv rootargs root=ubi0:root rootfstype=ubifs ubi.mtd=3
rootargsnfs=setenv rootargs root=/dev/nfs rw nfsroot=${serverip}:${nfsrootdir},tcp,nolock rw ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${board_name}:eth1:none
rootfsupd=lcd_print "Updating rootfs...";tftpboot $loadaddr_rootfs_chk ${tftpdir}rootfs.ubi.md5;if test $? -ne 0; then run fail; exit; fi;tftpboot $loadaddr ${tftpdir}rootfs.ubi;if test $? -ne 0; then run fail; exit; fi;md5sum -v $loadaddr $filesize *$loadaddr_rootfs_chk;if test $? -ne 0; then run fail; exit; fi;nand set_partition_offset $nand_pt_addr_fs;nand erase.spread $nand_pt_addr_fs $nand_pt_size_fs;nand write $loadaddr $nand_pt_addr_fs $filesize;nand set_partition_offset $nand_pt_addr_al_boot;echo rootfsupd done;lcd_print "Done"
serverip=192.168.1.10
skip_eth_halt=0
soc=alpine_hw29765235p0p512p1024p4x4p4x4
vendor=annapurna-labs
bootcmd=nmrp;run check_dni_image;run bootargsnand; ledtoggle;sleep 1;run bootnand

yes, that's normal after an update.

Reboot time I assume?

Yeah, I'm going for it!

Edit: No change. DHCP still leaked. Reconnecting ethernet again resolved it.
Luci is up.

1 Like

Ok, then this was not the reason. I suspect that u-boot enables switches before even booting OpenWRT because it needs Ethernet for NMRP.

Would be great if you could stop your device in u-boot and then check whether DHCP still leaks.

We could also temporarily remove nmrp from bootcmd and test. After the test, you can add it again now that your uboot env changing works on OpenWRT :slight_smile:

And for that I need to cable.
I'll see what I need for making one tomorrow.

Thank you.

Here is the latest build link:
openwrt-alpine-generic-netgear_r9000-squashfs-factory.img
openwrt-alpine-generic-netgear_r9000-squashfs-sysupgrade.bin

2 Likes

Ah yes, nmrp could perhaps be causing this.
But I am not too convinced for one reason.

When the router boots I can see first one DHCP leak for a short period of time, I assume this to be nmrp. It only lasts for about 1 second or so then the ethernet cable disconnects and DHCP lease resets.
Then it takes much longer for the next leak to come and this time it is permanent until the lease expires.

hmm, this is a good hint. my guess is then that it takes very long between switch activation by openwrt driver and switch setup from /etc/config/network. maybe i could setup switch in such a way that is disabled until the config is applied, somehow.

i‘ll test it on my device and if i have something worked out, will report here.

1 Like