Welcome! Log In Create A New Profile

Advanced

i think i bricked my goflex home

Posted by chrishelms 
chrishelms
i think i bricked my goflex home
August 30, 2015 04:58PM
hey guys,

first of all a big praise: i have a goflex home at work where i installed debian. it's rock solid and has been running as our companies main server for 6 months now.

so i decided to buy one for myself but i must have done something wrong...
i installed the newest uboot for goflexhome and installed rootfs to /dev/sda1. i must have messed something up because the system didnt boot into debian.
at first i was able to change my computers ip to the one in fw_printenv and log into netconsole. but after saving the new configuration with saveenv i'm now completely locked out.

here is the last version of fw_printenv:

arcNumber=3338
baudrate=115200
bootcmd=run sata_bootcmd; usb start; run force_rescue_bootcmd; run ubifs_bootcmd; run usb_bootcmd; usb stop; run rescue_bootcmd; run pogo_bootcmd; reset
bootcmd_mmc=run mmc_init; run set_bootargs_mmc; run mmc_boot
bootcmd_sata=run sata_init; run set_bootargs_sata; run sata_boot;
bootcmd_uenv=run uenv_load; if test $uenv_loaded -eq 1; then run uenv_import; fi
bootcmd_usb=run usb_init; run set_bootargs_usb; run usb_boot;
bootdelay=10
console=ttyS0,115200
device=0:1
ethact=egiga0
ethaddr=b6:d0:5e:0f:a1:17
force_rescue=0
force_rescue_bootcmd=if test $force_rescue -eq 1 || ext2load usb 0:1 0x1700000 /rescueme 1 || fatload usb 0:1 0x1700000 /rescueme.txt 1; then run rescue_bootcmd; fi
if_netconsole=ping $serverip
ipaddr=192.168.10.233
led_error=orange blinking
led_exit=green off
led_init=green blinking
load_dtb=ext2load usb 0:1 0x1c00000 /boot/dts/kirkwood-goflexhome.dtb
load_initrd=ext2load usb 0:1 0x1100000 /boot/uInitrd
load_uimage=ext2load usb 0:1 0x800000 /boot/uImage
mainlineLinux=yes
mmc_boot=mw 0x800000 0 1; run mmc_load_uimage; if run mmc_load_uinitrd; then bootm 0x800000 0x1100000; else bootm 0x800000; fi
mmc_init=mmc rescan
mmc_load_uimage=ext2load mmc $device 0x800000 /boot/uImage
mmc_load_uinitrd=ext2load mmc $device 0x1100000 /boot/uInitrd
mmc_root=/dev/mmcblk0p1
mtdids=nand0=orion_nand
mtdparts=mtdparts=orion_nand:1M(u-boot),4M(uImage),32M(rootfs),-(data)
nc_ready=1
ncip=192.168.10.244
partition=nand0,2
pogo_bootcmd=if fsload uboot-original-mtd0.kwb; then go 0x800200; fi
preboot=run preboot_nc
preboot_nc=setenv nc_ready 0; for pingstat in 1 2 3 4 5; do; sleep 1; if run if_netconsole; then setenv nc_ready 1; fi; done; if test $nc_ready -eq 1; then run start_netconsole; fi
rescue_bootcmd=if test $rescue_installed -eq 1; then run rescue_set_bootargs; nand read.e 0x800000 0x100000 0x400000; bootm 0x800000; else run pogo_bootcmd; fi
rescue_installed=0
rescue_set_bootargs=setenv bootargs console=$console ubi.mtd=2 root=ubi0:rootfs ro rootfstype=ubifs $mtdparts $rescue_custom_params
rootdelay=10
rootfstype=ubifs $mtdparts $rescue_custom_params
sata_boot=ide reset; mw 0x800000 0 1; ext2load ide $sata_device 0x800000 /boot/uImage; if ext2load ide $sata_device 0x1100000 /boot/uInitrd; then bootm 0x800000 0x1100000; else bootm 0x800000; fi
sata_bootcmd=run sata_set_bootargs; run sata_boot
sata_root=/dev/sda1
sata_rootfstype=ext3
sata_set_bootargs=setenv bootargs console=$console root=$sata_root rootdelay=$sata_rootdelay rootfstype=$sata_rootfstype $mtdparts $sata_custom_params
serverip=192.168.10.244
set_bootargs_mmc=setenv bootargs console=$console root=$mmc_root rootdelay=$rootdelay rootfstype=$rootfstype $mtdparts
set_bootargs_sata=setenv bootargs console=$console root=$sata_root rootdelay=$rootdelay rootfstype=$rootfstype $mtdparts
set_bootargs_usb=setenv bootargs console=$console root=$usb_root rootdelay=$rootdelay rootfstype=$rootfstype $mtdparts
start_netconsole=setenv ncip $serverip; setenv bootdelay 10; setenv stdin nc; setenv stdout nc; setenv stderr nc; version;
stderr=nc
stdin=nc
stdout=nc
ubifs_bootcmd=run ubifs_set_bootargs; if ubi part data && ubifsmount rootfs && ubifsload 0x800000 /boot/uImage && ubifsload 0x1100000 /boot/uInitrd; then bootm 0x800000 0x1100000; fi
ubifs_mtd=3
ubifs_set_bootargs=setenv bootargs console=$console ubi.mtd=$ubifs_mtd root=ubi0:rootfs rootfstype=ubifs $mtdparts $ubifs_custom_params
uenv_import=echo importing envs ...; env import -t 0x810000
uenv_load=usb start; mmc rescan; ide reset; setenv uenv_loaded 0; for devtype in usb mmc ide; do for disknum in 0; do run uenv_read_disk; done; done
uenv_read=echo loading envs from $devtype $disknum ...; if load $devtype $disknum:1 0x810000 /boot/uEnv.txt; then setenv uenv_loaded 1; fi
uenv_read_disk=if test $devtype -eq mmc; then if $devtype part; then run uenv_read;  fi; else if $devtype part $disknum; then run uenv_read; fi;  fi
usb_boot=run load_dtb; run load_uimage; if run load_initrd; then bootm 0x800000 0x1100000 0x1c00000; else bootm 0x800000 - 0x1c00000; fi
usb_bootcmd=run usb_init; run usb_set_bootargs; run usb_boot
usb_device=0:1
usb_init=run usb_scan
usb_load_uimage=ext2load usb $device 0x800000 /boot/uImage
usb_load_uinitrd=ext2load usb $device 0x1100000 /boot/uInitrd
usb_root=/dev/sda1
usb_rootdelay=10
usb_rootfstype=ext2
usb_scan=usb_scan_done=0;for scan in $usb_scan_list; do run usb_scan_$scan; if test $usb_scan_done -eq 0 && ext2load usb $usb 0x800000 /boot/uImage 1; then usb_scan_done=1; echo "Found bootable drive on usb $usb"; setenv
usb_scan_1=usb=0:1 dev=sda1
usb_scan_2=usb=1:1 dev=sdb1
usb_scan_3=usb=2:1 dev=sdc1
usb_scan_4=usb=3:1 dev=sdd1
usb_scan_list=1 2 3 4
usb_set_bootargs=setenv bootargs console=$console root=$usb_root rootdelay=$usb_rootdelay rootfstype=$usb_rootfstype $mtdparts $usb_custom_params

do you guys see anything suspicious?
what other options do i have now to get back into u-boot?
Re: i think i bricked my goflex home
August 30, 2015 05:29PM
chrishelms,

>
> first of all a big praise: i have a goflex home at
> work where i installed debian. it's rock solid and
> has been running as our companies main server for
> 6 months now.

Cool! this is the first time I'm actualy aware that my u-boot and Debian rootfs builds are used in workplace.

>
> so i decided to buy one for myself but i must have
> done something wrong...
> i installed the newest uboot for goflexhome and
> installed rootfs to /dev/sda1. i must have messed
> something up because the system didnt boot into
> debian.
> at first i was able to change my computers ip to
> the one in fw_printenv and log into netconsole.
> but after saving the new configuration with
> saveenv i'm now completely locked out.

It sounds like you don't have serial console, and relying on netconsole to observe the boot progress. So the safest thing to do to recover from this situation is loading the default u-boot envs using the uEnv.txt loading capability:

http://forum.doozan.com/read.php?2,14351,23556#msg-23556

This will get you boot into Debian and estabish SHH so you can log in and fix the envs. Since you have the GoFlex Home, arcNumber is different in step 2

2. Plug the USB rootfs into the NSA325 and power up, interrupt serial console. At the prompt: 

run bootcmd_uenv
fw_setenv arcNumber 3338
fw_setenv machid

Note that in step 1, copy this uEnv.txt to your current rootfs /boot directory. If it is on a HDD then you'll should create a USB rootfs and boot that, if you can't remove it and plug it in another Linux box.
1. Copy the default envs in text format to the 3.18.5 rootfs on USB. Assuming the USB rootfs is mounted on another Linux box as /media/sdb1:

Try this, and if you can't still boot into Debian, then we'll take a look at the envs closely to find problem.


UPDATE:

I've just realized that your u-boot envs are not set up to load the uEnv.txt automatically! I though you said you've installed the latest u-boot?

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)



Edited 2 time(s). Last edit at 08/30/2015 05:38PM by bodhi.
Re: i think i bricked my goflex home
August 30, 2015 05:44PM
Looking at these envs, your netconsole should be working:

ipaddr=192.168.10.233
serverip=192.168.10.244
preboot=run preboot_nc
preboot_nc=setenv nc_ready 0; for pingstat in 1 2 3 4 5; do; sleep 1; if run if_netconsole; then setenv nc_ready 1; fi; done; if test $nc_ready -eq 1; then run start_netconsole; fi
ethaddr=b6:d0:5e:0f:a1:17
if_netconsole=ping $serverip

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
chrishelms
Re: i think i bricked my goflex home
August 30, 2015 06:14PM
thanks for your quick reply!
I tried the uEnv.txt but as you pointed out already, I guess it doesn't load because i don't have the right environment variables.

After I installed the newest uboot i used the same commands that are running on the goflex box at work. I basically wanted the same stability so I thought I just copy most of the environment variables..that was my big mistake!

What I don't understand is that netconsole was working fine. Then I did two changes unrelated to netconsole, typed saveenv and upon restart I had no connection to netconsole anymore. I wonder if it is still working, maybe on another ip address?
Is there a way to scan for netconsole?
Re: i think i bricked my goflex home
August 30, 2015 06:32PM
chrishelms,

> What I don't understand is that netconsole was
> working fine. Then I did two changes unrelated to
> netconsole, typed saveenv and upon restart I had
> no connection to netconsole anymore. I wonder if
> it is still working, maybe on another ip address?

This is why I always recommend changing u-boot envs in Debian with fw_setenv only. Sometime saveenv in u-boot console causes problems, because u-boot envs are not at the same settings as during boot when you are in netconsole.

> Is there a way to scan for netconsole?

You could try to ping the GFHome: on the server 192.168.10.244, start pinging the GFHome:
ping 192.168.10.233

And then power up the GF Home, see if it responds to the ping briefly during boot up. If it does then it is a good sign (i.e. it means that netconsole is running OK)

If it does not respond to any ping, then not so good. You might want to try running a scanning app such as Linux nmap or IOS Fing to try to find out if a different IP was somehow used.

In any case, describe exactly what is the behavior of the LED when you power up, does it flashing, solid, what color .... it might give a hint!

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
chrishelms
Re: i think i bricked my goflex home
August 30, 2015 06:58PM
thanks for the explanation! using saveenv must have messed with the settings, that makes sense now...
When I switch it on I see a continous blinking green light. It never changes color or goes solid. The blinking interval also stays the same.
trying to ping the gfh did not work unfortunately
I already tried the rescue v3 usb and and a debian usb disk but it seems like usb boot is broken as well...
chrishelms
Re: i think i bricked my goflex home
August 30, 2015 07:02PM
i just got a brief ping on second attempt
chrishelms
Re: i think i bricked my goflex home
August 30, 2015 07:32PM
nevermind, i did not get ping response. i accidentaly pinged the wrong ip
Re: i think i bricked my goflex home
August 30, 2015 07:32PM
chrishelms Wrote:
-------------------------------------------------------
> i just got a brief ping on second attempt


Ah! keep trying netconsole, see it you can connect. It is best to plug both the GF Home and the server box into the same switch (e.g. same router ports) directly, don't go through indirect hop like another switch. If the server is wifi (i.e. laptop) and it does not work, you might want to try connect it to the same switch with ethernet cable.

Which new u-boot version did you install? u-boot 2014.07-tld-2 ?

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
chrishelms
Re: i think i bricked my goflex home
August 30, 2015 07:37PM
i just plugged my laptop directly into the router but it made no difference unfortunately.
yes, i installed u-boot 2014.07-tld-2
Re: i think i bricked my goflex home
August 31, 2015 12:30AM
Ok. So netconsole settings were affected somehow during saveenv. And you don't have serial console.

If you're willing and ready to open the box and connect serial console, then it is a sure thing you can unbrick it. It's an opportunity to learn how to do this, if you have not done it before!

Let's see if we can try to boot into anything, before you have to connect serial console. If the following u-boot envs were not overwritten then u-boot should have tried to load the kernel files (uImage, uInitrd, and DTB). However, if the LED was flashing constantly, without turning orange, or becoming solid green, then the kernel files were never loaded.

arcNumber=3338
baudrate=115200

bootcmd=run sata_bootcmd; usb start; run force_rescue_bootcmd; run ubifs_bootcmd; run usb_bootcmd; usb stop; run rescue_bootcmd; run pogo_bootcmd; reset

usb_bootcmd=run usb_init; run usb_set_bootargs; run usb_boot

usb_init=run usb_scan
usb_scan=usb_scan_done=0;for scan in $usb_scan_list; do run usb_scan_$scan; if test $usb_scan_done -eq 0 && ext2load usb $usb 0x800000 /boot/uImage 1; then usb_scan_done=1; echo "Found bootable drive on usb $usb"; setenv

usb_set_bootargs=setenv bootargs console=$console root=$usb_root rootdelay=$usb_rootdelay rootfstype=$usb_rootfstype $mtdparts $usb_custom_params
console=ttyS0,115200
usb_root=/dev/sda1
usb_rootdelay=10
usb_rootfstype=ext2

usb_boot=run load_dtb; run load_uimage; if run load_initrd; then bootm 0x800000 0x1100000 0x1c00000; else bootm 0x800000 - 0x1c00000; fi
load_dtb=ext2load usb 0:1 0x1c00000 /boot/dts/kirkwood-goflexhome.dtb
load_initrd=ext2load usb 0:1 0x1100000 /boot/uInitrd
load_uimage=ext2load usb 0:1 0x800000 /boot/uImage

Here is what I think you should try as the hail mary pass: create the 3.18.5 rootfs on a new USB drive. On another Linux box, just download this rootfs:

Quote

Updated 24 Feb 2015:

This rootfs is the first Debian jessie rootfs in my Kirkwood kernel/rootfs release series, and to keep in sync with kernel Linux-3.18.5-kirkwood-tld-1.

and extract it to a newly formatted USB drive with a single Ext2 partition. No need to append DTB to uImage as described in section 4 (your u-boot env was set up to boot with separated DTB).

And plug this in the GoFlexHome and power up.

If this does not work, then you will need serial console to unbrick.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)



Edited 1 time(s). Last edit at 08/31/2015 12:32AM by bodhi.
chrishelms
Re: i think i bricked my goflex home
August 31, 2015 11:24AM
Hey bodhi,

I couldn't boot into debian with a newly created stick so i guess i will go the serial console way.
I ordered a UART adapter on ebay and already read some tutorials. should be a fun learning experience!

Thanks for all your help, much appreciated.
Chris
Re: i think i bricked my goflex home
August 31, 2015 02:32PM
@chrishelms,

don't worry, it's easy, just be careful to connect the pins in the correct order.
chrishelms
Re: i think i bricked my goflex home
October 26, 2015 11:22PM
hey guys,

i finally was able to solder three wires to my goflex home and start playing around with serial console. unfortunately i couldnt grt any connection to serial console trying screen and kwboot.. any idea why serial console isn't working for me?
Re: i think i bricked my goflex home
October 27, 2015 12:07AM
chrishelms Wrote:
-------------------------------------------------------
> hey guys,
>
> i finally was able to solder three wires to my
> goflex home and start playing around with serial
> console. unfortunately i couldnt grt any
> connection to serial console trying screen and
> kwboot.. any idea why serial console isn't working
> for me?

Try swapping TXD with RXD to see if you have any response.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
chrishelms
Re: i think i bricked my goflex home
October 27, 2015 11:31PM
Tried it both way and didnt get any output...
I also confirmed my usb to ttl is working by connecting my raspberry pi over serial. this worked as expected.
I'm now pretty sure my uboot is bricked. I used saveenv in netconsole and later realized the ip was taken by my phone. this must have corrupted uboot.

I still think there must be a way to unbrick.The only visual response I'm getting at this point is that the green flashing light changes to an orange flashing light after about 5 mins.
Re: i think i bricked my goflex home
October 28, 2015 12:43AM
chrishelms,

> I still think there must be a way to unbrick.The
> only visual response I'm getting at this point is
> that the green flashing light changes to an orange
> flashing light after about 5 mins.

This LED pattern indicated that u-boot env was messed up, so the kernel was not loaded successfully. The green light flashing does indicate that u-boot is good. So assuming the wires are connected correctly, the only reason that it does not give you output was because stdout env was set to netconsole. Remember: never do a saveenv in u-boot. That's not a good way to save envs. Do it in Debian with fw_setenv instead.

Use UART booting to boot recover. See the first post of the u-boot thread:

Quote

Important Note: If possible, try to test this boot image with UART booting before flashing to NAND. See davygravy's UART booting using kwboot instruction here in this thread. The latest u-boot image released here should be used for UART booting, if your box is the type that supports it (these do not: Dockstar, Pogo E02, iConnect). Note: there is no need to use a small image for NSA325 anymore, this version will kill the watchdog before the image is completely loaded.

To download ARM kwboot binary for UART booting at Dropbox:
kwboot
md5:
0efd011bdb244436e432a8de33e639a1

Your command should be:

./kwboot -t -B 115200 /dev/ttyUSB0 -b uboot.2014.07-tld-2.goflexhome.mtd0.kwb -p

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
chrishelms
Re: i think i bricked my goflex home
October 28, 2015 08:35PM
Hey bodhi, thanks for all your help, really appreciated!
I connected the cables (tried swappingTX and RX) and restarted the device but I don't get any output whatsoever. It's just "Sending boot message. Please reboot the target..." I tried it in different ways for the last hour but no response from the goflex home.

I had the cables soldered on by a technician at a video camera rental place and the solder appears to be well done. Is there anything else I can try?
https://www.dropbox.com/s/mbpgq8tkv6fcb9m/Photo%202015-10-28%2C%2018%2030%2044.jpg?dl=0
https://www.dropbox.com/s/laxtp8hxynqpfdj/Photo%202015-10-28%2C%2018%2031%2029.jpg?dl=0
Re: i think i bricked my goflex home
October 29, 2015 12:42AM
chrishelms,

> I connected the cables (tried swappingTX and RX)
> and restarted the device but I don't get any
> output whatsoever. It's just "Sending boot
> message. Please reboot the target..." I tried it
> in different ways for the last hour but no
> response from the goflex home.
>

If you know for a fact that

- your serial module converter works (have tried on another box). Or you can loop back the RX and TX and type someting to see if it echos back.

- and have verified the GFHome pins were connected correctly, GND TX RX, left-to-right, inside looking out.

then nothing you can do other than connecting JTAG. But the soldering job for JTAG is even more hassle than the serial console! and since you are not going to solder the pins yourself, the cost for JTAG I'd imagine is going to be more expensive then getting another used GF Home :)

So try to verify the above again, hopefully you will find something odds about the serial module convert (cheap ones from China sometime just don't work). I am lucky that all the little stuff I bought from China work fine, but some people got bad products sometime.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)



Edited 1 time(s). Last edit at 10/29/2015 02:36AM by bodhi.
chrishelms
Re: i think i bricked my goflex home
October 29, 2015 05:26PM
Ok, thanks bodhi. I'm determined to get this GFH back to working order again!
I wasn't able to loop back connecting RX and TX with screen but I was able to connect the USB to TTL adapter to the GPIO of my raspberry pi so I assume it works.
Tonight will connect my GFH to my raspberry pi's serial adapter and see if I get output through screen. Is there a kwboot version for ARM?
Re: i think i bricked my goflex home
October 29, 2015 09:20PM
chrishelms Wrote:
-------------------------------------------------------
> Ok, thanks bodhi. I'm determined to get this GFH
> back to working order again!
> I wasn't able to loop back connecting RX and TX
> with screen but I was able to connect the USB to
> TTL adapter to the GPIO of my raspberry pi so I
> assume it works.
> Tonight will connect my GFH to my raspberry pi's
> serial adapter and see if I get output through
> screen. Is there a kwboot version for ARM?

Look in the first post of the u-boot thread: http://forum.doozan.com/read.php?3,12381. I've provided the ARM kwboot binary there.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
chrishelms
Re: i think i bricked my goflex home
October 30, 2015 10:42AM
Thanks bodhi! No success after trying for hours yesterday with the pi either, I give up. Just bought a new base for 15$ on ebay, should have done this days ago ;)
Thanks for all your help! To not mess it up again, is there a step by step to go from stock to debian booting from the internal hard drive? Last time I did the ArchLinux step by step tutorial and then updated U-Boot, is this the way to go?
Re: i think i bricked my goflex home
October 30, 2015 02:05PM
chrishelms Wrote:
-------------------------------------------------------
> Thanks bodhi! No success after trying for hours
> yesterday with the pi either, I give up. Just
> bought a new base for 15$ on ebay, should have
> done this days ago ;)
> Thanks for all your help! To not mess it up again,
> is there a step by step to go from stock to debian
> booting from the internal hard drive? Last time I
> did the ArchLinux step by step tutorial and then
> updated U-Boot, is this the way to go?

The overall steps are really simple:

1. Create the USB rootfs foolowing instruction in: http://forum.doozan.com/read.php?2,12096

I'd recommend using the 3.16 rootfs (it is simpler with 3.16 to get it working, but you can also use the latest). Here is the 3.16 section in the rootf /kernel thread:

Quote

Updated 02 Sept 2014 (rootfs):

Rootfs Debian-3.16.0-kirkwood-tld-2 was uploaded. This rootfs is to keep in sync with kernel Linux-3.16.0-kirkwood-tld-2 (and its new features).


2. Boot into stock OS.
3. Mount the USB rootfs.

4. Follow the instruction in the u-boot thread to install u-boot:
http://forum.doozan.com/read.php?3,12381

That's it! sync and reboot.

To install Arch Linux, step 1 could be changed to get Arch rootfs, and prepare it the same way.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
chrishelms
Re: i think i bricked my goflex home
November 09, 2015 10:59AM
bodhi, just wanted to let you know that I got the new goflex home base. Followed the U-Boot tutorial, didnt change any envs this time around... and what can I say? It works awesome. Great upgrade from my raspberry pi as a home server, way faster and hopefully as stable as the one we have at work. I ended up using the debian jessie version since I already partitioned and installed this on the internal hdd the first time around. 5GB debian, 256mb swap and the rest for backup and storage.

Thanks for all your help!
Re: i think i bricked my goflex home
November 09, 2015 05:13PM
chrishelms Wrote:
-------------------------------------------------------
> bodhi, just wanted to let you know that I got the
> new goflex home base. Followed the U-Boot
> tutorial, didnt change any envs this time
> around... and what can I say? It works awesome.
> Great upgrade from my raspberry pi as a home
> server, way faster and hopefully as stable as the
> one we have at work. I ended up using the debian
> jessie version since I already partitioned and
> installed this on the internal hdd the first time
> around. 5GB debian, 256mb swap and the rest for
> backup and storage.
>
> Thanks for all your help!

Cool!

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Author:

Your Email:


Subject:


Spam prevention:
Please, enter the code that you see below in the input field. This is for blocking bots that try to post this form automatically. If the code is hard to read, then just try to guess it right. If you enter the wrong code, a new image is created and you get another chance to enter it right.
Message: