Linux内核加载yaffs时出现的问题

出错信息如下:UDF-fs:Nopartitionfound(1)yaffs:devis32505859nameis"mtdblock3"yaffs:passedflag... 出错信息如下:

UDF-fs: No partition found (1)
yaffs: dev is 32505859 name is "mtdblock3"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.3, "mtdblock3"
yaffs: MTD device does not support have the right page sizes
yaffs: dev is 32505859 name is "mtdblock3"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.3, "mtdblock3"
List of all partitions:
1f00 128 mtdblock0 (driver?)
1f01 384 mtdblock1 (driver?)
1f02 3072 mtdblock2 (driver?)
1f03 61440 mtdblock3 (driver?)
No filesystem could mount root, tried: ext3 cramfs vfat iso9660 romfs udf yaffs yaffs2
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,3)

奇怪,yaffs2文件系统我植入内核中去了,MTD分区(smdk_default_nand_part结构)也修改过了,内核选项也选上了nand flash的驱动和对yaffs的支持。而在mtdblock3里面确实有可以正常被挂在的根文件系统映像。
可为什么到最后还是不行呢???是不是nand flash驱动那边有什么问题吗?
悬赏分不够5分,迟下我赚些分回来再补上。
展开
 我来答
匿名用户
2010-12-08
展开全部
你只是想移植吧,具体的操作如下,可能不是一一一致,但是大概个流程都是这样,建议你去下载比较高版本的代码进行移植,因为越高版本我们要下的功夫可能会更少。

1。修改内核源码根目录下的Makefile文件
#ARCH ?= arm
#CROSS_COMPILE ?=arm-linux-

2。修改arch/arm/plat-s3c24xx/common-smdk.c文件,修改Nand Flash的分区信息和Nand Flash的硬件信息。这里的分区一定要和你的bootloader的一致,你可以参考smdk_default_nand_part[]这个数据结构的做法。

3。还是2中用到的文件,修改static struct s3c2410_platform_nand smdk_nand_info = {
.tacls = 0,
.twrph0 = 30, //这 三个数字要改的 以前是20 60 20
.twrph1 = 0,
.nr_sets = ARRAY_SIZE(smdk_nand_sets),
.sets = smdk_nand_sets,
};

4。修改drivers/mtd/nand/s3c2410.c中s3c2410_nand_init_chip函数的NAND_ECC_SOFT为NAND_ECC_NONE。

5。晶振频率:修改arch/arm/mach-s3c2440/mach-smdk2440.c
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(12000000);//改成和你的一样
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}

6。添加对yaffs2文件系统的支持:
下载yaffs2的源码包,解压后进入其中,其加入Linux内核(打补丁的方式)
#cd yaffs2
#./patch-ker.sh c $you_kernel_path(你的内核代码的目录)

7。配置内核
先拷贝s3c2410开发板的默认配置到内核根目录下,以简化配置过程
# cp arch/arm/configs/s3c2410_defconfig .config
# make menuconfig

1.General setup --->
[*] Configure standard kernel features (for small systems) --->

2. System Type ---->
[*] S3C2410 DMA support [*] Support ARM920T processor
S3C2410 Machines --->
[*] SMDK2410/A9M2410
S3C2440 Machines --->
[*] SMDK2440
[*] SMDK2440 with S3C2440 CPU module

3.Boot options --->
将 (root=/dev/hda1 ro init=/bin/bash console=ttySAC0) Default kernel command string
改成 (noinitrd root=/dev/mtdblock2 console=ttySAC0,115200 init=/linuxrc )
这里要特别注意root=/dev/mtdblock2 这个参数,mtdblock2是你的根文件系统所在的位置,和你在bootloader的分配有关,当然也和上述2。步骤的密切相关。不行的话多试几次。

4.[*] Enable loadable module support --->
[*] Module unloading
[*] Automatic kernel module loading
选择这两个,剩下的可以去掉
5.Device Drivers --->
<*> Memory Technology Device (MTD) support --->
[*] MTD partitioning support
<*> NAND Device Support --->
<*> NAND Flash support for S3C2410/S3C2440 SoC
[ ] S3C2410 NAND Hardware ECC //这个要去掉

6.File systems----->
Miscellaneous filesystems --->
<*>YAFFS2 file system support
7.make zImage

这个配置是2440和2410都通用的。网上有很多这样的教程。

另外还有一点要很注意而且也是比较头疼的:文件系统的制作,这个东西不好你弄,个人建议如果你想进驻嵌入式linux这个行业的话,韦东山的《嵌入式linux应用开发完全手册》很适合初学者学习,通过本书你会对嵌入式linux开发的整个流程都有个很明朗的认识。
好好学习吧。
帐号已注销
2010-12-07 · 超过16用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:37万
展开全部
很多东西记不得了,但是我记得当时做2.6.20时候
1. Yaffs里面的硬件ECC要关闭
2. 在arch/smdk_S3C2410(我当时的平台)下面也有那个MTD的分区表,这个结构里面的内容必须和你bootloader里面对Flash的分区内容一致

你看是否可以帮助你
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式