Linux Ramdisk启动方式下文件系统兼容性快速排查。
来源:互联网 发布:大数据架构师证书 编辑:程序博客网 时间:2024/06/06 13:05
最近做项目的时候遇到一个问题,有一个基于飞思卡尔(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使用的,可能是因为架构有变化,文件系统不支持了。
- Linux Ramdisk启动方式下文件系统兼容性快速排查。
- linux下RamDisk实现方式
- linux 下 解压缩ramdisk.img文件
- linux下启动Tomact排查问题
- Linux下排查定时任务无法启动
- Linux ramdisk启动
- linux 启动错误排查
- Linux系统下ramdisk文件解压缩与压缩处理
- Linux下快速启动qq
- 在Linux下使用RamDisk
- 在Linux下使用RamDisk
- Ramdisk根文件系统启动Linux(单独的ramdisk镜像)
- Ramdisk根文件系统启动Linux(单独的ramdisk镜像)
- linux 下redis 启动方式
- 从ramdisk根文件系统启动Linux成功
- 从ramdisk根文件系统启动Linux成功
- 从ramdisk根文件系统启动Linux
- 从ramdisk根文件系统启动Linux
- [LeetCode] Word Break II
- LeetCode题解:Spiral Matrix I and II
- 德国波恩出差记(一)
- LeetCode题解:Clone Graph
- Generate Parentheses 产生所有括号组合 @LeetCode
- Linux Ramdisk启动方式下文件系统兼容性快速排查。
- 企业软件管理FileWave
- const char * ptr;char * const cp 的区别
- LeetCode题解:Remove Duplicates from Sorted Array I and II
- hdoj1106 ( strtok函数 )
- OSX: 切换10.9用户桌面壁纸的脚本
- 推荐一个git源码托管网站
- c对象创建
- 利用开源赚钱的九项秘诀