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

Reply via email to