[uClinux-dev] uClinux on AT91 (Simulated Data abort in __wake_up)
Erwin Authried
eauth at softsys.co.at
Fri Feb 16 08:16:26 EST 2007
Am Freitag, den 16.02.2007, 13:37 +0100 schrieb rflores:
> Hi,
>
> I can simulate the uClinux image.bin in Keil Software Environment,
> the disassembled code in the last mail is from this environment.
>
> In the Makefile of the linker The TEXTADDR is fixed at 0x02024000,
>
> In the make menuconfig the RAM is fixed at 0x02200000 with length of
> 0x400000 and the flash is fixed at 0x01010000 with length of 0x190000
> (reserved 0x10000 for bootloader 0x01000000-0x1010000).
>
> In my board the result is the same as the one of my simulation.
>
> The kernel crashes at __wake_up function, at the addresses
>
> Data Abort: ARM Instruction at 022165B0H, Memory Access at E59FF014H
> Data Abort: ARM Instruction at 02216630H, Memory Access at E59FF018H
>
> Where is the source code of __wake_up ????
>
> In this instruction the first time R4 points to 0x0000000 reset
> vector and in the second time R4 contains the instruction located at R0,
> and crashes because tries to access at address E59FF014 but this is code
> instruction.
>
> 0x022165B0 E5140004 LDR R0,[R4,#-0x0004]
>
> The other data abort is a similar case.
>
> Any idea? I'm very very blocked in this point.
>
> Thanks
do you see any output of printk? If the printk output isn't working for
some reason, you can try to use the functions in
arch/armnommu/kernel/debug.c to write messages into a reserved memory
space, and read that out later by JTAG. You can reduce your memory size
to make space at the top of ram, so that you use as a buffer. Although
it's a very rude hack, it can be incredibly helpful until the serial
console is working. You have to call at91_debug_init() first. You can
put at91_debug_putn(...) into the printk function so that the whole
printk output is placed into the memory buffer, or place
at91_debug_str(..) calls into the source.
Regards,
Erwin
More information about the uClinux-dev
mailing list