基于s3c2410的CramFS根文件系统的移植

发布者:诗意世界最新更新时间:2012-05-21 来源: 微计算机信息关键字:CramFS  根文件系统  S3C2410  嵌入式系统 手机看文章 扫描二维码
随时随地手机看文章

一、引言

随着电子产业的不断发展,基于ARM技术的系统设计和开发平台越来越多地在控制类、消费类、通信类等电子产品中广泛应用。从软件角度上看,构建基于ARM技术的uClinux系统要涉及到引导加载程序、Linux 内核、文件系统、用户应用程序几部分的设计。

文件系统是操作系统中用来管理用户文件的内核软件层。文件可能存在于磁盘、网络或者是一些虚拟的文件。文件系统包括根文件系统和建立于内存设备之上文件系统。根文件系统是uClinux系统的核心部分,包含系统使用的软件和库,以及所有用来为用户提供支持架构和用户使用的应用软件,并作为存储数据读写结果的区域。由于嵌入式设备中Flash资源很紧张,如何有效地使用有限的存储空间是嵌入式开发者必须考虑的,合适的文件系统格式是解决这一问题的关键所在。本文讨论了只读压缩CramFS文件系统的特点,并详细的说明了Nor Flash上建立一个uClinux的Cramfs根文件系统的一般步骤。

二、开发环境简介

本系统采用的是宿主机+目标板的开发模式,宿主机为PC+Cygwin1.5.1 ,目标板为采用203MHz的ARM920T内核的处理器S3C2410x+uClinux, uClinux版本为2.4.18。在宿主机上将uClinux和应用程序编译后,下载到目标板的Nor Flash中,启动运行。使用的SDRAM是2片16MB的HY57v561620,工作在16bit双字节模式下;使用的Flash是2片AMD AM29LV160DB,大小为2M字节,工作在16bit双字节模式下。在开发的时候,将Boot Loader烧入AM29LV160DB的1-5扇区;将Linux内核映象文件zImage烧入6-17扇区;将CramFS文件系统映象文件烧入 18-35扇区。

三、 Cramfs文件系统简介

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文件系统通常包含以下几个目录:

/linuxrc 启动脚本文件,由Boot Loader核心命令行确定init=/linuxrc,加载/etc目录为ramfs,(cramfs为只读文件系统),拷贝/mnt/etc到 /etc,配置文件目录重新加载根文件系统和/etc文件系统,执行init进程。

/bin   引导启动所需的命令或用户可能用的命令。

/sbin  系统管理员服务程序,其中最重要的是供内核初始化之后执行的/sbin/init进程,系统启动时由init解释并运行/etc/inittab, inittab将指导int去调用一个系统初始化程序/etc/init.d/rcS。

/etc   特定机器的配置文件以及用户数据存放目录,其中的所有内容是在内核运行后,由linuxrc 从/mnt/etc拷贝得到的。

/lib   文件系统上的程序所需的动态库。

/dev  驱动程序存放目录,可以在这里存放自己编写的驱动程序。

/usr   用于存放用户程序和配置文件的目录,可以根据需要进行设置。目录下的/usr/etc/rc.local执行本地所需要的初始化,如安装核心模块,进行网络,运行应用程序,启动图形界面等。/etc/modules.conf在系统运行期间自动加载模块。

/mnt  用于设备安装的目录。/mnt/etc/init.d/rcS完成各个文件系统的Mount,执行/usr/etc/rc.local;通过rcS可以调动dhcp程序配置网络。rcS执行完以后,就会打开Shell。

/proc 系统状态文件目录, 目录中的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息。尽管 /proc 中的文件是虚拟的,但它们仍可以使用任何文件编辑器或像'more', 'less'或 'cat'这样的程序来查看。

四、 Cramfs文件系统的移植过程

文件系统是紧跟uCLinux内核放置,由内核加载,主要存放用户应用程序和配置信息。CramFS文件系统的基本组成:初始化程序、Shell程序以及其他Linux常用工具、配置文件、链接库、图形界面程序和用户应用程序等。本节将介绍移植CramFS文件系统的具体操作方法。

4.1、在内核中加入对CramFS文件系统支持

想要在系统中提供CramFS的能力,我们必须要在编辑uCliunx内核时把支持CramFS的选项加入。尽管uCLinux可以以模块的形式加载各种类型的设备驱动上,但我们选择直接把设备驱动及CramFS文件系统静态地编译进内核中。

在Memory Technology Devices (MTD)选项中进行配置:

Memory Technology Device (MTD) support[Y/m/n/?] Y   内存技术设备支持

MTD partitioning support [Y/m/n/?] Y  支持MTD分区

Direct char device access to MTD devices[Y/m/n/?] Y  MTD字符设备直接访问

Caching block device access to MTD devices[Y/m/n/?] Y MTD块设备缓冲访问

在File Systems选项中进行配置:

Compressed ROM file system support [Y/m/n/?] Y   ROM文件系统的支持

完成上述修改并编译后,完成uCliunx内核对CramFS文件系统的支持。[page]

4.2、 拷贝需要加入的其他文件和链接库

(1)、Busybox 是 Debian GNU/Linux 的大名鼎鼎的 Bruce Perens 首先开发的。Busybox 编译出一个单个的独立执行程序,就叫做 busybox。但是它可以根据配置,执行 ash shell的功能,以及几十个各种小应用程序的功能。这其中包括有一个迷你的vi编辑器,系统不可或缺的/sbin/init程序,以及其他诸如 ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat等等。而所有这一切功能却只有区区1M左右的大小,Busybox已经成为构建嵌入式Linux文件系统的必备软件。

    首先我们从官方网站(http://www.busybox.org/)上下载BusyBox 的版本1.0.0。

#tar xvfz busybox-1.00.tar.gz
#cd busybox-1.00
#make menuconfig

下面是需要编译进busybox的功能选项,其他的可以根据需要自选。

Build Options
[*] Build BusyBox as a static binary (no shared libs)

这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库,否则必需要其他库文件才能运行,在单个linux内核不能使他正常工作。
    [*] Do you want to build BusyBox with a Cross Compiler  
选择你自己定义的交叉编译环境。

Installation Options
[*] don’t use /usr

这个选项也一定要选,否则make install 后busybox将安装在原系统的/usr下,这将覆盖系统原有的命令。选择这个选项后,make install后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向他的链接。

其他选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了,配置好后退出并保存。编译BusyBox,如果能成功编译BusyBox,就将编译好的busybox 复制到CramFS文件系统的/bin 目录下,然后创建常用命令的建立快捷方式。建立快捷方式很简单,只要建一个符号链接,比方ln -s /bin/busybox /bin/ls,那么,执行/bin/ls的时候,busybox 就会执行ls的功能,也会按照ls的方式处理命令行参数。

(2)、拷贝一些管理员控制程序到/sbin目录下,最重要的就是要包含一个init命令,可以使用busybox提供的系统工具。比如 ln -s /bin/busybox /sbin/init,这样我们就有了系统运行不可或缺的 /sbin/init 程序了。

       (3)、拷贝应用程序运行时所需要的库到/lib,库文件可以从PC机上的交叉编译工具安装目录下拷贝,如libc- 2.2.2.so、libcryt-2.2.2.so、libm-2.2.2.so、libutil-2.2.2.so等,为部分相应库建立快捷方式,提供一些应用程序按快捷方式名称调用。值得注意的是C库要采用C库的版本glibc, glibc位于/lib/libc.so.6。

4.3 、利用mkcramfs工具生成cramfs压缩文件系统

一般情况下都要把已经规划好的目录结构转换成一个映象文件,创建Cramfs文件系统需要mkcramfs工具,mkcramfs能把相应的Cramfs目录树压缩成为单一的映象文件,这个映象文件就是我们需要移植的文件系统。Mkcramfs的命令格式为:

Mkcramfs [-h] [--e edition] [-I file] [-n name] DirName   OutFile

#mkcramfs   root   cramfs.Img

用以上的命令就可以生成我们需要的cramfs文件系统映象文件,我们可以发现原本为2.36Mbytes大小的目录内容,被压缩成一个1.08Mbytes的CramFS文件系统映象文件, 通过vivi或测试程序将其写入Flash中就可以验证是否移植成功。

五、小结

    CramFS是一个压缩格式的文件系统,如果系统存储资源比较紧张的话,采用CramFS作为嵌入式Linux系统的根文件系统是一个不错的选择。

创新点:

    由于嵌入式系统的内存资源比较紧张, 采用CramFS作为嵌入式Linux系统的根文件系统是一种解决内存资源紧张的比较可行的方法。本文讨论了在嵌入式Linux系统中构建CramFS文件系统的详细过程,为解决内存资源紧张提供一种参考。

 

参考文献:

1、  李岩、荣盘祥,基于S3C44B0X嵌入式Uclinux系统的原理及应用[M],清华大学出版社,2005。

2、  ARM 9 Linux实验教程,深圳市英蓓特信息技术有限公司[M],2005。

3、  王集森、刘昊、胡晨,嵌入式Linux中多文件系统的构建[J],单片机与嵌入式系统应用,2005  12,12-15页。

4、  周宏霖,CramFS在Linux嵌入式环境的应用,http://www.lee-1.com/hlchou/LinuxCramFS.htm

5、  郝淑凤等,基于ARM的uCLinux启动引导实现的分析[J],微计算机信息,2005,8-2,50-52页

作者简介:

卢剑翔(1978-),男,广西玉林人,西南科技大学在读硕士研究生;主要研究方向:嵌入式操作系统。

刘成安(1965-),男,西南科技大学副教授,硕士生导师;主要研究方向:嵌入式系统开发与应用。

胡和智(1976-),男,陕西商南人,河北工业大学廊坊分院教师,主要研究方向:集成电路设计与制造。

刘振刚(1981-),男,山东青岛,西南科技大学在读硕士研究生;主要研究方向:控制理论与控制工程。

关键字:CramFS  根文件系统  S3C2410  嵌入式系统 引用地址:基于s3c2410的CramFS根文件系统的移植

上一篇:基于Freescale Kinetis的农田灌溉控制板卡的设计
下一篇:基于ARM的嵌入式BootLoader设计与启动过程

推荐阅读最新更新时间:2024-03-16 12:59

嵌入式组态软件系统的研究
嵌入式系统是指用于执行独立功能的专用计算机系统。它由微电子芯片(包括微处理器、定时器、序列发生器、控制器、存储器、传感器等一系列微电子芯片与器件)和嵌入在ROM、RAM和/FLASH存储器中的微型操作系统、控制与应用软件开发来实现各种自动化处理任务的电子设备或装置。 嵌入式系统的主要作用是实时控制、监视、管理移动计算机、数据处理等,或者辅助其它设备运转,完成各种自动化处理的任务。 嵌入式系统以应用为中心,以半导体技术、控制技术计算机技术和通讯技术为基础,强调硬件软件的协同性与整合性,软件与硬件可剪裁,以满足系统对功能、成本、体积和功耗等要求。 最简单的嵌入式系统仅有执行单一功能的控制能力。在唯一的ROM中仅有实现单一功能的
[嵌入式]
基于ARM嵌入式系统开发之发送过程的实现
  要通过网卡发送数据时,上层协议实体调用函数hard_start_xmit(),在我们的驱动程序中这个函数被映射成DM9000_wait_to_send_packet()函数,正如它名字中wait所表示的那样,这个函数只完成了等待发送的工作,实际的发送是调用DM9000_hardware_send_packet()函数完成的,这也是前面提到的buffer分配机制的一种体现。   在具体介绍这两个函数之前,有必要简单说一说DM9000芯片发送数据的工作原理。前面已经讲过,为了增加网络吞吐量DM9000芯片内部集成了8K的buffer,芯片对这些buffer采用了内存页面管理方式,每页256B,内部寄存器支持简单的内存分配指令。对于
[单片机]
S3C2410启动代码详解(1)
花了好几在的时间研究S3C2410r的启动代码,终于看完!在参考了一些资料后,加上自己的理解,留下点笔记。有些地方可能不正确,有待改正: 通常,启动代码是指CPU复位后到进入C语言的main函数之前需要执行的那段汇编代码.这是由于C语言程序的运行需要具备一定的条件,比如:分配好外部数据空闿堆栈空间和中断入口等筿另外汇编代码可以更直接的对硬件进行操使效率更高. 通常启动代码是放圿410init.s汇编文件;特殊功能寄存器定义在2410addr.s;Memory Bank 配置在mencfg.s;还有系统的选项等在option.s文件;2410init.s不仅包括复位后执行的代码,还包括CPU进入掉电模式,产生中断等和处理器
[单片机]
赛普拉斯携先进汽车电子嵌入式系统解决方案
与众多媒体及业内人士共同探讨 汽车电子 市场发展趋势 先进 嵌入式 系统解决方案的全球领先供应商 赛普拉斯 半导体公司举办媒体交流会,并独家赞助了由TechSugar主办的SugarTalk第二期汽车电子论坛。赛普拉斯多位高管就全球汽车电子发展趋势与行业媒体进行了深入的剖析和充分的沟通,并介绍了赛普拉斯先进的汽车电子解决方案。赛普拉斯汽车事业部高级副总裁布施武司先生还在论坛现场发表了关于“创新浪潮中的汽车:变与不变”的主题演讲,表达了赛普拉斯深耕中国,全力助推中国汽车电子市场发展的决心。   赛普拉斯汽车事业部高级副总裁布施武司在SugarTalk第二期汽车电子论坛上发表演讲 赛普拉斯认为,在智能化、网联化与电动化等技术趋势的推动
[嵌入式]
嵌入式系统在物联网行业中的应用
自从物联网概念在美国诞生起,物联网就成为新一代信息技术的重要组成部分,是互联网与嵌入式系统发展到高级阶段的融合。作为物联网重要技术组成的嵌入式系统,嵌入式系统的视角有助于深刻地、全面地理解物联网的本质。 这有两层意思:第一,物联网的核心仍然是互联网,是在互联网基础上的延伸和扩展的网络;第二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信,必须具备嵌入式系统构建的智能终端。因此,物联网系统是通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网相连接,进行信息交换和通信的系统架构。 物联网不仅仅提供了传感器的连接,其本身也具有智能处理的能力,能够对物体实施智能控制
[单片机]
<font color='red'>嵌入式系统</font>在物联网行业中的应用
关于s3c2410从NAND Flash启动的问题--bootrom 4KB限制
用的是S3C2410.见附件start.s 其中关于nand flash启动的那一段一直百思不得其解,按说从NAND FLASH启动时, 应该是前4KB映射到NGCS0,其中的代码将NAND中存放的程序拷贝到RAM中,但该文件提供的程序好象是先从NAND拷贝 128K的代码到ResetEntry开始的地方,即地址为0的地方,然后再从ResetEntry处拷到RAM中,但此时NGCS0好象只有4KB的 RAM区,怎么能存储128K的代码,一直没想通.望高手指点,谢谢! 搞明白了,是两条指令的差别 LDR r0,=_entry和ADR r0,_entry 前者是在编译的时候按照load address生成的绝对地址,后者反汇编后是相
[单片机]
关于<font color='red'>s3c2410</font>从NAND Flash启动的问题--bootrom 4KB限制
嵌入式系统中扩展串行口的几种方法
引言   串行接口设备凭借其控制灵活、接口简单、占用系统资源少等优点,被广泛应用于工业控制、家庭安防、GPS卫星定位导航以及水、电、气表的抄表等领域。在这些嵌入式系统中,可能会有很多从设备都通过串行接口与主机进行通信,如GPRS MODEM、红外发送和接收模块、RS485总线接口等。这使得开发人员常常面临嵌入式系统中主机串行通信接口不足的问题,针对此问题,本文介绍了几种常见的解决方法。 软件模拟法   软件模拟法可根据串行通讯的传送格式,利用定时器和主机的I/O口来模拟串行通讯的时序,以达到扩展串口的目的。   接收过程中需要检测起始位,这可以使用查询方式,或者,在端口具有中断功能的主机中也可以使用端口的中断进行处理。接收和发送
[应用]
优龙科技成为中国第六家ARM认证培训中心
最新的ARM认证培训中心将为珠江三角洲高质量嵌入式系统设计提供基础 中国领先的嵌入式系统开发公司深圳优龙科技有限公司(优龙科技)和 ARM 公司 今天共同宣布:优龙科技成为中国大陆第六家 ARM? 认证培训中心。优龙科技将为中国嵌入适系统工程师提供基于 ARM 技术的开发培训,帮助他们掌握基于 ARM 技术的系统设计的高级技能。 据 2005 年《电子设计技术》( EDN China )调查数据显示,进入中国市场四年多来, ARM 公司已经成为了中国嵌入式系统领域最为广泛采用的架构。基于 ARM 技术的系统的不断发展也对富有经验的工程师的需求不断增加。通过帮助中国工程师提高基于 ARM 的嵌入式系统的设计和
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved