1. 根文件系统不能加载 VFS: Cannot open root device "bon/3" or unknown-block(2,0) Please append a correct "root=" boot option Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0) 注意两点: 1)vivi 中的linux_cmd[]是否正确; 原来的是:noinitrd root=/dev/bon/3 init=/linuxrc console=tty0 要改为: noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0 /dev/mtdblock3 代表flash分区的第四个分区 ttySAC0 代表第一个串口
在linux2.6里面用udev来管理设备文件,udev需要内核sysfs和tmpfs的支持,sysfs为udev提供设备入口和uevent通道,tmpfs为udev设备文件提供存放空间,也就是说,在上电之前系统上是没有足够的设备文件可用的,我们需要一些技巧让kernel先引导 起来。 由于在kernel启动未完成以前我们的设备文件不可用,如果使用mtd设备作为rootfs的挂载点,这个时候/dev/mtdblock 这个设备目录是不存在的,我们无法让kernel通过/dev/mtdblock/X这样的设备找到rootfs,这个问题我们可以通过给kernel传递设备号的方式来解决,在linux系统中,mtdblock的主设备号是31,part号从0开始,那么以前的/dev/mtdblock/3就等同于31:03,以次类推,所以我们只需要修改bootloader传给kernel 的cmd line参数,使root=31:03,就可以让kernel在udevd未起来之前成功的找到rootfs。 另外一种方法就是给kernel传递未经归类的设备文件名,在udev未创建之前,所有的设备实际上已经通过sysfs 建立,mtdblockX的位置相对于/sys/block/mtdblockX/dev,这个文件里存放着mtdblockX的设备号,形式与上一种方式相同。这时由于没有相应的udev规则,所有的设备都被隐含地映射到/dev目录下,mtdblockX对应于/dev/mtdbockX,这样我们给kernel传递root=/dev/mtdblock3,kernel发现/dev没有被建立,就自动从映射表里查找对应关系,最后取出/sys/block/mtdblockX/dev里的设备号,完成rootfs的挂载。 2)内核的MTD分区是否有效 下面信息说明MTD分区没有生效: Creating 8 MTD partitions on "NAND 64MiB 3,3V 8-bit": 0x00000000-0x00004000 : "Boot Agent" 0x00000000-0x00200000 : "S3C2410 flash partition 1" 0x00400000-0x00800000 : "S3C2410 flash partition 2" 0x00800000-0x00a00000 : "S3C2410 flash partition 3" 0x00a00000-0x00e00000 : "S3C2410 flash partition 4" 0x00e00000-0x01800000 : "S3C2410 flash partition 5" 0x01800000-0x03000000 : "S3C2410 flash partition 6" 0x03000000-0x04000000 : "S3C2410 flash partition 7"
下面的信息是正确的,与flash分区的信息是一致的 Creating 5 MTD partitions on "NAND 64MiB 3,3V 8-bit": 0x00000000-0x00020000 : "vivi" 0x00020000-0x00030000 : "param" 0x00030000-0x00300000 : "kernel" 0x00300000-0x00600000 : "root" 0x00600000-0x04000000 : "jffs2"
对于2.6 内核的MTD分区信息的修改方法一般有两种,内核编译部分列出的是其中的一种,还有一种在下面给出,我先使用的是下面的方法,MTD分区没有成功,可能是内核版本太高,下面的这种方法应该在2.6.10以下版本上可以(没试过)。
1)修改arch/arm/mach-s3c2410/devs.c文件 点击(此处)折叠或打开
2)修改arch/arm/mach-s3c2410/mach-smdk2410.c 点击(此处)折叠或打开
2.设备文件系统 在内核文件中增加了devfs的配置,方法如下
#vi fs/ Kconfig 点击(此处)折叠或打开
编译、烧写内核,启动后dev下并没有自动建立相关的设备文件节点。查看内核源码,发现fs目录下已经没有devfs这个目录,而在2.4版本的fs目录里有这个文件夹。应该是devfs在我用的内核版本里已经去除了吧,在Linux2.6里已经用udev代替devfs了。查找相关资料,解决这个问题有两个方法:一、移植udev 二、直接用busybox提供的版的udev工具——mdev。Busybox较高版本里面已经提供的这个工具使用方法参考busybox相关说明。为了简单我直接用了mdev这个工具。需要注意的是mdev需要tmpfs和sysfs的支持,将tmpfs挂载到dev目录,mdev要对这个目录读写。sysfs挂载到sys目录。 用mdev管理设备文件虽然设备文件节点建立成功了,但好像太多了,设备节点从ram0到ram15 ,tty很多的节点,有几十个。mdev 还需要进行配置才能更好的工作,这一步我没有做。 3.Flash分区的第五个分区无法挂载 Flash分区的第五个分区一般是用来放应用程序的,并且要把他挂载到mnt/yaffs目录。 我用mount命令挂载没有成功。原因现在也没有找出来。
4.Framebuffer问题 开发板上启动内核是LCD上左上叫没有小企鹅图标,但是在dev下有fb这个设备节点。同样版本的内核在PC机上编译安装后,用vag参数开启Framebuffer启动时可以看到企鹅图标。这个问题也没有解决。 (victor_tlh)文章转自:罗索实验室 [] |