|
|
*再请教一个mtd+jffs2的rootfs启动问题*
|
|
我用的板子上有一个2M的norflash(上面有bootloader+kernel)和一个8M的dataflash(AT45DB642),我在bootloader中预先把jffs2.img拷入了dataflash的首地址开始的地方。kernel启动时的信息如下:
Linux version 2.4.19-rmk7 (root@localhost.localdomain) (gcc version 2.95.3 20010
315 (release)) #29 Mon Dec 22 16:47:43 CST 2003
CPU: Arm920Tid(wb) revision 0
Machine: ATMEL AT91RM9200
On node 0 totalpages: 8192
zone(0): 8192 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: root=/dev/mtdblock1 console=ttyS0,115200 mem=32M
Calibrating delay loop... 89.70 BogoMIPS
Memory: 32MB = 32MB total
Memory: 31020KB available (1097K code, 209K data, 52K init)
Dentry cache hash table entries: 4096 (order: 3, 32768 bytes)
Inode cache hash table entries: 2048 (order: 2, 16384 bytes)
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 8192 (order: 3, 32768 bytes)
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
Starting kswapd
devfs: v1.12a (20020514) Richard Gooch (rgooch@atnf.csiro.au)
devfs: boot_options: 0x1
JFFS2 version 2.1. (C) 2001 Red Hat, Inc., designed by Axis Communications AB.
loop: loaded (max 8 devices)
physmap flash device: 200000 at 10000000
CFI: Found no Physically mapped flash device at location zero
Search for id:(1f c0) interleave(1) type(2)
Found: Atmel AT49BV16X
Physically mapped flash: Found 1 x16 devices at 0x0 in 16-bit mode
number of JEDEC chips: 1
mtd: Giving out device 0 to Physically mapped flash
usb.c: registered new driver hub
ttyS%d0 at MEM 0xfefff200 (irq = 1) is a AT91_SERIAL
ttyS%d1 at MEM 0xfefc4000 (irq = 7) is a AT91_SERIAL
eth0: Link now 100-FullDuplex
eth0: AT91 ethernet at 0xfefbc000 int=24 100-FullDuplex (12:34:56:78:99:aa)
AT91 Watchdog Timer enabled (5 seconds)
AT91 Real Time Clock driver
usb-ohci.c: USB OHCI at membase 0xc2a06000, IRQ 23
usb.c: new USB bus registered, assigned bus number 1
hub.c: USB hub found
hub.c: 2 ports detected
i2c-dev.o: Registered 'AT91RM9200' as minor 0
Found AT91 i2c
AT91 SPI driver loaded
at91_dataflash: Atmel AT45DB642 detected [spi0] (8650752 bytes)
Creating 2 MTD partitions on "Atmel AT45DB642":
0x00000000-0x00700000 : "My JFFS2 FileSyetem"
mtd: partition "My JFFS2 FileSyetem" doesn't end on an erase block -- force read
-only
mtd: Giving out device 1 to My JFFS2 FileSyetem
0x00700000-0x00840000 : "othersystem"
mtd: partition "othersystem" doesn't start on an erase block boundary -- force r
ead-only
mtd: Giving out device 2 to othersystem
SmartMedia card inserted.
No NAND device found!!!
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 2048 bind 2048)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com
Kernel panic: VFS: Unable to mount root fs on 1f:01
请问kernel是不是没有找到jffs2的image?(按照上面的信息,root=/dev/mtdblock1应该正确呀)如果我启动参数改为root=/dev/mtdblock2,则启动信息的最后部分显示:
NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com
VFS: Mounted root (jffs2 filesystem) readonly.
mount_devfs_fs(): unable to mount devfs, err: -2
Freeing init memory: 52K
Warning: unable to open an initial console.
Kernel panic: No init found. Try passing init= option to kernel.
我都糊涂了,不知道这两种那种更接近成功呀?谢谢老大们了!
|
|
|
Re: *再请教一个mtd+jffs2的rootfs启动问题*
|
|
just999, 你的mtd+jffs2 作为root FS的问题解决了吗?
我现在也想这样做,不知道如何下手好, 能不能分享一下你的处理过程?
|
|
|
Re: *再请教一个mtd+jffs2的rootfs启动问题*
|
|
JFFS2文件系统要求存储节点不能跨越擦写块存放,在用mkfs.jffs2制作文件系统镜像时要根据所用的flash传入擦写块的大小参数。我估计你的镜像制作上出问题了!
|
|
|
Re: *再请教一个mtd+jffs2的rootfs启动问题*
|
|
这几天我也一直困在用j'f'fs2作rootfs上面!不过我用的板子和cpu,flash芯片跟你不一样!
我用的是mizilinux+s3c2410,
借这位兄弟的地方问几个问题:
1)我在那里传递内核命令参数,即:
Kernel command line: root=/dev/mtdblock1 console=ttyS0,115200 mem=32M 里面所指的?
2)
cramfs: wrong magic
FAT: bogus logical sector size 65535
Kernel panic: VFS: Unable to mount root fs on 61:02
出现上面这个错误?是不是说明在我的内核代码里面还是支持cramfs的(我已经选择支持jffs2),怎样修改
内核代码?
3)有没有人成功过?写篇总结何如?
thanks in advance
|
|
|
我做过,不过我用的只有一块flash,不象你那样是两块
|
|
应该说,你第一种方法肯定是不行的,因为mtdblock1是指向了你的kernel。
我用的是micron的syncflash,划分是这样的:1M的bootloader,2M的kernel,剩下的13M为jffs2的root
在我这里mtdblock2指向了root
我觉得你的第二种方法 已经成功将root加载上去了,只是后台在打开控制台的时候出错了。
VFS: Mounted root (jffs2 filesystem) readonly.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mount_devfs_fs(): unable to mount devfs, err: -2
Freeing init memory: 52K
Warning: unable to open an initial console.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Kernel panic: No init found. Try passing init= option to kernel.
|
|
|
Re: 我做过,不过我用的只有一块flash,不象你那样是两块
|
|
我一直是这样用的
commandline:root=1F02,其他都差不多,
用jffs2做rootfs是可以的
|
|
|
Re: *再请教一个mtd+jffs2的rootfs启动问题*
|
|
根据你的操作1f01放的是kernel,1f02放的是rootfs。
...Freeing init memory...表明系统找到了init并执行之,严格来说算是成功运行了应用程序,但无法进入到shell。
应该显示输出上有问题,不知你用的是vga还是串口作输出,请确保存在/dev/下有相关的设备名,可以写一个测试程序编译成静态的拷成/sbin/init,输出的设备设置为/dev/ttyS0或/dev/tty0
|
|
|
Re: *再请教一个mtd+jffs2的rootfs启动问题*
|
|
请问如何生成romfs.ing?谢谢了,
|
|
|
Re: *再请教一个mtd+jffs2的rootfs启动问题*
|
|
在将rootfs写入flash前,需要把rootfs所在的分区全部擦除一遍。试试看。
|
|
|
我和你用的flash是一样的,但是我在启动进入jffs2后却不能进行写操作!
|
|
我给的根文件系统分区是12M,下下去的jffs2文件系统大小是6m,但我用df命令看到的分区使用率却总是100%,这是怎么回事呢?
|
|
|
Re: *再请教一个mtd+jffs2的rootfs启动问题*
|
|
你这种情况,我遇见过。你map下的相应文件可能有问题,还有就是那个设备代号应该是1f0x。
|
|
|
Re: 我和你用的flash是一样的,但是我在启动进入jffs2后却不能进行写操作!
|
|
若是read-only的話,好像就會顯示100%,無論哪種filesystem.
|
|
|
Re: 我和你用的flash是一样的,但是我在启动进入jffs2后却不能进行写操作!
|
|
那在哪里能够修改这个只读属性呢?我改了很多地方,最终结果都是一样的。
|