Re: [U-Boot-Users] Kernel hangs after decompressing.

Hi Wolfgang,
I copied the bd_info structure from u-boot.h to rpxclassic.h in the
kernel
This is wrong. You should include ppcboot.h in rpxclassic.h.
Okay, I originally copied the structure from u-boot.h to ppcboot.h. But seeing that another bd_t structure was declared in rpxclassic.h, I decided to replace the structure in rpxclassic.h. Your approach is definitely more elegant. Made the change to rpxclassic.h.
This cannot work. The powerpc kernel requires load address == entry point = 0x0000.
Correct me if I'm wrong, I thought the kernel can be booted from any location in memory, the startup code in the i386 tree can boot the kernel from low and high memory. I should've been more faithful to the documentation. =)
I set the kenrel load address back to 0x0000. I had to move the tftp load address to 0x400000 so that it had enough space to decompress the kernel to low memory. That was the problem I had before because by default tftp loads uImage to 0x100000. But I'm back to the same problem again that as soon as u-boot passes control to the kernel, it hangs without spitting a single meaningful message to the console.
I really need someone to tell me what could possibly go wrong here. =) I switched on the debug messages in hope you might spot something interesting there.
I made the uImage from vmlinux in the top level directory and the vmlinux.gz from arch/ppc but they hanged at the same point.
Did you read the README? You should.
I used the very first method shown in the README to build the uImage from vmlinux. I converted the it to a binary file, gzipped it and used mkimage to build the final image file.
I then used the typical way of building the image that makes use of the vmlinux.gz in arch/ppc/boot/images and run mkimage directly on it. The only thing I haven't tried is building one from an uncompressed image.
Regards, David Ho
U-Boot 0.4.0 (Sep 11 2003 - 14:44:53)
CPU: XPC860xxZPnnD4 at 50 MHz: 16 kB I-Cache 8 kB D-Cache FEC present Board: EP860 I2C: ready DRAM: 16 MB Top of RAM usable for U-Boot at: 01000000 Reserving 130k for U-Boot at: 00fdf000 Reserving 132k for malloc() at: 00fbe000 Reserving 64 Bytes for Board Info at: 00fbdfc0 Reserving 44 Bytes for Global Data at: 00fbdf94 Stack Pointer at: 00fbdf78 New Stack Pointer is: 00fbdf78 Now running in RAM - U-Boot at: 00fdf000 FLASH: 16 MB In: serial Out: serial Err: serial U-Boot relocated to 00fdf000 Net: FEC ETHERNET ### main_loop entered: bootdelay=5
### main_loop: bootcmd="tftpboot; setenv bootargs root=/dev/nfs rw nfsroot =$(ser verip):$(rootpath) ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask): $(hostname): :off; bootm" Hit any key to stop autoboot: 0 => tftp Trying FEC ETHERNET TFTP from server 199.71.138.8; our IP address is 199.71.138.25 Filename 'uImage'. Load address: 0x400000 Loading: ################################################################# ################################################################# ########################################### done Bytes transferred = 883653 (d7bc5 hex) => bootm ## Booting image at 00400000 ... Image Name: Linux Kernel Image Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 883589 Bytes = 862.9 kB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK ## Current stack ends at 0x00FBDBF0 => set upper limit to 0x00800000 ## cmdline at 0x007FFF00 ... 0x007FFF61 bd address = 0x00FBDFC0 memstart = 0x00000000 memsize = 0x01000000 flashstart = 0xFC000000 flashsize = 0x01000000 flashoffset = 0x00000000 sramstart = 0x00000000 sramsize = 0x00000000 immr_base = 0xFA200000 bootflags = 0x00000001 intfreq = 50 MHz busfreq = 50 MHz ethaddr = 00:10:EC:80:3B:49 IP addr = 199.71.138.25 baudrate = 9600 bps No initrd ## Transferring control to Linux (at address 00000000) ...

Dear David,
in message OFEE9207A1.054F5F7A-ON85256D9F.004C558D@nanometrics.ca you wrote:
This cannot work. The powerpc kernel requires load address == entry point = 0x0000.
Correct me if I'm wrong, I thought the kernel can be booted from any location in memory, the startup code in the i386 tree can boot the kernel from low and high memory. I should've been more faithful to the documentation. =)
With U-boot, there is no "statup code", there is just the Linux kernel which must be loaded at 0x0000 and has an entry point at 0x0000.
I set the kenrel load address back to 0x0000. I had to move the tftp load address to 0x400000 so that it had enough space to decompress the kernel to low memory. That was the problem I had before because by default tftp loads uImage to 0x100000. But I'm back to the same problem again that as soon as u-boot passes control to the kernel, it hangs without spitting a single meaningful message to the console.
There has been a lot of reasonable advice what to do:
- attach a BDI2000 and debug the code - print a memory dump of the log_buf area and check for kernel messages there ...
I really need someone to tell me what could possibly go wrong here. =)
Many things can go wrong. Inclding most simple things like that you forgot to pass a console= argument setting the correct baudrate.
Best regards,
Wolfgang Denk
participants (2)
-
DavidHoï¼ nanometrics.ca
-
Wolfgang Denk