Linux Ramdisk启动方式下文件系统兼容性快速排查。

  最近做项目的时候遇到一个问题,有一个基于飞思卡尔(Free Scale)PoperPC E500_MC(multi-core)的介质板需要做Ramdisk启动。因为之前做过E500_V2架构的RamDisk,所以觉得这个应该不算很难。

  下面是开发的一些环境:

1.  架构: PowerPC e500-mc. 我们使用的是八核的处理器。

2. Bootloader: U-boot.

3. Flash: 8M, 这个是一个很大的限制因素,因为如果使用initramfs启动的话,文件系统得不到充分的压缩。如果在编译内核的时候选择CONFIG_optimizing for size的话,编译器将使用-Os(文件大小优化)代替-O2(性能优化),这是项目不允许的。但是如果不选择的话,对于可用的flash只有大概6M多的话,initramfs就不够用了。所以这里必须用Ramdisk.分开编译内核和文件系统。

4.文件系统(file system): 这里主要是要弄个busy box进去执行一些简单的指令。


  于是我生成了uImage, dtb 和 uRamdisk三个镜像文件,烧写到NOR FLASH里面以后使用脚本启动,每次初始化的时候都会有一个错误(exception).信息是这样的:

Kernel panic-- not syncing! Attempt to kill init. 然后因为我在bootargs里面设置了panic=1, U-boot会自动reset. 也就是说,这三个镜像文件不能使这块板子以RamDisk的方式启动。

  这时候就必须查找是哪个文件的问题。鉴于DTB(device tree blob)的文件只是描述设备的文件,不管怎么编译内核这个都是不变的,所以这个可以先被排除掉。现在只剩下内核和文件系统了。于是我只把新的内核和DTB烧到flash里面,然后使用原有的NFS(network file system)去启动,成功了。当然,这个新的内核和老的内核是不一样的,现在成功启动不代表兼容Ramdisk. 所以还需要简单测试一下。

  因为我做的Ramdisk是ext2格式的,所以我这样试一下。

//首先看看/dev里面有没有ram设备

# ls /dev/ram*

//格式化任何一个ram为ext2系统

#mke2fs /dev/ram0

//创建一个文件夹

# mkdir /tmp/ramdisk

//挂载这个文件夹到ram0

# mount /tmp/ramdisk /dev/ram0

这些指令都成功了,所以说明这个内核是基本支持Ramdisk的。 现在要检查的是uRamdisk这个文件了。

开始的时候我确实不太清楚应该怎么检查,后来同事说要用chroot这个命令更换根文件系统(root file system). 我觉得很有道理,于是接下来我是这么做的:

1. 使用原有内核和原有NFS启动。

2. 得到uRamdisk(注意这里是没有压缩过的)的存放路径后,进入该路径。

3. 使用chroot . /bin/ash.(如果有/bin/bash的话,可以直接使用chroot . 后面缺省。因为我用的是busy box,所以没有/bin/bash。注意这里必须有root权限)。

结果是系统返回illegal instructions. 说明内核和这个文件系统不兼容。这样的话就基本确定了是文件系统的问题。下一步将具体检查文件系统。


P.S:因为现在用的文件系统是之前给PowerPC e500_v2使用的,可能是因为架构有变化,文件系统不支持了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值