本文共 2134 字,大约阅读时间需要 7 分钟。
使用Initramfs或yaffs2作为根文件系统启动成功,但是Ramdisk作为根文件系统有问题
最近在调一个很郁闷的系统问题: 使用Ramdisk作为根文件系统时,分区结构如图 static struct mtd_partition smdk_default_nand_part[] = { [0] = { .name = "U-Boot", .size = 0x60000, .offset = 0, }, [1] = { .name = "Linux Kernel", .offset = 0x80000, .size = 0x300000, }, [2] = { .name = "RAMDisk", .offset = 0x380000, .size = 0x1000000, }, [3] = { .name = "Yaffs", .offset = 0x1380000, .size = 0x08000000-0x1380000, //0x6C80000 } }; uboot启动参数: #define CONFIG_BOOTARGS "initrd=0x31000000,0x1000000 root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M" //ramdisk #define CONFIG_BOOTCOMMAND "nboot 30008000 0 80000;bootm 30008000" 使用 mkimage -n 'Kernel' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d linux-2.6.33.3/arch/arm/boot/zImage /var/lib/tftpboot/uImage mkimage -n 'Ramdisk' -A arm -O linux -T ramdisk -C gzip -a 0x31000000 -e 0x31000040 -d initrd.gz ramdisk2.gz 做的image 结果只有第一次执行 tftp 0x31000000 initrd.gz nand erase 0x380000 0x1000000 nand write 0x31000000 0x380000 0x520000 后可以正常启动,重启后就提示找不到Ramdisk了。 若把boot command设成 setenv bootcmd "nboot 30008000 0 80000; nand read 0x31000000 0x380000 0x520000; bootm 30008000 0x31000000" 则一次也不能启动成功。 刚开始怀疑是yaffs2的问题,把yaffs2给取消了,也不mount了,问题依旧。 但是若把rootfs放在yaffs2里,参数设为 setenv bootargs noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M setenv bootcmd "nboot 30008000 0 80000;bootm 30008000" 则一切正常,但是因为会留下Flash写操作频繁的隐患。 开动FF上网,没有找到问题的解决方法,倒是找到了initramfs的制作方法。既然initramfs比ramdisk更潮,何不试试? 于是把uboot的参数设为 setenv bootargs root=/dev/ram rw init=/init console=ttySAC0 mem=64M setenv bootcmd "nboot 30008000 0 80000;bootm 30008000" 分区表改为 static struct mtd_partition smdk_default_nand_part[] = { [0] = { .name = "U-Boot", .size = 0x60000, .offset = 0, }, [1] = { .name = "Linux Kernel", .offset = 0x80000, .size = 0x1300000, }, [2] = { .name = "Yaffs", .offset = 0x1380000, .size = 0x08000000-0x1380000, //0x6C80000 } }; 重新做了个将近11M的内核, tftp 0x30008000 uImage nand erase 0x80000 0xC00000 nand write 0x30008000 0x80000 0xB20000 重启一切正常。看来tmpfs还是很有优势的,至少问题没有Ramdisk那么多,那么繁琐,制作系统也灰常简单。 问题是:Ramdisk作为rootfs时,为什么重启后内核找不到rootfs呢? 还是没搞懂。转载地址:http://bhpsi.baihongyu.com/