欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    实验九根文件系统构建实验文档格式.docx

    • 资源ID:4605672       资源大小:546.13KB        全文页数:19页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    实验九根文件系统构建实验文档格式.docx

    1、目录内容bin 必要的用户命令(二进制文件)boot 引导加载程序所使用的静态文件dev设备文件和其他特殊文件etc 系统配置文件,包括启动文件home 用户主目录lib 必要的程序库(例如 C 程序库)以及内核模块media 挂载点,用于可移除媒体mnt 挂载点,用于临时挂载的文件系统opt 附加的软件套件proc 用于提供内核与进程信息的虚拟文件系统root root 用户的主目录sbin 必要的系统管理员命令(二进制文件)sys 系统信息与控制(总线、设备以及驱动程序)的虚拟文件系统tmp 临时文件usr 在第二层包含了对大多数用户有用的大量应用程序和文件,包括X服务器var 用于存放服

    2、务程序和工具程序的可变资料Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的场合。在嵌入式Linux应用中,主要的存储设备为RAM(DRAM, SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括jffs2,yaffs,cramfs,romfs,ramdisk,ramfs/tmpfs等。基于FLASH的文件系统flash(闪存)作为嵌入式系统的主

    3、要存储媒介,有其自身的特性。Flash的写入操作只能把对应位置的1修改为0,而不能把0修改为1(擦除Flash就是把对应存储块的内容恢复为1),因此,一般情况下,向Flash写入内容时,需要先擦除对应的存储区间,这种擦除是以块(block)为单位进行的。闪存主要有NOR和NAND两种技术(简单比较见附录)。Flash存储器的擦写次数是有限的,NAND闪存还有特殊的硬件接口和读写时序。因此,必须针对Flash的硬件特性设计符合应用要求的文件系统;传统的文件系统如ext2等,用作Flash的文件系统会有诸多弊端。在嵌入式Linux下,MTD(MemoryTechnologyDevice,存储技术设

    4、备)为底层硬件(闪存)和上层(文件系统)之间提供一个统一的抽象接口,即Flash的文件系统都是基于MTD驱动层的(参见上面的Linux下的文件系统结构图)。使用MTD驱动程序的主要优点在于,它是专门针对各种非易失性存储器(以闪存为主)而设计的,因而它对Flash有更好的支持、管理和基于扇区的擦除、读/写操作接口。顺便一提,一块Flash芯片可以被划分为多个分区,各分区可以采用不同的文件系统;两块Flash芯片也可以合并为一个分区使用,采用一个文件系统。即文件系统是针对于存储器分区而言的,而非存储芯片。JFFSJFFS文件系统最早是由瑞典AxisCommunications公司基于Linux2.

    5、0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux,uCLinux中。Jffs2:日志闪存文件系统版本2(JournallingFlashFileSystemv2)主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。目前jffs3正在开发中。关于jffs系列文件系

    6、统的使用详细文档,可参考MTD补丁包中mtd-jffs-HOWTO.txt。jffsx不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大,另外,jffsx文件系统在挂载时需要扫描整个FLASH的内容,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。yaffsyaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支

    7、持WinCE,pSOS和ThreadX等。yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。当然,yaffs也可与MTD驱动程序配合使用。yaffs与yaffs2的主要区别在于,前者仅支持小页(512Bytes)NAND闪存,后者则可支持大页(2KB)NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。CramfsCramfs是Linux的创始人LinusTorvalds参与开发的一种只读的压缩文件系统。它也基于MTD驱动程序。在cramfs文件

    8、系统中,每一页(4KB)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本。Cramfs文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以XIP方式运行,所有的应用程序要求被拷到RAM里去运行,但这并不代表比Ramfs需求的RAM空间要大一点,因为Cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时,Cramfs文件系统自动计算压缩后的资料所存的位置,再即

    9、时解压缩到RAM中。另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。由于以上特性,Cramfs在嵌入式系统中应用广泛。但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。Cramfs映像通常是放在Flash中,但是也能放在别的文件系统里,使用loopback设备可以把它安装别的文件系统里Romfs传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以XIP(eXecuteInPlace,片内运行)方式运行,在系统运行时,节省RAM空间。uClinux系统通常采用Romfs文件系

    10、统。其他文件系统:fat/fat32也可用于实际嵌入式系统的扩展存储器(例如PDA,Smartphone,数码相机等的SD卡),这主要是为了更好的与最流行的Windows桌面操作系统相兼容。ext2也可以作为嵌入式Linux的文件系统,不过将它用于FLASH闪存会有诸多弊端。基于RAM的文件系统1RamdiskRamdisk是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。在Linux的启动阶段,init

    11、rd提供了一套机制,可以将内核映像和根文件系统一起载入内存2ramfs/tmpfsRamfs是LinusTorvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。(实际上,VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。)Ramfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。R

    12、amfs/tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。Tmpfs的一个缺点是当系统重新引导时会丢失所有数据。3.网络文件系统NFS(NetworkFileSystem)NFS是由Sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。以上讨论的都是基于存储设备的文件系统(memory-basedfilesystem),它们都可用作Linux的根文件系统。实际上,Linux还

    13、支持逻辑的或伪文件系统(logicalorpseudosystem),例如procfs(proc文件系统),用于获取系统信息,以及devfs(设备文件系统)和sysfs,用于维护设备文件。补充知识点1 inittab在创建这个文件之前先了解一下它的作用:Linux内核引导完成以后,就启动系统的第一个进程init,init进程称为所有进程之父,进程号是1,位于sbin目录下。init进程需要读取/etc/inittab文件作为其行为指针,inittab是以行(hang)为单位的描述性(非执行性)文本,每一个指令行都具有以下格式:id:runlevel:action:process其中,各字段以及

    14、与其相关的说明如下: id:登记项标识符,最多为4个字符。用于惟一地标识/etc/inittab文件中的每一个登记项。 runlevel:系统运行级,就是操作系统当前正在运行的功能级别。这个级别从1到6,具有不同的功能。如果该字段为空,那么相应的登记项将适用于所有的运行级。所有功能级别参考表9-1。 action:动作关键字。用于指定init(M)命令或进程对相应进程(在“process”字段定义)所实施的动作。参考表9-2。process:所要执行的shell命令。任何合法的shell语法均适用于该字段。表9-1 系统运行级runlevel功能级别0 停机(千万不能把initdefault

    15、设置为0)1单用户模式2多用户模式,没有NFS3完全的多用户模式4没有用的5X116重新启动(千万不能把initdefault 设置为0)表 9-2 action动作对应表action执行动作sysinit系统引导期间执行此进程。本进程会在 boot 或 bootwait 条目之前得到执行。runlevels 域被忽略。respawn该进程只要终止就立即重启askfirst类似respawn,不过它的主要用途是减少系统上执行的终端应用程序的数量。它将会促使init在控制台上显示“Please press Enter to active this console”的信息,并在重新启动之前等待用户

    16、按下Enter键restartinit重新启动时执行的进程shutdown系统关机时执行相应的进程boot系统引导过程中执行该进程,runlevel域被忽略bootwait系统引导过程中执行该进程,并且,init等待该进程的结束。当该进程死亡时,也不重新启动该进程。initdefault指定系统引导完成之后的默认运行级。如果不存在该登记项,那么init将要求用户在系统启动时指定一个最初的运行级。off如果相应的进程正在运行,那么就发出一个警告信号,等待20秒后,再通过杀死信号强行终止该进程。如果相应的进程并不存在就忽略。once只要进入相应的运行级别,init就执行该进程一次。ondemand

    17、与“respawn”的功能完全相同,但只用于运行级为a、b或c的登记项。powerfail只在init接收到电源失败信号时执行相应的进程,但不等待该进程结束。powerwait只在init接收到电源失败信号时执行相应的进程,并在继续对/etc/inittab文件进行任何处理前等待该进程结束。wait只要进入指定的运行级别就启动该进程,并且init等待该进程结束ctrlaltdel按下Ctrl-Alt-Delete 的组合键时执行的进程补充知识点2创建设备文件先了解一下Linux的设备:Linux中主要有2种类型的设备:字符设备(无缓冲且只能顺序存取)、块设备(有缓冲且可以随机存取)。每个设备都

    18、必须有主、次设备号,主设备号相同的设备是同类设备(使用同一个驱动程序)。这些设备中,有些设备是对实际存在的物理硬件的抽象,而有些设备则是内核自身提供的功能(不依赖于特定的物理硬件,又称为虚拟设备)。每个设备在 /dev 目录下都有一个对应的文件(节点)。可以通过 cat /proc/devices 命令查看当前已经加载的设备驱动程序的主设备号。你可以在你的宿主机上执行这个命令看看你的宿主机所拥有的设备文件,可以看到,Linux有很多很多的设备文件,在嵌入式Linux中并没有这么多的设备,下面用mknod命令创建一些主要设备文件。关于Linux的设备号:很多设备在Linux下已经有默认的主次设备

    19、号,如帧缓冲设备是Linux的标准字符设备,主设备号是29,如果Linux下有多个帧缓冲设备,那么这些帧缓冲设备的次设备号就从031(Linux最多支持32个帧缓冲设备)进行编号,比如fb0对应的次设备号就是0,fb1为1,类推。用户也可以创建自己的设备文件,比如下一篇章中我们要讨论的Led设备,需要注意的是用户自己的设备号不能与一些标准的系统设备号重叠。Linux下创建设备节点的命令是mknod,下面是它的命令格式:mknod Name b | c Major MinorName是设备名称,“b”或“c”用来指定设备的类型是块设备还是字符设备。Major指定设备的主设备号,Minor是次设备

    20、号。创建嵌入式Linux系统中一些基本的设备文件,必须是root权限五、 实验步骤第一步: 配置busybox1、 从网上下载BusyBox 软件包(busybox-1.17.2-20101120.tgz),也可以用我们提供的软件包,把该软件解压到/opt目录下。【图9-1】2、 切换到busybox目录,执行make menuconfig 命令,进入busybox图形配置界面,如【图9-2】所示。按键盘上下键移动选择对应的选项,如果有下级菜单,敲回车进入下级菜单,在对应的菜单项中敲空格可以选中与取消选择该项如图9-3。【图9-2】【图9-3】配置界面3、 为了简化配置过程,用户可以先加载一个

    21、默认的配置文件,首先在配置主界面中向下翻页,找到“Load an Alternate Configuration File”项,如图 9-4所示; 【图9-4】加载配置文件按下回车键后,可看到如图9-5所示画面【图9-5】进入加载配置文件选项界面首先将其中的“.config”删除,并输入“fa.config”,然后回车,如图9-6所示【图9-6】输入配置文件名接下来可以根据自己的需要配置 BusyBox 中包含的命令。完成后,回到配置界面的主界面,选择“Exit”退出配置程序,会弹出是否保存的提示,选择“Yes”,如图9-7所示;【图9-7】退出并保存配置4、 回到终端后,执行 make ,编

    22、译成功后执行“ make install ”命令,或者按照如图 9-8所示执行命令;【图9-8】编译安装Busybox等待编译安装结束,可以看到图 9-9所示的提示;【图9-9】编译安装结束可以看到,在 Busybox 文件夹的上一级目录中,生成了一个名为“rootfs”的文件夹,其中包含了bin、sbin两个文件夹,并包含一个linuxrc的链接,如图9-10所示;【图9-10】安装之后的目录结构第二步、创建其他目录和文件1、 进入由busybox所生成的rootfs目录,在该目录下添加以下目录结构,所使用命令如下(以下命令也可以写一个脚本直接运行):1 cd /opt/rootfs2 mk

    23、dir root dev boot etc lib proc sys mnt tmp var home3 chmod 1777 tmp 4 mkdir usr/lib usr/modules 5 mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp 6 mkdir var/lib var/lock var/log var/run var/tmp 7 chmod 1777 var/tmp 第一行进入根文件系统目录。 第二行在根目录下创建一级目录root dev boot etc lib proc sys mnt tmp var home。 第三行

    24、更改tmp权限,使得用户只能修改、删除自己在本目录下创建的文件。 第四行创建usr目录下的子目录 第五行创建mnt目录下的子目录。 第六行创建var目录下的子目录。 第七行更改var/tmp目录的权限。2、创建设备文件。 在本实验中,系统控制台console,可以使用mknod 命令来创建。mknod -m 600 dev/console c 5 1 mknod -m 600 dev/null c 1 3 第一行创建系统控制台设备 第二行创建空设备,任何写入都将被丢弃,任何读取都得到EOF本次配置中devs设备配置采用mdev方式第三步、建立etc目录下的配置文件1、 Linux启动所需要的文

    25、件有etc/inittab、etc/init.d/rcS、etc/fstab这三个文件,在etc下建立inittab文件,在该文件呢输入以下内容(使用vi编辑器编辑以下内容即可,或者nano):sysinit:/etc/init.d/rcSaskfirst:-/bin/shrespawn:restart:/sbin/init ctrlaltdel:/sbin/rebootshutdown:/bin/umount -a -r/sbin/swapoff -a分析该配置文件,可以知道init进程首先执行/etc/init.d/rcS脚本文件,该文件马上就会被创建。2、创建rcS文件,执行命令:mkd

    26、ir etc/init.dnano etc/init.d/rcS 在文件中添加如下内容:#!/bin/sh# mount all filesystem defined in fstabecho #输入你们小组成员名字#mount all./bin/mount -a更改该文件的权限:chmod 777 rcS3、创建fstab文件,执行命令:nano etc/fstabproc /proc proc defaults 0 0none /tmp ramfs defaults 0 0sysfs /sys sysfs defaults 0 0 mdev /dev ramfs defaults 0 0第

    27、四步、建立动态链接库该目录下存放程序运行时所需要的加载器和动态库, 我们可以直接从前面已经安装好的交编译器中拷贝相应的库文件。cd /opt/rootfs/libcp -a /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/*.so* ./ 第五步、制作根文件系统映像文件1、 使用友善之臂提供的制作yaffs2文件制作工具mkyaffs2image-128M,该制作工具在mktools-20120518.tar.gz内,先对该文件进行解压,如下:tar xvfz mktools-20120518.tar.gz C /该文件被解压到/usr/sbin目录下2、 在mkyaffs2image-128M制作工具目录下(要进入到/usr/sbin目录下)执行以下命令“mkyaffs2image-128M /opt/rootfs /opt/rootfs_qtopia_qt4.img 将生成的根文件系统映像文件拷贝到SD卡,重启开发板,看到下图表示


    注意事项

    本文(实验九根文件系统构建实验文档格式.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开