您的位置 首页 硬件

cramfs根文件体系的移植成功(fs2410下亲测)

1引言依据Unix的习惯,通常会将linux系统中任何对象(包括设备)都视为文件。而根文系统是所有文件和设备节点的起始点,它是决定系统能否正…

1导言

依据Unix的习气,一般会将linux体系中任何方针(包含设备)都视为文件。而根文体系是一切文件和设备节点的起始点,它是决议体系能否正常发动的关键所在。本文将详细介绍运用Busybox东西集制造一种简略的根文件体系即Cramfs根文件体系的办法。

2开发渠道简介

开发体系选用主机+方针板的开发方法,方针板和主机经过串行线和Ethernet网线完成通讯。主机选用的是:pc机+VMware6.0虚拟机下的Red Hat 9方针板:深圳优龙公司开发的FS2410试验开发板:其主要参数:CPU:三星S3C2410,主频203MHz;内存:64M字节;NOR Flash:2M字节(SST39VF1601);NAND Flash:64M字节(K9F1208);嵌入式linux版别:linux2.4.18

根文件体系生成后用Boot Loader烧入开发板的NAND Flash的2号分区运转(其地址为:offset 0x200000 , size 0x1e00000)。

3根文件体系的根本结构

嵌入式linux根文件体系的体系的顶层目录各有其特别的用法和意图。一般来说嵌入式linux体系的根文件体系应该包含以下内容:

(1)能够确保嵌入式linux体系中的大多数运用程序能够正常运转的最小化目录包含/bin/dev/etc/lib/proc/sbin/usr/tmp/var。假如用户需求为多用户供给可扩展环境还需树立以下目录:/home/mnt/opt/root。

(2)根文件体系所需的根本链接库:Glibc以及uClibc。

(3)根本的体系装备文件:rcS,inittab,fstab,linuxrc等脚本文件

(4)根本的设备文件:/dev/tty0/dev/ttyS0/dev/console

(5)根本的运用程序:如cd ,ls ,mv,cp等。

4运用Busybox制造Cramfs根文件体系

4.1Cramfs简介

Cramfs(Compressed Rom File System)是Linux Torvalds在Transmeta任职时,所参加开发的只具有最根本特性的文件体系。它是针对Linux内核2.4之后的版别所规划的一种新式只读文件体系,选用了zlib紧缩,紧缩比一般能够到达1:2,但仍能够作到高效的随机读取,Linux体系中,一般把不需求常常修正的目录紧缩寄存,并在体系引导的时分再将紧缩文件解开。由于Cramfs不会影响体系的读取文件的速度,并且是一个高度紧缩的文件体系。因而十分广泛运用于嵌入式体系中。

在嵌入式的环境之下,内存和外存资源都需求节约运用。假如运用RAMDISK方法来运用文件体系,那么在体系运转之后,首要要把Flash上的映像文件解紧缩到内存中,结构起RAMDISK环境,才能够开端运转程序。可是它也有很丧命的缺点。在正常情况下,相同的代码不仅在Flash中占有了空间(以紧缩后的方法存在),并且还在内存中占用了更大的空间(以解紧缩之后的方法存在),这违反了嵌入式环境下尽量节约资源的要求。

而运用Cramfs文件体系能够很好的处理这个问题。Cramfs是一个紧缩格局的文件体系,它并不需求一次性地将文件体系中的一切内容都解紧缩到内存之中,而只是在体系需求拜访某个方位的数据的时分,立刻计算出该数据在Cramfs中的方位,将它实时地解紧缩到内存之中,然后经过对内存的拜访来获取文件体系中需求读取的数据。Cramfs中的解紧缩以及解紧缩之后的内存中数据寄存方位都是由Cramfs文件体系自身进行保护的,用户并不需求了解详细的完成进程,因而这种方法增强了透明度,对开发人员来说,既便利,又节约了存储空间。因而咱们在开发时挑选运用这种简略的Cramfs文件体系进行根文件体系的移植。

4.2Busybox简介

Busybox是规范Linux东西的一个单个可履行完成。Busybox包含了一些简略的东西,例如cat和echo,还包含了一些更大、更杂乱的东西,例如grep、find、mount以及telnet。有些人将Busybox称为Linux东西里的瑞士军刀.简略的说Busybox就好像是个大东西箱,它集成紧缩了Linux的许多东西和指令。虽然Busybox中的这些东西相对于GNU东西有所简化,但却很有用。Busybox在规划上就充分考虑了硬件资源受限的特别工作环境。它选用模块化规划,它选用了与linux内核装备菜单相似的装备菜单,使得装备和裁剪变得适当简略。Busybox这种特性使得其十分适合于嵌入式体系的运用。简直一切的嵌入式Linux都运用Busybox作为东西。一起,Busybox的装置脚本使得它很简略树立依据Busybox的Linux根文件体系。本文便是经过运用Busybox这个强壮的东西集来制造Cramfs根文件体系的。

4.3装备Busybox

Busybox的源代码能够到官方网站http :/ / www.busybox. net/下载,咱们运用的是深圳优龙公司供给的源码包busybox – 1. 00 – pre10. tar . bz2。留意运用版别不一定是越新越好,假如新的版别编译后在方针板中无法正常发动,能够试着回到较老的版别。咱们在开发进程中最开端运用的是busybox-1.1.3,成果生成的根文件体系无法再fs2410上正常发动,换回busybox – 1. 00 – pre10则能够轻松处理这个问题。

首要将busybox-1.00-pre10.tar.bz2拷贝到用户家目录:home/jixiang (busybox拷贝到什么目录能够自行设定)。

[root@mynet jixiang]# cd /home/jixiang

[root@mynet jixiang]# tar vxjf busybox-1.00-pre10.tar.bz2

[root@mynet jixiang]# cd busybox-1.00-pre10

[root@mynet busybox-1.00-pre10]# make menuconfig

进入装备菜单界面,咱们做如下装备:

(1)在General Configuration中,一定要挑选“Support for devfs”选项,现在的Busybox新版别去掉了这个选项,不过应该能够经过修正装备文件参加。

图1装备支撑设备文件体系界面

(2)在Build Options选项中,挑选运用“静态库”以及设置穿插编译东西的PREFIX。我运用的穿插编译东西的途径是:/usr/local/arm/3.3.2/bin。(详细情况因宿主机穿插编译环境途径不同做相应修正。

图2装备静态库界面

(3)在Init Utilities选项中,“Support reading an inittab file”应该选中,这样能够依据自己编写的inittab文件初始化;“Support running init from within an initrd ”应该选中,不然会提示十分困扰的“/bin/sh: cant access tty; job control turned off”的提示,虽然能够进入控制台指令行。

图3脚本文件装备界面

(4)Another Bourne – like Shell→Choose your default shell (ash)→,这儿应该选中默许shell :ash ,不然不会生成sh导致不能解说脚本文件。

图4 shell装备

(5)其他的装备能够依据自己开发需求自行装备。

4.3编译并装置Busybox

装备完成后,退出保存(最好备份.config文件以供后用),然后开端生成,履行make TARGET_ARCH=arm;此处的TARGET_ARCH是有必要的。

[root@mynet busybox-1.00-pre10]# make TARGET_ARCH=arm

[root@mynet busybox-1.00-pre10]# make install

Busybox将在默许的PREFIX目录- install下面生成bin、sbin、usr三个子目录和一个链接文件linuxrc。

4.4预备生成cramfs文件体系

(1)创立一个文件夹rootfs,把_install目录下生成的bin、sbin、usr三个目录拷贝到rootfs,并且在rootfs目录下树立其他子目录。履行指令mkdir dev etc home lib mnt procsystmp var,树立相应的文件夹,再树立etc下的init.d文件夹。

(2)预备发动文件inittab、fstab、linuxrc、rcS。其间inittab、fstab放在etc目录下面, rcS放在etc/ init.d/目录下面,linuxrc放在rootfs目录下面。

(3)简略的装备文件的编写

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/emptymk

#/bin/mount -t usbdevfs none /proc/bus/usb

exec /sbin/init

rcS文件:

#!/bin/sh

/bin/mount –a

fstab文件:

none /proc proc defaults 0 0

none /dev/pts devpts mode=0622 0 0

tmpfs /dev/shm tmpfs defaults 0 0

留意应该使得上述文件具有履行权限,能够运用chmod755来修正其权限。

4.5生成Cramfs根文件体系映像

咱们运用的是优龙供给的cramfs-1.1.tar.gz源码包,用该东西生成根文件体系映像,

解压后将mkcramfs放到宿主机Red Hat9的/bin目录下。

转到rootfs目录的上级目录履行:mkcramfsrootfstest.cramfs

5下载运转test.cramfs

将test.cramfs经过dnw下载到优龙FS2410开发板的nandflash中的文件分区(其地址为:offset 0x200000 , size 0x1e00000),文件体系正常发动。发动界面如图:

NET: Registered protocol family 1

NET: Registered protocol family 17

VFS: Mounted root (cramfs filesystem) readonly.

Mounted devfs on /dev

Freeing init memory: 124K

mount /etc as ramfs

mount: /etc/mtab: No such file or directory

mount: /etc/mtab: Read-only file system

mount: /etc/mtab: No such file or directory

mount: /etc/mtab: Read-only file system

mount: /etc/mtab: Read-only file system

mount: /etc/mtab: Read-only file system

mount: /etc/mtab: Read-only file system

Please press Enter to activate this console.

BusyBox v1.00-pre10 (2009.09.01-12:23+0000) Built-in shell (ash)

Enter help for a list of built-in commands.

/ # ls

binetclibmntsbintmpvar

devhomelinuxrcprocsysusr

/ #

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/275037.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部