* [U-Boot] [OT] initrd problem with m68k linux
@ 2010-04-06 13:38 Wolfgang Wegner
2010-04-07 11:30 ` Wolfgang Wegner
0 siblings, 1 reply; 2+ messages in thread
From: Wolfgang Wegner @ 2010-04-06 13:38 UTC (permalink / raw)
To: u-boot
Dear all,
I know it is a little off-topic for this list, but maybe it is somewhat
related to U-Boot. I really do not know at which stage I am making a
mistake here.
I have a MCF54455 board running U-Boot and a slightly modified kernel
from Freescale (linux 2.6.25). I can boot the system using initramfs
by including the (initial) root fs into the kernel via CONFIG_INITRAMFS_SOURCE.
CONFIG_SYS_BOOTMAPSZ is set to 64MB:
#define CONFIG_SYS_BOOTMAPSZ (CONFIG_SYS_SDRAM_BASE + (64 << 20))
Now I wanted to split the images and load the initrd as a seperate
image. So I made a cramfs image:
/usr/sbin/mkcramfs rootfs rootfs.cramfs
/usr/local/bin/mkimage -n 'Test Ramdisk Image' -A m68k -O linux -T ramdisk -C none -d rootfs.cramfs rootfs.img
Then I load both images via tftp:
-> tftp 0x42000000 192.168.1.100:rootfs.img
[...]
-> tftp 0x44000000 192.168.1.100:uImage
[...]
-> setenv bootargs "initrd=/dev/ram rw root=ram0"
-> setenv initrd_high 0x44000000
-> bootm 0x44000000 0x42000000
## Booting kernel from Legacy Image at 44000000 ...
Image Name: Linux-2.6.25
Created: 2010-04-06 13:14:42 UTC
Image Type: M68K Linux Kernel Image (gzip compressed)
Data Size: 1318376 Bytes = 1.3 MB
Load Address: 40020000
Entry Point: 40020000
Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 42000000 ...
Image Name: Test Ramdisk Image
Created: 2010-04-06 11:23:36 UTC
Image Type: M68K Linux RAMDisk Image (uncompressed)
Data Size: 6213632 Bytes = 5.9 MB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
Loading Ramdisk to 43a13000, end 44000000 ... OK
Linux version 2.6.25 (router at labor2.local) (gcc version 4.3.3 (Sourcery G++ Lite
4.3-209) ) #46 Tue Apr 6 15:14:31 CEST 2010
starting up linux startmem 0x402f0000, endmem 0x48000000, size 125
MB
console [ttyS0] enabled
** availmem=0x402f2000 pa(am)=0x402f2000
** mstart=0x402f0000 mend=0x47ffe000
bpfn=0x20000 minpfn=0x20178 maxpfn=0x23fff
dma: phys base=0x402f2000 phys end=0x40ffffff virt base=0xef000000
mda=0xefffffff pa(mda)=0x40ffffff
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16312
Kernel command line: initrd=/dev/ram rw root=/dev/ram
[...]
prepare_namespace
rd_load_image
1, from = /initrd.image
List of all partitions:
0100 32767 ram0 (driver?)
0101 32767 ram1 (driver?)
0102 32767 ram2 (driver?)
0103 32767 ram3 (driver?)
No filesystem could mount root, tried: ext3 ext2 cramfs minix msdos vfat romfs
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)
As can be seen, I added some printks to see what is going on at all.
rd_load_image() fails at
in_fd = sys_open(from, O_RDONLY, 0);
because "from" is set to "/initrd.image", which is not available. But where
should it come from if there is no root fs yet?
Could anybody point me to where I should look for the mistake? Can it
be a problem in my U-Boot configuration, or is it definitely a problem
with the kernel [configuration]?
Thanks for any comments!
Regards,
Wolfgang
^ permalink raw reply [flat|nested] 2+ messages in thread
* [U-Boot] [OT] initrd problem with m68k linux
2010-04-06 13:38 [U-Boot] [OT] initrd problem with m68k linux Wolfgang Wegner
@ 2010-04-07 11:30 ` Wolfgang Wegner
0 siblings, 0 replies; 2+ messages in thread
From: Wolfgang Wegner @ 2010-04-07 11:30 UTC (permalink / raw)
To: u-boot
Hi,
I found the problem: the linux kernel 2.6.25 from the freescale LTIB
is missing support for initrd via U-Boot.
With the patch below I was able to use an initramfs from a seperate
image, I suppose initrd should work, too. It is a quick hack, but it
works for me and I wanted to give the solution after having asked
here.
Regards,
Wolfgang
diff -ur linux-2.6.25_orig_for_diff/arch/m68k/coldfire/config.c linux-2.6.25/arch/m68k/coldfire/config.c
--- linux-2.6.25_orig_for_diff/arch/m68k/coldfire/config.c 2010-01-25 17:27:29.000000000 +0100
+++ linux-2.6.25/arch/m68k/coldfire/config.c 2010-04-07 11:53:56.000000000 +0200
@@ -33,6 +33,7 @@
#include <asm/movs.h>
#include <asm/page.h>
#include <asm/pgalloc.h>
+#include <linux/initrd.h>
#include <asm/mcfsim.h>
@@ -128,6 +129,14 @@
uboot_info.cmd_line_start = (*(u32 *)(uboot_info_stk+12)) + offset;
uboot_info.cmd_line_stop = (*(u32 *)(uboot_info_stk+16)) + offset;
+ if(uboot_info.initrd_start && uboot_info.initrd_end &&
+ (uboot_info.initrd_end > uboot_info.initrd_start)) {
+ initrd_start = uboot_info.initrd_start;
+ initrd_end = uboot_info.initrd_end;
+ printk(KERN_INFO "initrd at 0x%lx:0x%lx\n",
+ initrd_start, initrd_end);
+ }
+
/* copy over mac addresses */
memcpy(uboot_enet0, uboot_info.bdi->bi_enet0addr, 6);
memcpy(uboot_enet1, uboot_info.bdi->bi_enet1addr, 6);
diff -ur linux-2.6.25_orig_for_diff/arch/m68k/kernel/setup.c linux-2.6.25/arch/m68k/kernel/setup.c
--- linux-2.6.25_orig_for_diff/arch/m68k/kernel/setup.c 2010-01-25 17:27:29.000000000 +0100
+++ linux-2.6.25/arch/m68k/kernel/setup.c 2010-04-07 11:53:30.000000000 +0200
@@ -341,6 +341,19 @@
paging_init();
+#if defined(CONFIG_COLDFIRE)
+ if (initrd_start && initrd_end &&
+ (initrd_end > initrd_start)) {
+ unsigned long initrd_size = initrd_end - initrd_start;
+ reserve_bootmem_node(__virt_to_node(phys_to_virt(initrd_start)),
+ initrd_start, initrd_size,
+ BOOTMEM_DEFAULT);
+ initrd_start = (unsigned long)phys_to_virt(initrd_start);
+ initrd_end = initrd_start + initrd_size;
+ printk("initrd: %08lx - %08lx\n", initrd_start, initrd_end);
+ }
+#endif
+
#if !defined(CONFIG_SUN3) && !defined(CONFIG_COLDFIRE)
for (i = 1; i < m68k_num_memory; i++)
free_bootmem_node(NODE_DATA(i), m68k_memory[i].addr,
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-04-07 11:30 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-06 13:38 [U-Boot] [OT] initrd problem with m68k linux Wolfgang Wegner
2010-04-07 11:30 ` Wolfgang Wegner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox