Chinaunix首页 | 论坛 | 博客
  • 博客访问: 581810
  • 博文数量: 126
  • 博客积分: 4379
  • 博客等级: 上校
  • 技术积分: 2110
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-06 22:35
文章分类

全部博文(126)

文章存档

2012年(5)

2011年(3)

2010年(2)

2009年(116)

分类: 嵌入式

2009-11-21 15:02:53

 

RAMDISK as rootfs


固化

固化RAMDISK到NAND FLASH中:
        "upsafefs="     "tftp 30008000 safefs.img;"                     \
                        "nand erase clean 00400000 $filesize;"          \
                        "nand write.jffs2 30008000 00400000 $filesize\0" \

其实不用固化RANDISK到NAND中,直接从U盘加载即可。

加载

从NAND FLASH加载RAMDISK:
到RAM中,地址为0x31800000,大小16M
nand read.jffs2 31800000 00400000 1000000

从U盘加载RAMDISK:
usb start
setenv dev 0:1
fatload usb $dev 0x31800000 ramdisk.img 或者 fatload usb 0:1 0x31800000 ramdisk.img




参数

U-Boot启动参数:
setenv bootargs "root=/dev/ram rw initrd=0x31800000,16M console=tty0 console=ttySAC0,115200"


进入安全模式

首先输入命令,进行启动参数设置 :

U-Boot$  setenv bootargs "root=/dev/ram rw initrd=0x31800000,16M console=ttySAC0,115200"

然后输入加载ramdisk和加载内核并启动的命令:

U-Boot$ run loadramdisk;run yboot


奇怪的是,如果将设置参数的命令和加载RAM盘以及内核的命令合成一条命令,会出现错误(红色标志)

Starting kernel ...


Uncompressing Linux................................................................................................................................. done, booting the kernel.

Linux version 2.6.28 (root@localhost.localdomain) (gcc version 3.4.1) #117 Wed Mar 11 13:02:33 CST 2009

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

CPU: VIVT data cache, VIVT instruction cache

Machine: ABING2440

Memory policy: ECC disabled, Data cache writeback

INITRD: 0x31800000+0x04000000 extends beyond physical memory - disabling initrd

CPU S3C2440A (id 0x32440001)

......

yaffs: dev is 1048576 name is "ram0"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 1.0, "ram0"
yaffs: dev is 1048576 name is "ram0"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 1.0, "ram0"
List of all partitions:
1f00           32768 mtdblock0 (driver?)
1f01          225280 mtdblock1 (driver?)
No filesystem could mount root, tried:  ext2 vfat msdos iso9660 yaffs yaffs2
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)


出错信息是从文件arch/arm/mm/init.c里面打印出来的,从错误信息来看,应该是phys_initrd_size的值传递错了,传递为实际RAM的大小了,本应该是radisk的大小的。
文件:arch/arm/mm/init.c

static int __init check_initrd(struct meminfo *mi)
{
        int initrd_node = -2;
#ifdef CONFIG_BLK_DEV_INITRD
        unsigned long end = phys_initrd_start + phys_initrd_size;

        /*
         * Make sure that the initrd is within a valid area of
         * memory.
         */
        if (phys_initrd_size) {
                unsigned int i;

                initrd_node = -1;

                for (i = 0; i < mi->nr_banks; i++) {
                        struct membank *bank = &mi->bank[i];
                        if (bank_phys_start(bank) <= phys_initrd_start &&
                            end <= bank_phys_end(bank))
                                initrd_node = bank->node;
                }
        }

        if (initrd_node == -1) {
                printk(KERN_ERR "INITRD: 0x%08lx+0x%08lx extends beyond "
                       "physical memory - disabling initrd\n",
                       phys_initrd_start, phys_initrd_size);
                phys_initrd_start = phys_initrd_size = 0;
        }
#endif

        return initrd_node;
}

最后发现是默认命令的RAMDISK大小写错了,应该是16M的,却写成了64M。
阅读(2073) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~