使用Busybox制作CRAMFS文件系统成功
转:http://www.360doc.com/content/11/1013/22/7775902_155877501.shtml
这几天在使用Busybox制作FS2410开发板的CRAMFS文件系统,由于开始 下载的是Busybox1.10,每次下载到开发板中,然后启动总是出现”Failed to execute /linuxrc. Attempting defaults...“的错误。到网上查了大量的资料,并做了大量的实验,发现都不能成功。今天下午突然发现一个能够仿真arm的软件qemu,在 Ubuntu中的安装方法:sudo apt-get install qemu,Busybox编译后,可以通过arm仿真来测试:qemu-arm ./busybox ls,如果成功,则会显示当前目录下的文件列表。我对Busybox1.10编译后的结果进行测试,发现出现错误:
| qemu: unhandled CPU exception 0x8 - aborting R00=001c596c R01=00000000 R02=001c5960 R03=00000001 R04=000cbf94 R05=00000000 R06=00000000 R07=00000000 R08=000cbfdc R09=000cbf94 R10=00000000 R11=00000000 R12=ffff0fff R13=b7d6c470 R14=000d4588 R15=ffff0fa0 PSR=20000010 --C- A usr32 ffff0fa0 s00=00000000( 0) s01=00000000( 0) d00=0000000000000000( 0) s02=00000000( 0) s03=00000000( 0) d01=0000000000000000( 0) s04=00000000( 0) s05=00000000( 0) d02=0000000000000000( 0) s06=00000000( 0) s07=00000000( 0) d03=0000000000000000( 0) s08=00000000( 0) s09=00000000( 0) d04=0000000000000000( 0) s10=00000000( 0) s11=00000000( 0) d05=0000000000000000( 0) s12=00000000( 0) s13=00000000( 0) d06=0000000000000000( 0) s14=00000000( 0) s15=00000000( 0) d07=0000000000000000( 0) s16=00000000( 0) s17=00000000( 0) d08=0000000000000000( 0) s18=00000000( 0) s19=00000000( 0) d09=0000000000000000( 0) s20=00000000( 0) s21=00000000( 0) d10=0000000000000000( 0) s22=00000000( 0) s23=00000000( 0) d11=0000000000000000( 0) s24=00000000( 0) s25=00000000( 0) d12=0000000000000000( 0) s26=00000000( 0) s27=00000000( 0) d13=0000000000000000( 0) s28=00000000( 0) s29=00000000( 0) d14=0000000000000000( 0) s30=00000000( 0) s31=00000000( 0) d15=0000000000000000( 0) FPSCR: 00000000 qemu: uncaught target signal 6 (Aborted) - exiting |
说明,所编译得到的busybox不能使用在arm处理器,由于时间关系就放弃了使用Buxybox1.10版本。后又尝试了Busybox1.5.x,发现有同样的问题。(后来和1.00版本对照,发现去掉了对devfs的支持)
于
是使用FS2410开发版自带的源码中的Busybox1.00版本,编译后仿真没有问题,生成cramfs文件系统后下载、启动也正常,只是会出现
“/bin/sh: can't access tty; job control turned
off”的问题,查阅了一些资料,发现都不能很好的解决这个问题。于是下载了Busybox1.1.3版本,编译、生成文件系统、下载、启动,一切正常,
讲一讲过程:
1.下载BusyBox 1.1.3
2. 执行make menuconfig,然后进行设置,我截了几张图,这几张图就是在进行配置时需要重点注意的地方:
(1)在General Configuration中,一定要选择“Support for devfs”选项,现在的Busybox新版本去掉了这个选项,不过应该可以通过修改配置文件加入。
(2)在Build Options选项中,选择使用“静态库”以及设置交叉编译工具的PREFIX。
(3)在Linux System Utilities选项中,“Support loopback mounts”和“Support for the old /etc/mtab file”2个选项应该选中。
(4)
在Init Utilities选项中,“Support reading an inittab
file”应该选中,这样可以根据自己编写的inittab文件初始化;“Support running commands with a
controlling-tty”应该选中,否则会提示非常困扰的“/bin/sh: can't access tty; job control
turned off”的提示,尽管可以进入控制台命令行。
(4)在Shell选项中,应该选中默认shell:ash,否则不会生成sh,导致不能解释脚本文件。
(5)其他的选项根据自己的需要设置。
3.
配置完成后,退出保存(最好备份.config文件以供后用),然后开始生成,执行make
TARGET_ARCH=arm;此处的TARGET_ARCH是必须的。生成完成后使用qemu-arm测试:qemu-arm ./busybox
ls,如果没有错误的话,会显示出 当前目录下的文件列表。
说明:在生成的过程中,提示了“/mnt/extdisk/embedded/busybox-1.1.3/include/bbconfigopts.h:28 hmm, untermina”错误,分析相应的文件,发现应该是一个配置包含文件,在配置后保存在.config文件中,因此这个文件中的内容应该不是关键内容,因此我将此文件清空保存,然后重新执行上面的生成命令,成功。
4. 生成结束后,执行make install,生成一个_install文件夹,内有一个linuxrc文件和bin、sbin、usr三个文件夹,删除linuxrc,将三个文件夹打包。
5. 准备生成cramfs文件系统:
(1)创建一个文件夹,比如rootfs,转到rootfs,执行命令mkdir bin dev etc home lib mnt proc sbin sys tmp var usr,建立相应的文件夹,再建立etc下的init.d文件夹。
(2)准备启动所需的文件:linuxrc、rcS、inittab、fstab四个文件;
linuxrc文件:
----------------------------------------------
#!/bin/sh
echo "mount /etc as ramfs"
/bin/mount -f -t cramfs -o remount,ro /dev/bon/2 /
/bin/mount -t ramfs ramfs /var
/bin/mkdir -p /var/tmp
/bin/mkdir -p /var/run
/bin/mkdir -p /var/log
/bin/mkdir -p /var/lock
/bin/mkdir -p /var/empty
#/bin/mount -t usbdevfs none /proc/bus/usb
exec /sbin/init
------------------------------------------------
rcS文件:
-----------------------------------------------------------------------------------
#!/bin/sh
/bin/mount -a
-----------------------------------------------------------------------------------
这两个文件生成后,应该使其具有执行的权限,可使用chmod 775 linuxrc rcS来修改,linuxrc应该放在rootfs根目录,rcS应该放在rootfs/etc/init.d/目录。
inittab文件:
-------------------------------------------------
# This is run first except when booting
::sysinit:/etc/init.d/rcS
# Start an "askfirst" shell on the console
#::askfirst:-/bin/bash
::askfirst:-/bin/sh
# Stuff to do when restarting the init process
::restart:/sbin/init
# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
-------------------------------------------------
fstab文件:
-------------------------------------------------
none /proc proc defaults 0 0
none /dev/pts devpts mode=0622 0 0
tmpfs /dev/shm tmpfs defaults 0 0
-------------------------------------------------
这两个文件应该放在rootfs/etc/目录,应该注意其权限问题。
(3)如果使用linux 2.6.xx内核,应该实现创建节点console、null。转到rootfs/dev/目录来创建:
sudo mknod console c 5 1
sudo mknod null c 1 3
否则就会提示“Warning: unable to open an initial console.
Kernel panic - not syncing: Attempted to kill init!”的类似错误。
(4)将刚才在busybox的_install下的三个文件夹的打包文件复制到rootfs目录,解压后删除打包文件。
(5)
也可以将一些常用的lib文件复制到rootfs/lib/目录下,比如:ld-2.5.so libc-2.5.so
libcrypt.so.1 libgcc_s.so.1 libm.so.6 ld-linux.so.3 libcrypt-2.5.so
libc.so.6 libm-2.5.so等文件或符号连接,在复制时应该注意采用图形化的界面复制活打包后解包方式复制。
(6)转到rootfs的上一级目录,使用mkcramfs制作文件系统:./mkcramfs rootfs xxxxx.cramfs,然后下载、少录、启动,成功,如下图所示:
6. 后记
(1)qemu-arm仿真工具
花
费了2天多的时间来使用Busybox制作文件系统,时间有点长,主要是开始走了弯路,使用Busybox1.10版本,当时不太清楚有qemu-arm
仿真arm的工具,借助qemu-arm仿真工具可以很方便的验证自己的busybox编译结果是否正确,可以节省很多时间。就如刚开始我使用
busybox1.10版本,没有借助qemu-arm仿真,下载后启动出现”Failed to execute /linuxrc.
Attempting defaults...“的错误,这个错误很难排除,这几天一有时间就查资料看解决这个问题的方法,只可惜浪费了时间。
(2)交叉编译工具
看
网上有资料说,linux内核以及busybox最好使用相同的交叉编译工具编译,否则可能会出现问题。我使用的是不同版本的交叉编译工具,没有出现问
题。因为linux2.6.24内核是几天前编译的,采用的是4.2.1版本;今天编译busybox1.1.3用的是3.3.2版本。
(3)BusyBox
Linux2.6.xx
内核取消了devfs的支持,Busybox也跟上了这个步伐,前面我也提到过,对于busybox的新版本应该可以通过修改配置文件十七支持
devfs,具体方法:修改Config.in文件,找到menu "General Configuration",然后在其后适当位置加入如下内容:
config CONFIG_FEATURE_DEVFS
bool "Support for devfs"
default n
help
Enable if you want BusyBox to work with devfs.
这样,在进行配置时就会出现“Support for devfs”选项。只是我加入后,在进行编译,所得到的busybox也没有在qemu-arm仿真中通过。
使用Busybox制作CRAMFS文件系统成功的更多相关文章
- 通过busybox制作根文件系统
通过busybox制作根文件系统可以自定义选项,在制作的根文件系统中添加需要的命令,指定生成的根文件系统到相应的目录下. 一. 根文件系统的获取方式--->官网: https://busybox ...
- 通过busybox制作根文件系统详细过程
我在之前的uboot通过NFS挂载ubuntu根文件系统中也有实现过根文件系统的制作,那只是在ubuntu官网已经做好的根文件基础上安装一些自己所需的软解而已.而使用busybox制作根文件系统可以自 ...
- zju(4)使用busybox制作根文件系统
1.实验目的 1.学习和掌握busybox相关知识及应用: 2.学会使用交叉编译器定制一个busybox: 3.利用该busybox制作一个文件系统: 4.熟悉根文件系统组织结构: 5.定制.编译ra ...
- 利用busybox制作根文件系统
实际项目中可以使用Buildroot制作根文件系统 1.busybox源码下载及配置 https://busybox.net/downloads/ 1.1.修改Makefile (1) ARCH = ...
- 使用BusyBox制作根文件系统【转】
本文转载自:http://www.cnblogs.com/lidabo/p/5300180.html 1.BusyBox简介 BusyBox 是很多标准 Linux 工具的一个单个可执行实现.Busy ...
- 使用BusyBox制作根文件系统
1.BusyBox简介 BusyBox 是很多标准 Linux 工具的一个单个可执行实现.BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大.更复杂的工具,例如 gre ...
- tiny4412 busybox制作根文件系统rootfs nfs 挂载 ubuntu 14.04
http://blog.csdn.net/liudijiang/article/details/50555429(转) 首先得要有制作好的uboot和linux内核镜像zImage,先烧录到sd卡里, ...
- Linux 利用busybox制作根文件系统
busybox版本:1.17.3 官网下载路径:https://busybox.net/downloads/ 网盘下载路径:https://pan.baidu.com/s/1nvrEa73 密码:7y ...
- 使用BusyBox制作linux根文件系统(CramFS+mdev)
转:http://www.360doc.com/content/10/0428/11/496343_25245348.shtml 操作系统:Ubuntu9.04 内核版本:linux-2.6.24.7 ...
随机推荐
- 设计模式之笔记--单例模式(Singleton)
单例模式(Singleton) 定义 单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点. 类图 描述 类Singleton的构造函数的修饰符为private,防止用 ...
- java多线程以及Android多线程
Java 多线程 线程和进程的区别 线程和进程的本质:由CPU进行调度的并发式执行任务,多个任务被快速轮换执行,使得宏观上具有多个线程或者进程同时执行的效果. 进程:在操作系统来说,一个运行的程序或者 ...
- 【LabVIEW技巧】你可以不懂OOP,却不能不懂封装
前言 大多数写LabVIEW程序的工程师都不是一个纯软的工程师,很多做硬件的.做机械的.甚至学化学的也会学习LabVIEW. 由于主要重心不在软件,所以LabVIEW程序基本上能用行,也就得到入门容易 ...
- 8:django sessions(会话)
django会话 django提供对匿名会话全方位的支持,会话框架可以存储和检索每个站点访问者的任意数据.会话数据是存储在服务器端的,并且简要了发送和接受cookie的过程,cookies只包含一个s ...
- Dubbo 用户手册学习笔记 —— Dubbo架构
Dubbo的架构 节点角色说明 节点 角色说明 Provider 服务提供方 Consumer 服务消费方 Registry 服务注册与发现的注册中心 Monitor 统计服务的调用次数和调用时间的监 ...
- Django如何从Model中获取字段名称——verbose_name
一.背景 CRM项目重新总结一下,重写之前的项目发现有不少知识点已经忘记,所以特此来重新总结一下一便后续能够回忆起 二.代码分析 1. 核心代码 from django.conf.urls impor ...
- hdu 1065(贪心)
Wooden Sticks Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20938 Accepted: 8872 De ...
- AC日记——大爷的字符串题 洛谷 P3709
大爷的字符串题 思路: 莫队,需开O2,不开50: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 20000 ...
- lr_Analysis Options选项介绍
- OpenStack 计算服务 Nova计算节点部署 (九)
如果使用vmware虚拟机进行部署,需要开启虚拟化:如果是服务器需要在bios上开启. Nova Compute nova-compute 一般运行在计算节点上,通过Messages Queue接收并 ...