LINUX.ORG.RU

Перепрошивка SheevaPlug

 ,


0

1

Доброго всем времени суток

Есть у меня железка SheevaPlug, надо её перепрошить самосборным дистрибутивом линукса. Для этого я скачал sheevaplug_installer с сайта производителя, открыл файл HOWTO_BUILD.txt и пошёл компилять по пунктам OpenOCD Linux, получил бинарник /usr/local/bin/openocd создал в папке sheevaplug-installer-v1.0/uboot/openocd симлинк на него вместо старого файла, запускаю sudo php runme.php nand, на что получаю

**** exec(modprobe ftdi_sio vendor=0x9e88 product=0x9e8f)
**** Preparing environment variables file ...
reading uboot/uboot-env/uboot-dflt.txt
uboot/uboot-env/fw_setenv baudrate 115200
CRC read error on uboot-env.bin: Success
uboot/uboot-env/fw_setenv loads_echo 0
uboot/uboot-env/fw_setenv ipaddr 10.4.50.165
uboot/uboot-env/fw_setenv serverip 10.4.50.5
uboot/uboot-env/fw_setenv rootpath /mnt/ARM_FS/
uboot/uboot-env/fw_setenv netmask 255.255.255.0
uboot/uboot-env/fw_setenv stdin serial
uboot/uboot-env/fw_setenv stdout serial
uboot/uboot-env/fw_setenv stderr serial
uboot/uboot-env/fw_setenv console console=ttyS0,115200 mtdparts=nand_mtd:0xc0000@0\(uboot\)ro,0x1ff00000@0x100000\(root\)
uboot/uboot-env/fw_setenv mainlineLinux no
uboot/uboot-env/fw_setenv CASset min
uboot/uboot-env/fw_setenv enaMonExt no
uboot/uboot-env/fw_setenv enaCpuStream no
uboot/uboot-env/fw_setenv enaWrAllo no
uboot/uboot-env/fw_setenv pexMode RC
uboot/uboot-env/fw_setenv disL2Cache no
uboot/uboot-env/fw_setenv setL2CacheWT yes
uboot/uboot-env/fw_setenv disL2Prefetch yes
uboot/uboot-env/fw_setenv enaICPref yes
uboot/uboot-env/fw_setenv enaDCPref yes
uboot/uboot-env/fw_setenv sata_dma_mode yes
uboot/uboot-env/fw_setenv MALLOC_len 1
uboot/uboot-env/fw_setenv ethprime egiga0
uboot/uboot-env/fw_setenv netbsd_en no
uboot/uboot-env/fw_setenv vxworks_en no
uboot/uboot-env/fw_setenv bootargs_root root=/dev/nfs rw
uboot/uboot-env/fw_setenv bootargs_end :::DB88FXX81:eth0:none
uboot/uboot-env/fw_setenv image_name uImage
uboot/uboot-env/fw_setenv bootcmd tftpboot 0x2000000 \$\(image_name\)\;setenv bootargs \$\(console\) \$\(bootargs_root\) nfsroot=\$\(serverip\):\$\(rootpath\) ip=\$\(ipaddr\):\$\(serverip\)\$\(bootargs_end\) \$\(mvNetConfig\) \$\(mvPhoneConfig\)\; bootm 0x2000000\;
uboot/uboot-env/fw_setenv standalone fsload 0x2000000 \$\(image_name\)\;setenv bootargs \$\(console\) root=/dev/mtdblock0 rw ip=\$\(ipaddr\):\$\(serverip\)\$\(bootargs_end\) \$\(mvPhoneConfig\)\; bootm 0x2000000\;
uboot/uboot-env/fw_setenv bootdelay 3
uboot/uboot-env/fw_setenv disaMvPnp no
uboot/uboot-env/fw_setenv ethaddr 00:50:43:4e:2a:14
uboot/uboot-env/fw_setenv ethmtu 1500
uboot/uboot-env/fw_setenv mvPhoneConfig mv_phone_config=dev0:fxs,dev1:fxs
uboot/uboot-env/fw_setenv mvNetConfig mv_net_config=\(00:11:88:0f:62:81,0:1:2:3\),mtu=1500
uboot/uboot-env/fw_setenv usb0Mode host
uboot/uboot-env/fw_setenv yuk_ethaddr 00:00:00:EE:51:81
uboot/uboot-env/fw_setenv nandEcc 1bit
uboot/uboot-env/fw_setenv netretry no
uboot/uboot-env/fw_setenv rcvrip 169.254.100.100
uboot/uboot-env/fw_setenv loadaddr 0x02000000
uboot/uboot-env/fw_setenv autoload no
uboot/uboot-env/fw_setenv enaAutoRecovery yes
uboot/uboot-env/fw_setenv ethact egiga0
reading uboot/uboot-env/uboot-nand-custom.txt
uboot/uboot-env/fw_setenv bootargs_root ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs
uboot/uboot-env/fw_setenv mtdpartitions mtdparts=orion_nand:0x400000@0x100000\(uImage\),0x1fb00000@0x500000\(rootfs\)
uboot/uboot-env/fw_setenv ethaddr 00:50:43:01:c1:e6
uboot/uboot-env/fw_setenv real_bootcmd setenv bootargs \$\(bootargs_console\) \$\(mtdpartitions\) \$\(bootargs_root\)\; nand read.e 0x00800000 0x00100000 0x00400000\; bootm 0x00800000
uboot/uboot-env/fw_setenv bootargs_console console=ttyS0,115200
uboot/uboot-env/fw_setenv bootcmd run recover1
uboot/uboot-env/fw_setenv recover1 setenv mainlineLinux yes\; setenv arcNumber 2097\; setenv bootcmd run recover2\; saveenv\; reset
uboot/uboot-env/fw_setenv recover2 run recover3\; setenv bootcmd \$\(real_bootcmd\)\; saveenv\; setenv bootargs \$\(bootargs_console\) \$\(mtdpartitions\) root=/dev/ram0 rw ramdisk=0x01100000,8M install_type=nand\; bootm 0x00800000 0x01100000
uboot/uboot-env/fw_setenv recover3 run recover4\; nand erase clean 0x00100000 0x00400000\; nand write.e 0x00800000 0x00100000 0x00400000
uboot/uboot-env/fw_setenv recover4 usb start\; fatload usb 0 0x00800000 uImage\; fatload usb 0 0x01100000 initrd

**** Burning uboot and environment variables ... This will take few minutes ...
Open On-Chip Debugger 0.6.1 (2012-12-18-18:16)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
DEPRECATED! use 'adapter_khz' not 'jtag_khz'
adapter speed: 2000 kHz
trst_and_srst separate srst_gates_jtag trst_push_pull
srst_open_drain DEPRECATED! use 'adapter_nsrst_delay' not 'jtag_nsrst_delay'
adapter_nsrst_delay: 200
jtag_ntrst_delay: 200
dcc downloads are enabled
Error: No valid NAND flash driver found (0)
Available NAND flash controller drivers:
nonce
davinci
lpc3180
lpc32xx
orion
s3c2410
s3c2412
s3c2440
s3c2443
s3c6400
mxc
imx31
at91sam9
nuc910
sheevaplug_reflash_uboot_env
Info : clock speed 2000 kHz
Info : JTAG tap: feroceon.cpu tap/device found: 0x20a023d3
(mfg: 0x1e9, part: 0x0a02, ver: 0x2)
Info : Embedded ICE version 0
Info : feroceon.cpu: hardware has 1 breakpoint/watchpoint unit
Info : Halt timed out, wake up GDB.
Error: timed out while waiting for target halted
Runtime Error: openocd/config/board/sheevaplug.cfg:21: in procedure 'sheevaplug_reflash_uboot_env' in procedure 'sheevaplug_init' called at file «openocd/config/board/sheevaplug.cfg», line 117
in procedure 'wait_halt' called at file «openocd/config/board/sheevaplug.cfg», line 21
**** openocd FAILED
**** Is the mini USB cable connected?
**** Try powering down, then replugging the Sheevaplug


так видится этот девайс системе при подключении miniUSB

[ 7179.711328] usb 1-2.3: new full-speed USB device number 9 using ehci_hcd
[ 7179.796125] usb 1-2.3: Ignoring serial port reserved for JTAG
[ 7179.799584] ftdi_sio 1-2.3:1.1: FTDI USB Serial Device converter detected
[ 7179.799660] usb 1-2.3: Detected FT2232C
[ 7179.799666] usb 1-2.3: Number of endpoints 2
[ 7179.799671] usb 1-2.3: Endpoint 1 MaxPacketSize 64
[ 7179.799677] usb 1-2.3: Endpoint 2 MaxPacketSize 64
[ 7179.799682] usb 1-2.3: Setting MaxPacketSize 64
[ 7179.800079] usb 1-2.3: FTDI USB Serial Device converter now attached to ttyUSB0

Дёрганье питанием как мёртвому припарка, ресетом тоже. Никто с таким не сталкивался? Может я чего не сделал?



Последнее исправление: seijuurou (всего исправлений: 1)

Вот щас шкворца подниму!

В общем и целом вам там все верно написали:
1. Error: No valid NAND flash driver found (0)
Не указан драйвер через который надо лазить в NAND. Дальше он предлагает на выбор что можно использовать. За кирквуд точно не скажу, но вроде должен подходить orion (ЗЫ: точняк,
mtdparts=orion_nand:...).
2. Error: timed out while waiting for target halted
это вообще моя любимая ошибка. Лечится правильным конфигом, аккуратной последовательностью команд, ну и помогает иногда обкусывание jtag_sys_reset (чтобы долбанный openocd не сбрасывал таргет невпопад).

Рекомендую другой способ.
Подключить консоль, дождаться загрузки u-boot, и когда там будет пауза нажать любую кнопку, а потом (после появления >> ) ручками набить все те команды что там прописываются при помощи fw_setenv. А правильней, можно просто разобраться что там должно быть после всех манипуляций и сразу сделать конечный результат (нужно всего лишь прошить uImage и rootfs, ну и по необходимости поправить env)

yax123 ★★★★★
()
Ответ на: комментарий от yax123

не понял куда это вставить

mtdparts=orion_nand

в runme.php нашёл такой кусок:

$openocd_cmd= "openocd/openocd";
$openocd_cmd.= ($WIN32==1) ? ".exe" : "";
$openocd_cmd.= " -f openocd/config/board/sheevaplug.cfg";
$openocd_cmd.= " -s openocd/config/";
$openocd_cmd.= " -c init";
$openocd_cmd.= " -c sheevaplug_reflash_uboot_env";
$openocd_cmd.= " -c sheevaplug_reflash_uboot";
$openocd_cmd.= ($WIN32==1) ? " -c init" : " -c exit";

/* replace slash to backslash for windows */
if ($WIN32==1)
    $openocd_cmd= str_replace("/","\\",$openocd_cmd);

unset($rc);
/* Burn u-boot environment variables first, then u-boot */
exec($openocd_cmd, $out, $rc);
но тут указан sheevaplug_reflash_uboot_env, который предлагается в логе работы openocd

seijuurou
() автор топика
Ответ на: комментарий от seijuurou

Это я привел в качестве доказательства, что KW использует драйвер orion. Понятно что вставлять надо другую строку.

То что вы запускаете, это уже большой адаптированный комплекс скриптов с кнопкой «сделать зае^Wкруто!». Почему в этом комплексе такие ошибки мне не ведомо. Можно конечно разобраться как это все работает и мастерски исправить, можно забить на их потуги и прошиться на ручном приводе.

И в том и другом случае придется разобраться как работает и конфигурируется openocd. А можно перейти на уровень повыше и не лезть в дебри JTAG-а, а ограничится уровнем загрузчика, через который можно сделать все тоже самое (нужно будет только ввести пяток длинных команд).
Так что выбираете сами каким путем идти.

yax123 ★★★★★
()
Ответ на: комментарий от yax123

Я бы взял консоль, да вот только не соединяется она с прибором. Если взять putty, настроить его на ttyUSB0, 115200, 8N1, без контроля чётности и управления потоком, то он молчит и ничего не выдаёт

seijuurou
() автор топика
Ответ на: комментарий от seijuurou

Весьма странно. Ищите схему, смотрите если возможность подключится к UART0.
u-boot туда все льет.

Если не получится, то придется изучать конфиги openocd.
Там то всего одну строчку нужно прописать, но в нужно место и с нужными параметрами:
Выглядеть она будет примерно так:

nand device flash orion 0 0xf0000000

где вместо flash возможно стоит переменная (типа как в bash-е).
а вместо адреса, должен быть адрес куда после сброса отображается NAND (если не угадаете то openocd NAND не увидит).

yax123 ★★★★★
()
Ответ на: комментарий от AiFiLTr0

php runme.php nand

Ну и что такого что скрипты прошивки нанда писали сайтопейсатели на пыхе.

Треш угар и содомия.

Это когда марвел пишет о том, что его SoC может грузится из SPI-flash, а потом выпускает ерату в которой уточняет, что для загрузки из SPI нужно немного настроить проц (программно: залить код в кэш, отключить его модификацию, выключить других потребителей SPI и т.д.)

Или ставит на ref. design двухядерный SoC, при этом только один канал RAM (для разных ядер нужны отдельные сигналы CS к памяти).

yax123 ★★★★★
()
Ответ на: комментарий от yax123

У самсунга все было говнисто во времена s3c6410, сейчас говорят получше, да и эксинос вкуснота. allwinner вообще хорошо с коммьюнити работает, репы на гитхабе. И у них очень чипы дешевые.
Для роутеров AT9331, ну и я сейчас пытаюсь нормально запустить на rtl8196/98 3.х ядра, ибо у них _очень_ дешевые чипы с неплохим фаршем внутри. (В BSP да, ад, треш и лексра)

AiFiLTr0 ★★★★★
()
Ответ на: комментарий от AiFiLTr0

неплохим фаршем внутри

А если надо подключить к SoC 2-4 гигабитных линка? Да чтобы они работали на полной ширине канала.

yax123 ★★★★★
()
Ответ на: комментарий от yax123

RTL8198. Тама все порты гигабитные. А последние ревизии 8196 и 8198 уже вместо кастрата лексры содержат человеческий мипс.

AiFiLTr0 ★★★★★
()
Последнее исправление: AiFiLTr0 (всего исправлений: 1)
Ответ на: комментарий от yax123

Плюнул на компиляцию openocd, поставил его из репов, скопировал конфиг /usr/share/openocd/scripts/board/sheevaplug.cfg в sheevaplug-installer-v1.0/uboot/openocd/config/board, запускаю процесс получаю:

 ****	exec(modprobe ftdi_sio vendor=0x9e88 product=0x9e8f)
 ****	Preparing environment variables file ...
reading uboot/uboot-env/uboot-dflt.txt
uboot/uboot-env/fw_setenv baudrate 115200
CRC read error on uboot-env.bin: Success
uboot/uboot-env/fw_setenv loads_echo 0
uboot/uboot-env/fw_setenv ipaddr 10.4.50.165
uboot/uboot-env/fw_setenv serverip 10.4.50.5
uboot/uboot-env/fw_setenv rootpath /mnt/ARM_FS/
uboot/uboot-env/fw_setenv netmask 255.255.255.0
uboot/uboot-env/fw_setenv stdin serial
uboot/uboot-env/fw_setenv stdout serial
uboot/uboot-env/fw_setenv stderr serial
uboot/uboot-env/fw_setenv console console=ttyS0,115200 mtdparts=orion_mtd:0xc0000@0\(uboot\)ro,0x1ff00000@0x100000\(root\)
uboot/uboot-env/fw_setenv mainlineLinux no
uboot/uboot-env/fw_setenv CASset min
uboot/uboot-env/fw_setenv enaMonExt no
uboot/uboot-env/fw_setenv enaCpuStream no
uboot/uboot-env/fw_setenv enaWrAllo no
uboot/uboot-env/fw_setenv pexMode RC
uboot/uboot-env/fw_setenv disL2Cache no
uboot/uboot-env/fw_setenv setL2CacheWT yes
uboot/uboot-env/fw_setenv disL2Prefetch yes
uboot/uboot-env/fw_setenv enaICPref yes
uboot/uboot-env/fw_setenv enaDCPref yes
uboot/uboot-env/fw_setenv sata_dma_mode yes
uboot/uboot-env/fw_setenv MALLOC_len 1
uboot/uboot-env/fw_setenv ethprime egiga0
uboot/uboot-env/fw_setenv netbsd_en no
uboot/uboot-env/fw_setenv vxworks_en no
uboot/uboot-env/fw_setenv bootargs_root root=/dev/nfs rw
uboot/uboot-env/fw_setenv bootargs_end :::DB88FXX81:eth0:none
uboot/uboot-env/fw_setenv image_name uImage
uboot/uboot-env/fw_setenv bootcmd tftpboot 0x2000000 \$\(image_name\)\;setenv bootargs \$\(console\) \$\(bootargs_root\) nfsroot=\$\(serverip\):\$\(rootpath\) ip=\$\(ipaddr\):\$\(serverip\)\$\(bootargs_end\) \$\(mvNetConfig\) \$\(mvPhoneConfig\)\;  bootm 0x2000000\;
uboot/uboot-env/fw_setenv standalone fsload 0x2000000 \$\(image_name\)\;setenv bootargs \$\(console\) root=/dev/mtdblock0 rw ip=\$\(ipaddr\):\$\(serverip\)\$\(bootargs_end\) \$\(mvPhoneConfig\)\; bootm 0x2000000\;
uboot/uboot-env/fw_setenv bootdelay 3
uboot/uboot-env/fw_setenv disaMvPnp no
uboot/uboot-env/fw_setenv ethaddr f0:ad:4e:01:2c:19
uboot/uboot-env/fw_setenv ethmtu 1500
uboot/uboot-env/fw_setenv mvPhoneConfig mv_phone_config=dev0:fxs,dev1:fxs
uboot/uboot-env/fw_setenv mvNetConfig mv_net_config=\(00:11:88:0f:62:81,0:1:2:3\),mtu=1500
uboot/uboot-env/fw_setenv usb0Mode host
uboot/uboot-env/fw_setenv yuk_ethaddr 00:00:00:EE:51:81
uboot/uboot-env/fw_setenv nandEcc 1bit
uboot/uboot-env/fw_setenv netretry no
uboot/uboot-env/fw_setenv rcvrip 169.254.100.100
uboot/uboot-env/fw_setenv loadaddr 0x02000000
uboot/uboot-env/fw_setenv autoload no
uboot/uboot-env/fw_setenv enaAutoRecovery yes
uboot/uboot-env/fw_setenv ethact egiga0
reading uboot/uboot-env/uboot-nand-custom.txt
uboot/uboot-env/fw_setenv bootargs_root ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs
uboot/uboot-env/fw_setenv mtdpartitions mtdparts=orion_mtd:0x400000@0x100000\(uImage\),0x1fb00000@0x500000\(rootfs\)
uboot/uboot-env/fw_setenv ethaddr f0:ad:4e:01:2c:19
uboot/uboot-env/fw_setenv real_bootcmd setenv bootargs \$\(bootargs_console\) \$\(mtdpartitions\) \$\(bootargs_root\)\; nand read.e 0x00800000 0x00100000 0x00400000\; bootm 0x00800000
uboot/uboot-env/fw_setenv bootargs_console console=ttyS0,115200
uboot/uboot-env/fw_setenv bootcmd run recover1
uboot/uboot-env/fw_setenv recover1 setenv mainlineLinux yes\; setenv arcNumber 2097\; setenv bootcmd run recover2\; saveenv\; reset
uboot/uboot-env/fw_setenv recover2 run recover3\; setenv bootcmd \$\(real_bootcmd\)\; saveenv\; setenv bootargs \$\(bootargs_console\) \$\(mtdpartitions\) root=/dev/ram0 rw ramdisk=0x01100000,8M install_type=nand\; bootm 0x00800000 0x01100000
uboot/uboot-env/fw_setenv recover3 run recover4\; nand erase clean 0x00100000 0x00400000\; nand write.e 0x00800000 0x00100000 0x00400000
uboot/uboot-env/fw_setenv recover4 usb start\; fatload usb 0 0x00800000 uImage\; fatload usb 0 0x01100000 initrd

 ****	Burning uboot and environment variables ... This will take few minutes ...
Open On-Chip Debugger 0.5.0 (2011-12-03-08:57)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.berlios.de/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
2000 kHz
trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain
adapter_nsrst_delay: 200
jtag_ntrst_delay: 200
dcc downloads are enabled
Warn : use 'feroceon.cpu' as target identifier, not '0'
sheevaplug_load_uboot
Info : clock speed 2000 kHz
Info : JTAG tap: feroceon.cpu tap/device found: 0x20a023d3 (mfg: 0x1e9, part: 0x0a02, ver: 0x2)
Info : Embedded ICE version 0
Info : feroceon.cpu: hardware has 1 breakpoint/watchpoint unit
target state: halted
target halted in ARM state due to debug-request, current mode: Supervisor
cpsr: 0x000000d3 pc: 0xffff0000
MMU: disabled, D-Cache: disabled, I-Cache: disabled
NAND flash device 'NAND 512MiB 3.3V 8-bit (Samsung)' found
erased blocks 5 to 7 on NAND flash device #0 'NAND 512MiB 3.3V 8-bit'
Error: DCC write failed, expected end address 0x10000814 got 0x10000014
Error: Unable to write data to NAND device
failed writing file uboot-env.bin to NAND flash 0 at offset 0x000a0000
target state: halted
target halted in ARM state due to debug-request, current mode: Supervisor
cpsr: 0x000000d3 pc: 0xffff0000
MMU: disabled, D-Cache: disabled, I-Cache: disabled
NAND flash device 'NAND 512MiB 3.3V 8-bit (Samsung)' found
erased blocks 0 to 5 on NAND flash device #0 'NAND 512MiB 3.3V 8-bit'
Error: DCC write failed, expected end address 0x10000814 got 0x10000014
Error: Unable to write data to NAND device
failed writing file uboot.bin to NAND flash 0 at offset 0x00000000
 ****	openocd FAILED
 ****	Is the mini USB cable connected?
 ****	Try powering down, then replugging the Sheevaplug

и всё-ровно не могу понять почему он не может записать флэш

seijuurou
() автор топика
Ответ на: комментарий от seijuurou

Вы прям точно по всем граблям openocd+marvell идете :)

Ищите что за команды выполняются по репорту:
erased blocks 5 to 7 on NAND flash device #0 'NAND 512MiB 3.3V 8-bit'
Error: DCC write failed, expected end address 0x10000814 got 0x10000014
Error: Unable to write data to NAND device
failed writing file uboot-env.bin to NAND flash 0 at offset 0x000a0000
target state: halted

должно быть что-то вроде:
nand write 0 uboot.bin 0 oob_softecc_kw


Вообще, эта связка openocd и marvell весьма чувствительна к всяким последовательностям команд и т.д.
У меня обычно «DCC write failed», выскакивала при попытке записи чего-нидь в ОЗУ (для этого нужно правильно настроить DRAM-контроллер, а это отдельный геморрой). Запись в nand происходит напрямую, поэтому непонятно почему такая проблема.

yax123 ★★★★★
()
Ответ на: комментарий от yax123

mv78200 я не особенно щупал, но RTLки меня привлекают тем. что
1. У китаец утекли в паблик референс дизайны и даташиты.
2. 8196 стоит около 10-12 юаней зи чип, 8198 тоже в пределах 20ти.
3. паябельный корпус. с SDR памятью можно развести в два слоя без гемора.

AiFiLTr0 ★★★★★
()
Ответ на: комментарий от AiFiLTr0

Марвелл кстати RD и DS не «прячет». Регайся от предприятия и получай все что хош (в том числе исходники на ядро, тулчейны, rootfs).
Хотя конечно все это NDA.
mv78200 - это 2 асимметричных arm926jze ядра, по 1,2ГГц, до 4Гб оперативы. 4xPCI-E, 4xGBE (ну и прочий ливер типа 3xUSB, 2xSATA и прочая мелочь).

yax123 ★★★★★
()
Ответ на: комментарий от yax123

ну на реалтек у меня есть от китайцев без NDA. Да и мои поделки не от предприятия, а just4fun, для себя.

AiFiLTr0 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.