Hi Shaunglin, Try removing the 'root=/dev/ram0' from your command line. You can add 'rootfstype=romfs' if you want but it should work w/o it.
Thanks, Lance Shuanglin Wang wrote: > Hi Lance, > > I'm doing similar things. I patched the kernel with your code, but i > got an kernel panic. The boot log is: > > /---------------------------------------------------------------------/ > Kernel command line: root=/dev/ram0 > ... > io scheduler noop registered (default) > atmel_usart.0: ttyS0 at MMIO 0xf800f000 (irq = 11) is a ATMEL_SERIAL > RAMDISK driver initialized: 1 RAM disks of 1024K size 1024 blocksize > uclinux[mtd]: RAM probe address=0xf02f0 size=0x1e000 > Creating 1 MTD partitions on "RAM": > 0x00000000-0x0001e000 : "ROMfs" > mtd: Giving out device 0 to ROMfs > uclinux[mtd]: set ROMfs to be root filesystem > Generic platform RAM MTD, (c) 2004 Simtec Electronics > VFS: Can't find a romfs filesystem on dev ram0. > No filesystem could mount root, tried: romfs > Kernel panic - not syncing: VFS: Unable to mount root fs on > unknown-block(1,0) > /---------------------------------------------------------------------/ > > I made further test on it. And it seems it get an empty super inode > from romfs. > > Did I miss something in kernel configuration or kernel command line? > > Thansk a lot. > > Shuanglin > > > > > Lance Spaulding wrote: > >> Mickael Sergent wrote: >> >> >>> Hello, >>> >>> I'm trying to port uclinux 2.6.x on dev. board based on ARM946-E-S. (I >>> use uClinux-dist 20070130) >>> >>> I would like to have kernel and ROMfs entirely in RAM but it seems to >>> be impossible on ARM architecture. >>> >>> On uclinux 2.4 version a switch (CONFIG_RAM_ATTACHED_ROMFS) can be >>> used to do this. >>> >>> Does an equivalent exist in 2.6 version ? >>> >>> >>> I tried to use CONFIG_MTD_UCLINUX_EBSS (after having defined _ebss >>> symbol in the end of kernel) but it doesn't solve problem (because RAM >>> where is stored ROMfs is used by uclinux), so a patch is needed to >>> reserve ROMfs memory >>> >>> Do you know another solution to put ROMfs at the end of kernel ? >>> >>> Thanks a lot ! >>> >>> Best regards, >>> >>> Mickael. >>> >>> ------------------------------------------------------------------------ >>> >>> >>> _______________________________________________ >>> uClinux-dev mailing list >>> uClinux-dev@uclinux.org >>> http://mailman.uclinux.org/mailman/listinfo/uclinux-dev >>> This message was resent by uclinux-dev@uclinux.org >>> To unsubscribe see: >>> http://mailman.uclinux.org/mailman/options/uclinux-dev >>> >> Hi Mickael, >> >> We use a ram based rom filesystem on our ARM products (including ones >> using an arm946). I've attached a small patch of the changes I made to >> get this to work. Note that we use little-endian exclusively so if you >> are using big-endian you will need to change the code slightly. >> Thanks, >> Lance >> >> >> ------------------------------------------------------------------------ >> >> diff -Naur >> uClinux-dist.orig/linux-2.6.x/arch/arm/kernel/head-common.S >> uClinux-dist/linux-2.6.x/arch/arm/kernel/head-common.S >> --- uClinux-dist.orig/linux-2.6.x/arch/arm/kernel/head-common.S >> 2006-06-28 01:22:16.000000000 -0600 >> +++ uClinux-dist/linux-2.6.x/arch/arm/kernel/head-common.S >> 2007-04-18 17:57:48.000000000 -0600 >> @@ -10,7 +10,6 @@ >> * published by the Free Software Foundation. >> * >> */ >> - >> .type __switch_data, %object >> __switch_data: >> .long __mmap_switched >> @@ -41,7 +40,6 @@ >> ldrne fp, [r4], #4 >> strne fp, [r5], #4 >> bne 1b >> - >> mov fp, #0 @ Clear BSS (and zero fp) >> 1: cmp r6, r7 >> strcc fp, [r6],#4 >> @@ -215,3 +213,41 @@ >> bl __lookup_machine_type >> mov r0, r5 >> ldmfd sp!, {r4 - r6, pc} >> + >> +#ifdef CONFIG_MTD_UCLINUX >> + .type __relocate_romfs, %function >> +__relocate_romfs: >> + adr r4, romfsinfo >> + ldmia r4!, {r6, r7} >> + bic r6, r6, #0xc0000000 >> + bic r7, r7, #0xc0000000 >> + + /* move the ram based rom filesystem to its correct final >> location... */ >> + /* the value is stored >> big-endian */ >> + mov fp, #0 >> + add r4,r6,#8 >> + ldrb r4,[r4] >> + orr fp, fp, r4, LSL #24 >> + add r4,r6,#9 >> + ldrb r4,[r4] >> + orr fp, fp, r4, LSL #16 >> + add r4,r6,#10 >> + ldrb r4,[r4] >> + orr fp, fp, r4, LSL #8 >> + add r4,r6,#11 >> + ldrb r4,[r4] >> + orr fp, fp, r4, LSL #0 >> + add r4, r6, fp >> + add fp, r7, fp >> + sub r6, r6, #4 >> +1: ldr r5, [r4] >> + str r5, [fp] >> + sub r4, r4, #4 >> + sub fp, fp, #4 >> + cmp r4, r6 >> + bne 1b >> + mov pc, lr >> +romfsinfo: >> + .long __bss_start @ r6 >> + .long _end @ r7 >> +#endif >> diff -Naur uClinux-dist.orig/linux-2.6.x/arch/arm/kernel/head-nommu.S >> uClinux-dist/linux-2.6.x/arch/arm/kernel/head-nommu.S >> --- uClinux-dist.orig/linux-2.6.x/arch/arm/kernel/head-nommu.S >> 2007-01-29 18:55:08.000000000 -0700 >> +++ uClinux-dist/linux-2.6.x/arch/arm/kernel/head-nommu.S >> 2007-04-19 08:25:58.000000000 -0600 >> @@ -16,7 +16,6 @@ >> >> #include <asm/assembler.h> >> #include <asm/mach-types.h> >> -#include <asm/procinfo.h> >> #include <asm/ptrace.h> >> #include <asm/asm-offsets.h> >> #include <asm/thread_info.h> >> @@ -41,6 +40,9 @@ >> ldr r1, =machine_arch_type @ find the machine type >> msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode >> @ and irqs disabled >> +#ifdef CONFIG_MTD_UCLINUX >> + bl __relocate_romfs >> +#endif #ifndef CONFIG_CPU_CP15 >> ldr r9, =CONFIG_PROCESSOR_ID >> #else >> diff -Naur uClinux-dist.orig/linux-2.6.x/arch/arm/kernel/head.S >> uClinux-dist/linux-2.6.x/arch/arm/kernel/head.S >> --- uClinux-dist.orig/linux-2.6.x/arch/arm/kernel/head.S >> 2006-11-29 19:03:00.000000000 -0700 >> +++ uClinux-dist/linux-2.6.x/arch/arm/kernel/head.S 2007-04-19 >> 08:27:23.000000000 -0600 >> @@ -16,7 +16,6 @@ >> >> #include <asm/assembler.h> >> #include <asm/domain.h> >> -#include <asm/procinfo.h> >> #include <asm/ptrace.h> >> #include <asm/asm-offsets.h> >> #include <asm/memory.h> >> @@ -73,6 +72,9 @@ >> msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode >> @ and irqs disabled >> mrc p15, 0, r9, c0, c0 @ get processor id >> +#ifdef CONFIG_MTD_UCLINUX >> + bl __relocate_romfs >> +#endif bl __lookup_processor_type @ r5=procinfo >> r9=cpuid >> movs r10, r5 @ invalid processor (r5=0)? >> beq __error_p @ yes, error 'p' >> diff -Naur uClinux-dist.orig/linux-2.6.x/arch/arm/mm/init.c >> uClinux-dist/linux-2.6.x/arch/arm/mm/init.c >> --- uClinux-dist.orig/linux-2.6.x/arch/arm/mm/init.c 2006-11-29 >> 19:03:01.000000000 -0700 >> +++ uClinux-dist/linux-2.6.x/arch/arm/mm/init.c 2007-04-19 >> 08:28:11.000000000 -0600 >> @@ -99,6 +99,23 @@ >> unsigned int start_pfn, bank, bootmap_pfn; >> >> start_pfn = PAGE_ALIGN(__pa(&_end)) >> PAGE_SHIFT; >> +#ifdef CONFIG_MTD_UCLINUX >> + { >> + /* If using a romfs in ram, move the >> bitmap */ >> + extern char _ebss; >> + unsigned char *p; >> + unsigned romfslen; >> + unsigned ressiz; >> + p=(unsigned char *)&_ebss; >> + romfslen=p[8]; >> + romfslen=(romfslen<<8)+p[9]; >> + romfslen=(romfslen<<8)+p[10]; >> + romfslen=(romfslen<<8)+p[11]; >> + ressiz=((unsigned)p+romfslen); >> + start_pfn=PAGE_ALIGN(__pa(ressiz)) >> PAGE_SHIFT; >> + } >> + +#endif >> bootmap_pfn = 0; >> >> for_each_nodebank(bank, mi, node) { >> diff -Naur uClinux-dist.orig/linux-2.6.x/arch/arm/mm/mmu.c >> uClinux-dist/linux-2.6.x/arch/arm/mm/mmu.c >> --- uClinux-dist.orig/linux-2.6.x/arch/arm/mm/mmu.c 2006-11-29 >> 16:28:08.000000000 -0700 >> +++ uClinux-dist/linux-2.6.x/arch/arm/mm/mmu.c 2007-04-19 >> 08:33:23.000000000 -0600 >> @@ -601,6 +601,24 @@ >> reserve_bootmem_node(pgdat, __pa(swapper_pg_dir), >> PTRS_PER_PGD * sizeof(pgd_t)); >> >> +#ifdef CONFIG_MTD_UCLINUX >> + { >> + /* If using a romfs in ram reserve this >> memory... */ >> + extern char _ebss; >> + unsigned char *p; >> + unsigned romfslen; >> + unsigned ressiz; >> + p=(unsigned char *)&_ebss; >> + romfslen=p[8]; >> + romfslen=(romfslen<<8)+p[9]; >> + romfslen=(romfslen<<8)+p[10]; >> + romfslen=(romfslen<<8)+p[11]; >> + ressiz=((unsigned)p+romfslen); >> + ressiz=((ressiz+4095)&0xfffff000); /* align on page >> boundary */ >> + reserve_bootmem_node(pgdat, __pa(p), (ressiz-(unsigned)p)); \ >> + } >> +#endif >> + >> /* >> * Hmm... This should go elsewhere, but we really really need to >> * stop things allocating the low memory; ideally we need a better >> diff -Naur uClinux-dist.orig/linux-2.6.x/arch/arm/mm/nommu.c >> uClinux-dist/linux-2.6.x/arch/arm/mm/nommu.c >> --- uClinux-dist.orig/linux-2.6.x/arch/arm/mm/nommu.c 2006-12-12 >> 07:16:47.000000000 -0700 >> +++ uClinux-dist/linux-2.6.x/arch/arm/mm/nommu.c 2007-04-18 >> 18:03:16.000000000 -0600 >> @@ -6,11 +6,14 @@ >> #include <linux/module.h> >> #include <linux/mm.h> >> #include <linux/pagemap.h> >> +#include <linux/bootmem.h> >> >> #include <asm/cacheflush.h> >> #include <asm/io.h> >> #include <asm/page.h> >> >> +#include <asm/mach/arch.h> >> + >> #include "mm.h" >> >> extern void _stext, __data_start, _end; >> @@ -36,6 +39,24 @@ >> * alloc_page breaks with error, although it is not NULL, but "0." >> */ >> reserve_bootmem_node(pgdat, CONFIG_VECTORS_BASE, PAGE_SIZE); >> + >> +#ifdef CONFIG_MTD_UCLINUX >> + { >> + /* Lance: If using a romfs in ram reserve this >> memory... */ >> + extern char _ebss; >> + unsigned char *p; >> + unsigned romfslen; >> + unsigned ressiz; >> + p=(unsigned char *)&_ebss; >> + romfslen=p[8]; >> + romfslen=(romfslen<<8)+p[9]; >> + romfslen=(romfslen<<8)+p[10]; >> + romfslen=(romfslen<<8)+p[11]; >> + ressiz=((unsigned)p+romfslen); >> + ressiz=((ressiz+4095)&0xfffff000); /* align on page >> boundary */ >> + reserve_bootmem_node(pgdat, __pa(p), (ressiz-(unsigned)p)); \ >> + } >> +#endif >> } >> >> /* >> diff -Naur uClinux-dist.orig/linux-2.6.x/drivers/mtd/maps/uclinux.c >> uClinux-dist/linux-2.6.x/drivers/mtd/maps/uclinux.c >> --- uClinux-dist.orig/linux-2.6.x/drivers/mtd/maps/uclinux.c >> 2006-10-11 01:07:52.000000000 -0600 >> +++ uClinux-dist/linux-2.6.x/drivers/mtd/maps/uclinux.c 2007-04-19 >> 08:01:09.000000000 -0600 >> @@ -23,6 +23,7 @@ >> #include <asm/io.h> >> >> /****************************************************************************/ >> >> +#define CONFIG_MTD_UCLINUX_EBSS /* Lance: this isn't defined in the >> config system */ >> >> #ifdef CONFIG_MTD_UCLINUX_EBSS >> #define MAP_TYPE "map_ram" >> @@ -75,7 +76,7 @@ >> unsigned long addr = (unsigned long) CONFIG_MTD_UCLINUX_ADDRESS; >> >> mapp = &uclinux_map; >> - mapp->phys = addr; >> + mapp->phys = __pa(addr); /* Lance: changed to get real phys >> addr */ >> mapp->size = PAGE_ALIGN(ntohl(*((unsigned long *)(addr + 8)))); >> mapp->bankwidth = 4; >> >> >> >> ------------------------------------------------------------------------ >> >> _______________________________________________ >> uClinux-dev mailing list >> uClinux-dev@uclinux.org >> http://mailman.uclinux.org/mailman/listinfo/uclinux-dev >> This message was resent by uclinux-dev@uclinux.org >> To unsubscribe see: >> http://mailman.uclinux.org/mailman/options/uclinux-dev >> > _______________________________________________ > uClinux-dev mailing list > uClinux-dev@uclinux.org > http://mailman.uclinux.org/mailman/listinfo/uclinux-dev > This message was resent by uclinux-dev@uclinux.org > To unsubscribe see: > http://mailman.uclinux.org/mailman/options/uclinux-dev > _______________________________________________ uClinux-dev mailing list uClinux-dev@uclinux.org http://mailman.uclinux.org/mailman/listinfo/uclinux-dev This message was resent by uclinux-dev@uclinux.org To unsubscribe see: http://mailman.uclinux.org/mailman/options/uclinux-dev