Linux内核及文件系统移植之jffs2烧录后无法启动

近一周的时候都在玩linux 内核及文件系统移植,使用的版本如下:

Bootloader: u-boot-2010.06.tgz

Kernel:   linux-3.0.y.tgz

BusyBox:  busybox-1.16.1.tgz

搜集相应介绍文档后分别编译出U-boot.bin,uImage和rootfs.jffs2镜像文件(稍后抽空整理相应制作过程),当烧写进16M SPI Flash中,上电重启后却进不了系统。

串口输出以下信息:

困扰了近两天时间。。。。

期间作过很多尝试和测试,确定了我的u-boot可以成功引导别人的可用的内核及文件系统;而烧录我自己的u-boot及uImage之后,内核引导及初始化完毕,挂载文件系统后将要加载必要的内核模块的时候,出现Kernel panic,如下图:


发现问题出在我的根文件系统这里。开始以为是我在镜像烧录的时候没有规划好分区导致烧录的文件系统数据不完整,又对照着文档步骤重新制作了根文件系统,调整分区结构,再次仔仔细细地烧录进去,依旧出现以上错误。

后来在查看制作根文件系统的时候,看到mkfs.jffs2这个生成JFFS2格式文件系统的工具,搜索它的用法,发现它有一个“-e”参数(设定擦除块的大小为(默认: 64KiB)),突然想到上面串口输出的信息中有这么一句:

Further such events for this erase block will not be printed

Node at 0x0024ff48 with length 0x000001bc would run over the end ofthe erase block

Perhaps the file system was created with the wrong erase size?

然后在脚本中找到生成文件系统的命令:

mkfs.jffs2-l -e 0x20000 -d $rootfs_dir -o $target_fs

发现该命令在制作文件系统时块擦除大小设置为128K。于是,当我回过头检查串口输出的系统引导启动信息的时候,终于发现了问题所在:


此处显示该SPI Flash的Block大小为64K。原来是我在制作根文件系统时把块擦除大小设置成了128K,与芯片实际的参数不相符导致文件系统不能正常运行。

果断修改mkfs.jffs2后-e参数后面的值为64K:

mkfs.jffs2-l -e 0x10000 -d $rootfs_dir -o $target_fs

重新烧录了文件系统后,问题得到解决!!!

另外,在设置U-boot启动参数的时候,也要注意rootfs分区大小和后面烧录rootfs.jffs2映像的时候erase擦除的大小要对应,否则会出现:系统虽然可以启动,但同时会打印以下信息:



记录一下,聊以慰藉!

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PetaLinux是一个基于嵌入式Linux的开发工具链,用于构建嵌入式系统。它提供了许多可定制的组件和功能,其中包括对JFFS2文件系统的支持。 JFFS2(Journaling Flash File System 2)是一种针对闪存存储设备设计的文件系统。它具有很好的压缩率和高度可靠性,适用于嵌入式系统。在嵌入式系统中,闪存是一种常见的存储设备,它通常具有较小的存储容量和有限的周期寿命。因此,选择合适的文件系统对于确保系统的可靠性和性能至关重要。 使用PetaLinux时选择使用JFFS2文件系统有几个优点。首先,JFFS2具有较好的压缩率,可以节省存储空间。这在嵌入式系统中特别重要,因为闪存的容量通常有限。其次,JFFS2采用了日志技术,可以确保数据的完整性和一致性。它可以通过将修改的数据写入日志中,然后再写入闪存中来提供数据持久性。这有助于防止数据损坏和错误。 另外,PetaLinux提供了对JFFS2文件系统的内建支持和集成工具。这些工具使得在构建嵌入式系统时轻松地添加和配置JFFS2文件系统成为可能。开发人员可以使用PetaLinux提供的命令和选项设置文件系统的参数和属性,以满足特定的需求。 综上所述,使用PetaLinux来构建嵌入式系统并选择JFFS2文件系统能够提供较好的存储空间利用率和数据的可靠性。这使得嵌入式系统在具有有限存储容量和闪存设备的情况下,能够更好地运行和维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值