linux文件系统制作流程

上传人:y****n 文档编号:156726243 上传时间:2022-09-27 格式:DOC 页数:19 大小:39.01KB
返回 下载 相关 举报
linux文件系统制作流程_第1页
第1页 / 共19页
linux文件系统制作流程_第2页
第2页 / 共19页
linux文件系统制作流程_第3页
第3页 / 共19页
点击查看更多>>
资源描述
linux文件系统制作流程81653 0200 20 0姓名:Michel.Lee职业:在西南边陲的一个国营单位从事嵌入式软件的开发年龄:位置:个性介绍:up_user.jpg up_user_pre.jpg OTHER 12 024 10668 00 0星级BLOG 0lee213#FFFFFF#204689 _blank 106265 02009-03-04 20:00:15 127761 106265 2009-12-24 17:25:33 127762 106265 2009-12-24 17:25:48 127763 106265 2009-12-24 17:25:56 127764 106265 2009-12-24 17:26:08 127765 02009-12-24 17:28:03 127766 127765 2009-12-24 17:28:40 106249 02009-12-24 17:27:35 109536 106249 2009-04-16 22:27:38 109537 106249 2009-04-16 22:29:07 109538 106249 2009-04-16 22:29:27 109539 106249 2009-04-16 22:30:00 109540 106249 2009-04-16 22:30:25 109541 106249 2009-04-16 22:31:00 109542 106249 2009-04-16 22:31:26 109543 106249 2009-04-16 22:34:54 127756 02009-12-24 17:27:43 127757 127756 2009-12-24 17:22:57 127758 127756 2009-12-24 17:23:08 127759 127756 2009-12-24 17:23:18 127760 127756 2009-12-24 17:23:29 106251 02009-12-24 17:27:51 109544 106251 2009-04-16 22:35:39 109545 106251 2009-04-16 22:36:06 109547 106251 2009-04-16 22:37:04 109546 106251 2009-04-16 22:36:24 106250 02009-03-04 20:00:54 128920 02010-01-08 08:52:38 128921 128920 2010-01-08 08:53:02 128922 128920 2010-01-08 08:54:24 128923 128920 2010-01-08 08:54:33 128924 128920 2010-01-08 08:55:19 128925 128920 2010-01-08 08:55:26 124397 02009-11-07 09:52:23 123426 02009-10-22 16:05:00 109119 02009-04-10 12:02:24 106262 02009-03-04 19:56:41 127755 02009-12-24 17:21:58 20853 02010-01-23 08:42:00 18454 02010-01-23 08:42:15 18455 02010-01-23 08:42:2120090304,20090328,20090401,20090406,20090407,20090410,20090415,20090727,20091009,20091021,20091022,20091102,20091107,20091218,20091221,20091225,20091229,20091230,20100108,20100714,20100715,2272934 127759 2010-07-15 09:06:42 2010-07-15 09:06:42 10转载16 Linux文件系统简介rn Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Vir tual File System),为各类文件系统提供一个统一的操作界面和应用编程接口。rn Linux下的文件系统结构如下:rnrnrnrn Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。rn不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM(DRAM,SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,romfs,ramdisk,ramfs/tmpfs等。rnrn基于FLASH的文件系统rn Flash(闪存)作为嵌入式系统的主要存储媒介,有其自身的特性。Flash的写入操作只能把对应位置的1修改为0,而不能把0修改为1(擦除Flash就是把对应存储块的内容恢复为1),因此,一般情况下,向Flash写入内容时,需要先擦除对应的存储区间,这种擦除是以块(block)为单位进行的。rn闪存主要有NOR和NAND两种技术(简单比较见附录)。Flash存储器的擦写次数是有限的,NAND闪存还有特殊的硬件接口和读写时序。因此,必须针对Flash的硬件特性设计符合应用要求的文件系统;传统的文件系统如ext2等,用作Flash的文件系统会有诸多弊端。rn在嵌入式Linux下,MTD(Memory Technology Device,存储技术设备)为底层硬件(闪存)和上层(文件系统)之间提供一个统一的抽象接口,即Flash的文件系统都是基于MTD驱动层的(参见上面的Linux下的文件系统结构图)。使用MTD驱动程序的主要优点在于,它是专门针对各种非易失性存储器(以闪存为主)而设计的,因而它对Flash有更好的支持、管理和基于扇区的擦除、读/写操作接口。rn顺便一提,一块Flash芯片可以被划分为多个分区,各分区可以采用不同的文件系统;两块Flash芯片也可以合并为一个分区使用,采用一个文件系统。即文件系统是针对于存储器分区而言的,而非存储芯片。rn 1.jffs2rn JFFS文件系统最早是由瑞典Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux,uCLinux中。rn Jffs2:日志闪存文件系统版本2(Journalling Flash FileSystem v2)rn主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供写平衡支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。rn目前jffs3正在开发中。关于jffs系列文件系统的使用详细文档,可参考MTD补丁包中mtd-jffs-HOWTO.txt。rn jffsx不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大,另外,jffsx文件系统在挂载时需要扫描整个FLASH的内容,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。rn 2.yaffsrn yaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE,pSOS和ThreadX等。rn yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。当然,yaffs也可与MTD驱动程序配合使用。rn yaffs与yaffs2的主要区别在于,前者仅支持小页(512 Bytes)NAND闪存,后者则可支持大页(2KB)NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。rn 3.Cramfsrn Cramfs是Linux的创始人Linus Torvalds参与开发的一种只读的压缩文件系统。它也基于MTD驱动程序。rn在cramfs文件系统中,每一页(4KB)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本。rn Cramfs文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以XIP方式运行,所有的应用程序要求被拷到RAM里去运行,但这并不代表比Ramfs需求的RAM空间要大一点,因为Cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时,Cramfs文件系统自动计算压缩后的资料所存的位置,再即时解压缩到RAM中。rn另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。rn由于以上特性,Cramfs在嵌入式系统中应用广泛。rn但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。rn Cramfs映像通常是放在Flash中,但是也能放在别的文件系统里,使用loopback设备可以把它安装别的文件系统里。rn 4.Romfsrn传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以XIP(eXecute In Place,片内运行)方式运行,在系统运行时,节省RAM空间。uClinux系统通常采用Romfs文件系统。rn其他文件系统:fat/fat32也可用于实际嵌入式系统的扩展存储器(例如PDA,Smartphone,数码相机等的SD卡),这主要是为了更好的与最流行的Windows桌面操作系统相兼容。ext2也可以作为嵌入式Linux的文件系统,不过将它用于FLASH闪存会有诸多弊端。rn基于RAM的文件系统rn 1.Ramdiskrn Ramdisk是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。rn在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。rn 2.ramfs/tmpfsrn Ramfs是Linus Torvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。(实际上,VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。)rn Ramfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。rn Ramfs/tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。rn Tmpfs的一个缺点是当系统重新引导时会丢失所有数据。rn 3.网络文件系统NFS(Network File System)rn NFS是由Sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。rn以上讨论的都是基于存储设备的文件系统(memory-based file system),它们都可用作Linux的根文件系统。实际上,Linux还支持逻辑的或伪文件系统(logical or pseudo file system),例如procfs(proc文件系统),用于获取系统信息,以及devfs(设备文件系统)和sysfs,用于维护设备文件。rnrn开发环境rn操作系统:Ubuntu 10.4(linux kernel-v 2.6.31)rnrnrnrnrnrn Busybox-1.16.1的下载地址:rnrnrn配置Busyboxrn 1.创建制作文件系统的根目录rn在提示符后输入:rn/opt#mkdir rootfsrn进入存放busybox-1.16.1压缩包文件的目录,在提示符后输入:rnrn 3.进入busybox-1.16.1根目录,修改Makefile,修改ARCH和CROSS_COMPILE两变量的值rn ARCH?=armrn CROSS_COMPILE?=arm-linux-rn 4.通过busybox的配置菜单配置制作的文件系统rn在提示符后输入:rn/opt/busybox-1.16.1#make menuconfigrn系统将弹出配置菜单,通过菜单选择需要的选项,如图1所示:rnrnrnrn图1rn以下选项必须选择:rn Busybox Setting-rn build option-rnBuild BusyBox as astatic binary(no shared libs)rnBuild BusyBox as aposition independent executable(NEW)rnForce NOMMU buildrnBuild shared libbusyboxrn*Produce abinary for each applet,linked against libbusyboxrn*Produce additional busybox binary linked against libbusyboxrnBuild with Large File Support(for accessing files 2GB)rn()Cross Compiler prefixrn()Additional CFLAGSrnrn Busybox Setting-rn installation option-rn*Dont use/usrrn Applets links(as soft-links)-rn(/opt/rootfs)BusyBox installation prefix(该项输入编译安装路径,在此输入rootfs文件路径)rnrn Busybox Library Tuning-rn MD5:Trade Bytes for Speedrn*Faster/proc scanning code(+100 bytes)rn*Support for/etc/networksrn*Support for/etc/networksrn*Additional editing keysrn*vi-style line editing commandsrn*History savingrn*Tab completionrn*Username completionrn*Fancy shell promptsrnrn若出现如图2所示的错误:rnrnrnrn图2rn请安装有关编译程序。安装make,gcc,make-kpkg,运行menuconfig等等和编译内核相关的工具。rn有关命令如下:rn/opt#sudo apt-get install build-essential kernel-package libncurses5-devrn若安装不了,请检查/etc/apt/sources.list文件。rnrn编译Busyboxrn在提示符后输入:rn/opt/busybox-1.16.1#make installrn在rootfs文件下会多了bin、sbin两个文件夹和一个linuxrc文件,如图3所示:rnrn图3rnrn 1.创建文件系统其它目录rn进入rootfs目录,在提示符后输入:rn/opt/rootfs#mkdir boot dev etc home lib mnt proc root sys tmp var usrrn建立其它基本的目录,如图4所示:rnrnrnrn图4rnrn 2.建立及复制文件系统所需的文件rn 1.在/rootfs/dev/目录下建立console和null节点文件(要root身份)rn若缺少这两个文件,在挂载文件系统时将会有报错信息,如图5所示:rnrn图5rn进入/rootfs/dev/目录,在提示符后输入:rn/opt/rootfs/dev#mknod-m 666 console c5 1rn/opt/rootfs/dev#mknod-m 666 null c1 3rn如图6所示:rnrnrnrn图6rnrn 2.在/rootfs/etc/目录下建立fstab和inittab文件rn进入/rootfs/etc/目录,创建fstab文件,其内容如下:rn none/proc proc defaults 00rn none/dev/pts devpts mode=0622 00rn tmpfs/dev/shm tmpfs defaults 00rnrn进入/rootfs/etc/目录,创建inittab文件,其内容如下:rn#inittabrn:sysinit:/etc/init.d/rcSrn:askfirst:-/bin/shrn:restart:/sbin/initrn:ctrlaltdel:/sbin/rebootrn:shutdown:/bin/umount-a rrn:shutdown:/sbin/swapoff arn最后在提示符下输入:rn/opt/rootfs/etc#chmod+x fstab inittabrnrn 3.在/rootfs/etc/init.d/目录下建立rcS文件rn进入/rootfs/etc/目录,创建init.d目录,在该目录下创建rcS文件,其内容如下:rn#!/bin/shrn export PATH=/sbin:/bin:/usr/sbin:/usr/binrn echorunning/etc/init.d/rcSrnrn echomount-t proc proc/procrn mount-t proc proc/procrnrn echomount-t sysfs/sys/sysrn mount-t sysfs/sys/sysrn#echomount-t tmpfs/tmpfs/devrn#/mount-t tmpfs/tmpfs/devrnrn#echomount ramfs filesystem to/varrn#/mount-t ramfs none/varrnrn#echostarting udevd.rn#/udevd-daemonrn#/udevstartrnrn#ln-s/dev/rtc0/dev/rtcrn#/mount-t yaffs2/dev/mtdblock1/home/rnrn#hostname SBC6020rnrnrn#ifconfig eth0 hw ether 00:11:22:33:44:55rnrnrn#/opt/apache/bin/apachectl startrn#exec/etc/init.d/rcS.localrn最后在提示符下输入:rn/opt/rootfs/etc/init.d#chmod+x rcSrnrn 4.复制lib库文件rnrn若无动态lib库文件,挂载文件系统时,将会出现如图7所示的错误:rnrnrnrn图7rn当然,你也可以在配置busybox时,选择如下选择:rn Busybox Setting-rn build option-rn*Build BusyBox as astatic binary(no shared libs)rn使用静态库,这样就不必复制lib库文件了。rnrn至此,一个基本的文件系统制作完毕。如图8所示:rnrn图8rnrn文件历史记录rn版本编制日期更改内容rn-rn V1.0抵岸科技2010-7-4首发0.03861特别声明:1:资料来源于互联网,版权归属原作者2:资料内容属于网络意见,与本账号立场无关3:如有侵权,请告知,立即删除。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑环境 > 建筑工程


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!