嵌入式文件系统的构建

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Parttwo.嵌入式文件系统的构建嵌入式文件系统简介:Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(VirtualFileSystem),为各类文件系统提供一个统一的操作界面和应用编程接口。Linux文件系统结构如下:Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM(DRAM,SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,romfs,ramdisk,ramfs/tmpfs等。Flash(闪存)作为嵌入式系统的主要存储媒介,有其自身的特性。Flash的写入操作只能把对应位置的1修改为0,而不能把0修改为1(擦除Flash就是把对应存储块的内容恢复为1),因此,一般情况下,向Flash写入内容时,需要先擦除对应的存储区间,这种擦除是以块(block)为单位进行的。简要介绍一下实验中涉及到的文件系统类型:1.Jffs2(基于ROM的文件系统)JFFS文件系统最早是由瑞典AxisCommunications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux,uCLinux中。Jffs2:日志闪存文件系统版本2(JournallingFlashFileSystemv2)主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。Jffsx不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致Jffs为维护日志节点所占用的内存空间迅速增大,另外,Jffsx文件系统在挂载时需要扫描整个FLASH的内容,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。2.Ramdisk(基于RAM的文件系统)Ramdisk是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。3.网络文件系统NFS(NetworkFileSystem)NFS是由Sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。以上讨论的都是基于存储设备的文件系统(memory-basedfilesystem),它们都可用作Linux的根文件系统一.文件系统的制作(1)、Busybox介绍Busybox是DebianGNU/Linux著名的BrucePerens首先开发,主要使用在Debian的安装程序中。Busybox编译成一个叫做busybox独立执行程序,并且可以根据配置,执行ashshell的功能,以及几十个小应用程序。这其中包括一个迷你的vi编辑器,系统不可或缺的/sbin/init程序,以及其他诸如sed,ifconfig,halt,reboot,mkdir,mount,ln,ls,echo,cat等等,所有这些都是一个正常的系统必不可少的,通过修改修改BusyBox默认的编译配置(makemenuconfig)以移除不想使用的命令的支持。busybox具有全部这些功能,大小也不过100K左右。而且用户还可以根据自己的需要对busybox的应用程序功能进行配置选择。这样可以使busybox的大小进一步缩小。BusyBox支持多种体系结构,它可以静态或动态链接glic或者uclibc库,以满足不同的需要。(2)、制作过程1.实验室中busybox-1.00-pre5.tar.gz存放在/exp目录下,将该压缩文件复制到自己的文件夹/home/st/MF,在该目录下解压缩tarzxvfbusybox-1.00-pre5.tar.gz(tar指令的使用详见附录一)2.用cd/home/st/MF/busybox-1.00-pre5进入解压后的目录,执行makemenuconfig,进行文件系统的配置。文件系统如果配置不好会在启动时产生多种问题导致不能启动,下面详细的说明一下,必需的配置选项,并附带说明一些常见的问题FAQ。3.makemenuconfig图1.1是Busybox配置界面(1)在BuildOption菜单下,可以选择静态库编译方式,设置如[*]BuildBusyBoxasastaticbinary(nosharedlibs)将交叉编译器设置为PC机上的路径(ARM交叉编译工具所在的目录为/usr/local/arm-linux/bin),设置时需要在crosscompilerprefix中输入/usr/local/arm-linux/bin/arm-linux-(2)在InstallationOption菜单下,自定义安装目录,建议使用默认目录./_install(方便起见),Don’tuse/usr不选。(3)在ArchivalUtilities(档案程序)菜单下配置常用的归档工具(gzip等)。在此菜单下可以配置常用的压缩工具(归档),例如gzip、tar等,在相应的压缩命令前打*即意味着新配置成的文件系统中可以使用相应的压缩命令(建议选一些常用的也可不选,我只选了一些我认识的)。图1.4(4)在coreutils菜单下,配额制常用的对文件操作的指令。在相应的指令前打*,意味着在所制作的文件系统中可以使用。例如,[*]cp可以在制作的文件系统中使用cp来拷贝文件。(建议全选)(5)在ConsoleUtilities(控制台程序)菜单中,配置一些对终端的操作,例如清屏,reset等。(建议全选)。(6)在DebianUtilities(Debian,linux版本的一种,在最适合linux爱好者的系统之一),配置一些Debian中有的一些命令,例如管道命令。建议选[*]pipe_progress和[*]start-stop-daemon,其他可选,影响不大。(7)在Editors菜单下,配置你所构造文件系统可以使用的编辑器,这里我们当然选vi了,建议将vi下所有的功能都打*这样就可以在自己够的文件系统里使用vi来编辑文件了。(8)在FindingUtilities(搜索)菜单下,配置搜索指令,相应的项目打*,即意味着在文件系统中可以使用这些搜索命令,例如,grep,find。(建议全选)(9)在InitUtilities中配置初始化指令。其中[*]init选项必选,否则无法正常进入命令行界面的系统,若不选会出现FAQ(frequentquestion)中的问题(3),其他选项建议都选上,如下图。(10)在Login/PasswordMangementUtilities菜单下配置对用户登录/密码管理的配置。其中[*]getty必选,因为在inittab文件中要用到该指令,若不选会出现FAQ(frequentquestion)中的问题(2)。其他选项可选,参见下图。(11)在Miscellaneous(各种的,多方面的)Utilities配置各种指令,由于很多指令没怎么用过,所以没选。(12)在LinuxModuleUtilities中配置和加载/卸载Linux模块相关的指令,例如insmod、lsmod、rmmod等是比较常用的命令,建议都选,其他命令根据个人喜好。(13)在NetworkingUtilities菜单下配置和网络有关的命令,为了使用网络连接,其中ping和ifconfig必选。其他的诸如telenet,ftpget之类可根据自己对这些命令的了解选。(14)在ProcessUtilities菜单下配置对系统进程管理的指令,如kill、ps,建议按如下图所示选,可选top(由于之前不知道top的功能所以没选,top的功能见附录二)。(15)在AnotherBournelikeshell菜单下指定shell(必须因为在启动时rc中的/bin/sh中会使用指定的shell),否则出现FAQ中的问题(4)。指定方法如下,选择chooseyourdefaultshell,用空格键选取一种shell,常见的可以选ash,和msh,经过实验发现msh似乎更好用,建议选msh。指定shell种类之后,下面有不同shell的功能项的选取,如果指定的shell类型为msh,建议把msh下面的mshshelloptions功能的内容全选。(下图是由于截图时使用的仍是ash,未改作msh,强烈建议使用msh)。(16)在SystemloggingUtilities菜单下,配置系统登录命令,暂时不会用这些指令,所以未选(不影响功能)。(17)在LinuxSystemUtilities中配置系统指令,例如mountunmount(挂载文件系统)。为了使用NFS文件系统,选定[*]mount要选[*]SupportmountingNFSfilesystems。建议选[*]more,[*]mount,[*]umount,等一些学过的指令。(18)最后一项debug信息可选也可不选。保存退出。4.制作文件系统(1)保存好menuconfig的配置后,对BusyBox进行编译make和安装makeinstall,安装完毕后,cd/home/st/MF/busybox-1.00-pre5/_install到安装的目录下,可以找的bin、sbin、usr目录和Linuxrc等一系列文件。在_install目录下,用mkdiretcdevproclibmnt创建etc、dev、proc、lib、mnt五个文件夹,cdetc创建inittab、rc、motd三个文件,其中rc用chmod+xrc增加可执行属性。注意:脚本文件rc的开头部分不是注释,而是脚本文件开头的固定格式,如果缺省,会出现FAQ中的问题(5)。(2)在etc下建立init.d目录,而后在init.d目录下建立rc文件的符号连接文件rcS。指令如下:$:mkdirinit.d$:cdinit.d$:ln–s../rcrcS(3)cd~/MF/busybox-1.00-pre5/_install/dev转移到dev目录下。小技巧:在dev目录下用gedit(vim也可以)建立一个文件g,将电子版指导书(实验室可用,在方圆老师的网站~yfang/上获得)的一堆mknod指令存到g中,去掉$符号,保存退出。$:chmod+xg将g变为可执行文件。$:./g执行.$:rmg以上操作均在dev目录下进行。(4)在/usr/local/arm-linux/arm-linux/lib中寻找ld-2.3.2.so、libc-2.3.2.so、libm-2.3.2.so库文件,并将这三个文件复制到/home/st/MF/busybox-1.00-pre5/_install/lib中,并在该目录下执行如下操作:$:ln–sld-2.3.2.sold-linux.so.2$:ln

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功