У меня проблем не было, но представим, что случились.
Чтоб попасть в u-boot, надо при начальной загрузке коммутатора, когда появиться соответствующее приглашение нажать любую клавишу.
Версия нашего загрузчика
u-boot> version
U-Boot 2012.10 (Nov 12 2018 - 15:51:08)VerNo=1.0.0.5
arm-linux-gcc (Broadcom Linux v3.6d) 4.7.2
GNU ld (Broadcom Linux v3.6d) 2.21.1
И так, посмотрим на переменные и скрипт загрузчика.
u-boot> env print
active=stk1
backup=stk2
baudrate=9600
board_id=465279.002
boardname=qsw
bootargs=console=ttyS0,9600n8 maxcpus=1 mem=496M root=/dev/ram rw envaddr=0x1e080000 mtdparts=spi1.0:512k(boot),256k(env),256k(vpd),3072k(reserved),29696k(stk1),29696k(stk2),2048k(config)
bootcmd=if test $active = stk1; then sf probe; sf read 0x61000000 0x00400000 0x01D00000;validate;if test $? -eq 0; then bootm 0x61000088;else echo STK1 validation failed.Booting STK2;sf read 0x61000000 0x02100000 0x01D00000;validate;if test $? -eq 0; then setenv active stk2; setenv backup stk1; save; bootm 0x61000088; fi;fi;else; sf probe; sf read 0x61000000 0x02100000 0x01D00000;validate;if test $? -eq 0; then bootm 0x61000088;else echo STK2 validation failed.Booting STK1;sf read 0x61000000 0x00400000 0x01D00000;validate;if test $? -eq 0; then setenv active stk1; setenv backup stk2; save; bootm 0x61000088; fi;fi;fi;
bootdelay=3
bootfile=uImage
ethact=bcmiproc_eth-0
fpboot=setenv bootargs ${bootargs}
loadaddr=0x61000000
stderr=serial
stdin=serial
stdout=serial
ver=U-Boot 2012.10 (Nov 12 2018 - 15:51:08)VerNo=1.0.0.5
Environment size: 1122/262140 bytes
По данному скрипту загрузка/восстановление выглядит таким образом (грубо):
Если активная прошивка stk1 Мы считываем из флешь памяти и проверяем активную прошивку, если проверку прошли то загружаем ее, если не прошли, считываем и проверяем бэкапную прошивку, если все хорошо, то меняем переменную определяющую, какая прошивка активная и сохраняем изменения, производим загрузку по адресу бэкапной прошивки. И на оборот, если активной стоит stk2
!детектируем установленную флешь память
u-boot> sf probe
spi_flash.c: Detected MX25L51245G with sector size 64 KiB, total 64 MiB
!считываем в память прошивку stk1 с флэшки
u-boot> sf read 0x61000000 0x00400000 0x01D00000;
!или считать в память прошивку stk2
u-boot>sf read 0x61000000 0x02100000 0x01D00000;
!запускаем процесс загрузки
u-boot> bootm 0x61000088;
Меняем значения переменных загрузчика
u-boot>setenv active stk1;
u-boot>setenv backup stk2;
!обязательно сохраняем значение переменных
u-boot>save;
Будет утрачена вся конфигурация коммутатора!
!детектируем установленную флешь память
u-boot> sf probe
spi_flash.c: Detected MX25L51245G with sector size 64 KiB, total 64 MiB
!Очищаем область памяти на флешь где храниться конфигурация коммутатора: 0x000003e00000-0x000004000000 : "config"
u-boot> sf erase 0x000003e00000 0x200000;
!перегружаемся
u-boot>reset;
Были попытки выдернуть конфигурационный файл, но ... данные файлы шифрованные.
Вот так примерно это должно выглядеть настройка u-boot для работы с TFTP из u-boot
!IP самого коммутатора
u-boot> setenv ipaddr 192.168.0.10
!маска сети
u-boot> setenv netmask 255.255.255.0
!адрес TFTP сервера
u-boot> setenv serverip 192.168.0.100
!шлюз
u-boot> setenv gatewayip 192.168.0.1
Далее делаем ping и получаем
ERROR: Ethernet external port not connected
at bcmiproc_eth.c:124/bcmiproc_eth_open()
решение пока не найдено. Т.е. через u-boot мы не можем обновить прошивку коммутатора, если вы испортите оба имеющихся образа, то пиши пропало. Есть возможность загрузки данных через консоль, но пока руки не дошли.