[U-Boot-Users] problem to load uImage but not zImage (onvirtex-4 board)

Guillaume Berthelom guillaume.berthelom at cleode.fr
Thu May 3 11:59:47 CEST 2007


First Thanks from your reply...

In my ml403.h u-boot config's file I've got that:
...
#define    CONFIG_EXTRA_ENV_SETTINGS                    \
    "netdev=eth0\0"                            \
    "addip=setenv bootargs $(bootargs) "                \
            "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask)"    \
        ":$(hostname):$(netdev):off panic=1\0"            \
    "rootpath=/opt/eldk4.1/ppc_4xx\0"                \
    "bootfile=/tftpboot/fx12/boot/uImage\0"                \
    "nfsargs=setenv bootargs nfsroot=$(serverip):$(rootpath)\0"    \
    "net_nfs8=dhcp 800000 $(bootfile);run nfsargs addip;bootm\0"    \
    "net_nfs4=dhcp 400000 $(bootfile);run nfsargs addip;bootm\0"    \
    "net_nfs2=dhcp 200000 $(bootfile);run nfsargs addip;bootm\0"

#define CONFIG_BOOTCOMMAND      "run net_nfs8" /* autoboot command    */
#define CONFIG_BOOTARGS         "console=ttyS0,9600"

#define CONFIG_LOADS_ECHO       1       /* echo on for serial download    */
#define CFG_LOADS_BAUD_CHANGE   1       /* allow baudrate change    */
...

My Linux config is very simple for now, I give you my .config in 
attached file but my commande line is same as u-boot:
CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="console=ttyS0,9600"
I try to turn off this option to be sure u-boot passed the BOOTARGS 
commande to the kernel but no result.

The output of u-boot is:

U-Boot 1.2.0 (May  3 2007 - 09:57:13)

### No HW ID - assuming ML403
DRAM:  64 MB
Top of RAM usable for U-Boot at: 04000000
Reserving 159k for U-Boot at: 03fd8000
Reserving 384k for malloc() at: 03f78000
Reserving 120 Bytes for Board Info at: 03f77f88
Reserving 48 Bytes for Global Data at: 03f77f58
Stack Pointer at: 03f77f38
New Stack Pointer is: 03f77f38
Now running in RAM - U-Boot at: 03fd8000
FLASH: flash detect cfi
...
 4 MB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
U-Boot relocated to 03fd8000
### main_loop entered: bootdelay=3

### main_loop: bootcmd="run net_nfs8"
Hit any key to stop autoboot:  0
...
Bootfile: fx12/boot/uImage
DHCP client bound to address 192.168.85.154
TFTP from server 192.168.85.11; our IP address is 192.168.85.154
Filename 'fx12/boot/uImage'.
Load address: 0x800000
Loading: #################################################################
         ####################################
done
Bytes transferred = 517028 (7e3a4 hex)
## Booting image at 00800000 ...
   Image Name:   Linux-2.6.20.7
   Image Type:   PowerPC Linux Kernel Image (gzip compressed)
   Data Size:    516964 Bytes = 504.8 kB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK
## Current stack ends at 0x03F77308 => set upper limit to 0x00800000
## cmdline at 0x007FFF00 ... 0x007FFF71
bd address  = 0x03F77F88
memstart    = 0x00000000
memsize     = 0x04000000
flashstart  = 0xFF800000
flashsize   = 0x00400000
flashoffset = 0x00000000
sramstart   = 0x00000000
sramsize    = 0x00000000
bootflags   = 0xEEC2E568
procfreq    =    300 MHz
plb_busfreq =    100 MHz
pci_busfreq =      0 MHz
ethaddr     = 00:0A:35:00:22:01
IP addr     = 192.168.85.154
baudrate    =   9600 bps
No initrd
## Transferring control to Linux (at address 00000000) ...

To debug the kernel I use the xilinx xmd debugger with the JTAG cable 
and GDB but I don't have the BDI2000 debugger.
I make a breakpoint at ppc4xx_setup_arch and then I continue with stepi 
commande. As you could see the printk() is not finish when the kernel crash:

(gdb) target remote 192.168.85.39:1234
Remote debugging using 192.168.85.39:1234
0x00010100 in ?? ()
(gdb) symbol-file vmlinux
Reading symbols from /export/home/geb/linux-2.6.20.7/vmlinux...done.
(gdb) add-symbol-file vmlinux 0xC0000000
add symbol table from file "vmlinux" at
        .text_addr = 0xc0000000
(y or n) y
Reading symbols from /export/home/geb/linux-2.6.20.7/vmlinux...done.
(gdb) hbreak ppc4xx_setup_arch
Hardware assisted breakpoint 1 at 0xc0104e38: file 
arch/ppc/syslib/ppc4xx_setup.c, line 60.
(gdb) c
Continuing.

Breakpoint 1, ppc4xx_setup_arch () at arch/ppc/syslib/ppc4xx_setup.c:60
60              mtspr(SPRN_DBCR0, (DBCR0_IDM));
(gdb) stepi
0xc0104e3c      60              mtspr(SPRN_DBCR0, (DBCR0_IDM));
(gdb) stepi
61              mtspr(SPRN_DBSR, 0xffffffff);
(gdb)
0xc0104e44      61              mtspr(SPRN_DBSR, 0xffffffff);
(gdb)
68      }
(gdb)
ml403_setup_arch () at arch/ppc/platforms/4xx/xilinx_ml403.c:92
92              printk(KERN_INFO "Xilinx ML403 Reference System 
(Virtex-4 FX)\n");
(gdb) stepi
0xc0105048      92              printk(KERN_INFO "Xilinx ML403 Reference 
System (Virtex-4 FX)\n");
(gdb) stepi
0xc010504c      92              printk(KERN_INFO "Xilinx ML403 Reference 
System (Virtex-4 FX)\n");
(gdb)
printk (fmt=0xc00e3c0c "<6>Xilinx ML403 Reference System (Virtex-4 
FX)\n") at kernel/printk.c:503
503     {
(gdb)
0xc0014768      503     {
(gdb)
0xc001476c      503     {
(gdb)
507             va_start(args, fmt);
(gdb)
0xc0014774      507             va_start(args, fmt);
(gdb)
0xc0014778      507             va_start(args, fmt);
(gdb)
0xc001477c      507             va_start(args, fmt);
(gdb)
0xc0014780      507             va_start(args, fmt);
(gdb)
503     {
(gdb)
507             va_start(args, fmt);
(gdb)
508             r = vprintk(fmt, args);
(gdb)
507             va_start(args, fmt);
(gdb)
0xc0014794      507             va_start(args, fmt);
(gdb)
503     {
(gdb)
0xc001479c      503     {
(gdb)
0xc00147a0      503     {
(gdb)
0xc00147a4      503     {
(gdb)
0xc00147a8      503     {
(gdb)
0xc00147ac      503     {
(gdb)
508             r = vprintk(fmt, args);
(gdb)

vprintk (fmt=0xc00e3c0c "<6>Xilinx ML403 Reference System (Virtex-4 
FX)\n", args=0xc00fff80)
    at kernel/printk.c:518
518     {
(gdb)
0xc0014494      518     {
(gdb)
0xc0014498      518     {
(gdb)
0xc001449c      518     {
(gdb)
526             if (unlikely(oops_in_progress) && printk_cpu == 
smp_processor_id())
(gdb)
0xc00144a4      526             if (unlikely(oops_in_progress) && 
printk_cpu == smp_processor_id())
(gdb)
518     {
(gdb)
526             if (unlikely(oops_in_progress) && printk_cpu == 
smp_processor_id())
(gdb)
518     {
(gdb)
526             if (unlikely(oops_in_progress) && printk_cpu == 
smp_processor_id())
(gdb)
91              msr = mfmsr();
(gdb)
96              SET_MSR_EE(msr & ~MSR_EE);
(gdb)
0xc0014518      96              SET_MSR_EE(msr & ~MSR_EE);
(gdb)
538             printed_len = vscnprintf(printk_buf, sizeof(printk_buf), 
fmt, args);
(gdb)
0xc0014520      538             printed_len = vscnprintf(printk_buf, 
sizeof(printk_buf), fmt, args);
(gdb)
535             printk_cpu = smp_processor_id();
(gdb)
0xc0014528      535             printk_cpu = smp_processor_id();
(gdb)
538             printed_len = vscnprintf(printk_buf, sizeof(printk_buf), 
fmt, args);
(gdb)
0xc0014530      538             printed_len = vscnprintf(printk_buf, 
sizeof(printk_buf), fmt, args);
(gdb)
0xc0014534      538             printed_len = vscnprintf(printk_buf, 
sizeof(printk_buf), fmt, args);
(gdb)
0xc0014538      538             printed_len = vscnprintf(printk_buf, 
sizeof(printk_buf), fmt, args);
(gdb)
535             printk_cpu = smp_processor_id();
(gdb)
538             printed_len = vscnprintf(printk_buf, sizeof(printk_buf), 
fmt, args);
(gdb)

vscnprintf (
    buf=0xc0114b24 "Linux version 2.6.20.7 (geb at bouleau) (gcc version 
4.0.0 (DENX ELDK 4.1 4.0.0)) #1 Thu May 3 09:42:17 CEST 2007\n", size=1024,
    fmt=0xc00e3c0c "<6>Xilinx ML403 Reference System (Virtex-4 FX)\n", 
args=0xc00fff80)
    at lib/vsprintf.c:515
515     {
(gdb)
0xc00a00c8      515     {
(gdb)
0xc00a00cc      515     {
(gdb)
0xc00a00d0      515     {
(gdb)
0xc00a00d4      515     {
(gdb)
518             i=vsnprintf(buf,size,fmt,args);
(gdb)
vsnprintf (
    buf=0xc0114b24 "Linux version 2.6.20.7 (geb at bouleau) (gcc version 
4.0.0 (DENX ELDK 4.1 4.0.0)) #1 Thu May 3 09:42:17 CEST 2007\n", size=1024,
    fmt=0xc00e3c0c "<6>Xilinx ML403 Reference System (Virtex-4 FX)\n", 
args=0xc00fff80)
    at lib/vsprintf.c:258
258     {
(gdb)
0xc009f8d0      258     {
(gdb)
277             if (unlikely((int) size < 0)) {
(gdb)
258     {
(gdb)
0xc009f8dc      258     {
(gdb)
0xc009f8e0      258     {
(gdb)
258     {
(gdb)
0xc009f8e8      258     {
(gdb)
277             if (unlikely((int) size < 0)) {
(gdb)
286             end = buf + size;
(gdb)
289             if (end < buf) {
(gdb)
0xc009f918      289             if (end < buf) {
(gdb)
0xc009f91c      289             if (end < buf) {
(gdb)
0xc009f920      289             if (end < buf) {
(gdb)
0xc00a0080      294             for (; *fmt ; ++fmt) {
(gdb)
0xc00a0084      294             for (; *fmt ; ++fmt) {
(gdb)
0xc00a0088      294             for (; *fmt ; ++fmt) {
(gdb)
0xc00a008c      294             for (; *fmt ; ++fmt) {
(gdb)
295                     if (*fmt != '%') {
(gdb)
0xc009f934      295                     if (*fmt != '%') {
(gdb)
0xc009f938      295                     if (*fmt != '%') {
(gdb)
431                                     if (str < end)
(gdb)
0xc009fe48      431                                     if (str < end)
(gdb)
432                                             *str = '%';
(gdb)
433                                     ++str;
(gdb)
0xc009fe54      433                                     ++str;
(gdb)
294             for (; *fmt ; ++fmt) {
(gdb)
0xc00a0078      294             for (; *fmt ; ++fmt) {
(gdb)
0xc00a007c      294             for (; *fmt ; ++fmt) {
(gdb)
0xc00a0080      294             for (; *fmt ; ++fmt) {
(gdb)
0xc00a0084      294             for (; *fmt ; ++fmt) {
(gdb)
0xc00a0088      294             for (; *fmt ; ++fmt) {
(gdb)

       
    /*************. repeat loop x times ************/
   
   
(gdb)
488             if (size > 0) {
(gdb)
0xc00a0094      488             if (size > 0) {
(gdb)
489                     if (str < end)
(gdb)
0xc00a009c      489                     if (str < end)
(gdb)
490                             *str = '\0';
(gdb)
0xc00a00a4      490                             *str = '\0';
(gdb)
495             return str-buf;
(gdb)
496     }
(gdb)
0xc00a00b4      496     }
(gdb)
0xc00a00b8      496     }
(gdb)
0xc00a00bc      496     }
(gdb)
0xc00a00c0 in vsnprintf (buf=Variable "buf" is not available.
) at lib/vsprintf.c:496
496     }
(gdb)
0x00001100 in ?? ()
(gdb) bt
#0  0x00001100 in ?? ()
#1  0xc00a00dc in vscnprintf (buf=Variable "buf" is not available.
) at lib/vsprintf.c:518
#2  0x480022b5 in ?? ()
#3  0x480022b5 in ?? ()
Previous frame inner to this frame (corrupt stack?)
(gdb)

I also try to use the command line specified in 8250_early.c like 
console=uart,mmio,0x40401003,9600n8 (0x40401003 is my 
XPAR_UARTNS550_0_BASEADDR + 3) but no result too.

So if you have any ideas or suggestion...

Thanks,
Guillaume Berthelom

Leonid a écrit :
> Grant is right - kernel command line (defined by u-boot variable
> "bootargs") is also very important, though it's difficult to see how
> wrong command line can crash printk(). It definitely can prevent serial
> output from showing up on console though.
>
> Leonid.
>
> -----Original Message-----
> From: u-boot-users-bounces at lists.sourceforge.net
> [mailto:u-boot-users-bounces at lists.sourceforge.net] On Behalf Of Grant
> Likely
> Sent: Wednesday, May 02, 2007 10:19 AM
> To: Guillaume Berthelom
> Cc: u-boot-users at lists.sourceforge.net
> Subject: Re: [U-Boot-Users] problem to load uImage but not zImage
> (onvirtex-4 board)
>
> On 5/2/07, Guillaume Berthelom <guillaume.berthelom at cleode.fr> wrote:
>   
>> When I load the zImage directly with xilinx xmd debugger, the kernel
>>     
> start
>   
>> without problem (if I don't have KGDB or SERIAL_TEXT_DEBUG option in
>>     
> my
>   
>> kernel config). But when I try to load the uImage with u-boot, the
>>     
> kernel
>   
>> start but crach befor I can see something on output.
>> The kernel start because I debug it and the platform_init is ok,
>>     
> setup_arch
>   
>> too and it crach after ppc4xx_setup_arch at  printk(KERN_INFO "Xilinx
>>     
> ML403
>   
>> Reference System (Virtex-4 FX)\n") line  when the kernel access in
>>     
> printk.c.
>   
>> I use the opb_uart16550 IP in my Xilinx design and the associat
>>     
> drivers in
>   
>> u-boot and linux.
>>     
>
> What are you passing for the kernel command line?
> Can you post your .config?
>
> Cheers,
> g.
>
>   

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: .config
Url: http://lists.denx.de/pipermail/u-boot/attachments/20070503/8369ed98/attachment.txt 


More information about the U-Boot mailing list