嵌入式操作系统文件系统的构建实验报告书文档格式.doc
《嵌入式操作系统文件系统的构建实验报告书文档格式.doc》由会员分享,可在线阅读,更多相关《嵌入式操作系统文件系统的构建实验报告书文档格式.doc(18页珍藏版)》请在冰点文库上搜索。
![嵌入式操作系统文件系统的构建实验报告书文档格式.doc](https://file1.bingdoc.com/fileroot1/2023-5/4/0463e541-fd17-47ee-97f1-da787df2bb16/0463e541-fd17-47ee-97f1-da787df2bb161.gif)
目录格式
3
1
图表质量
1.5
页眉页脚
文档内容
内容完整性
10
内容逻辑性
8
6
内容正确性
9
程序代码(40分)
程序功能
20
18
编程规范
编程文档
考勤(20分)每天4分,无故迟到、早退扣2分,无故旷课扣4分。
总评成绩
89.5
指导教师评语
签名:
年月日
教研室意见
目录
第一章实验准备 1
1.1实验内容 1
1.2实验目的 1
1.3实验原理 1
1.4实验设备及工具 2
1.5课题分工 2
1.6需求分析 2
第二章实验过程 3
2.1概要设计 3
2.2详细设计 3
2.2.1文件系统的制作 3
2.2.2配置文件系统 4
2.2.3创建设备文件 4
2.2.4使用格式工具制作JFFS2文件映像 5
2.2.5烧写文件系统到目标机 5
第三章设计阶段/编码分析 7
3.1BusyBox启动基本流程分析:
7
3.2构建文件系统流程图:
3.4代码分析 8
第四章程序调试 10
4.1程序运行及调试 10
4.2问题及解决 10
第五章实验总结 11
参考文献 12
附录 13
第一章实验准备
1.1实验内容
1、根据系统提供的busybox源代码,编译busybox,写出具体编译过程
2、利用配置文件系统实例,配置一个适合开发板的文件系统,写出需要配置文件的功能
3、利用mkfs.jffs制作文件系统映像,并将文件系统映像下载到开发板,写出系统启动后的结果。
1.2实验目的
1、了解嵌入式操作系统中文件系统的类型和作用
2、了解JFFS2文件系统的优点及其在嵌入式系统中的作用
3、掌握利用BusyBox软件制作嵌入式文件系统的方法
4、掌握嵌入式Linux文件系统的的挂载过程
1.3实验原理
JFFS文件系统是瑞典Axis通信公司开发的一种基于Flash的日志文件系统,它在设计时充分考虑了Flash的读写特性和电池供电的嵌入式系统的特点,在这类系统中必需确保在读取文件时,如果系统突然掉电,其文件的可靠性不受到影响。
对RedHat的DavieWoodhouse进行改进后,形成了JFFS2。
主要改善了存取策略以提高FLASH的抗疲劳性,同时也优化了碎片整理性能,增加了数据压缩功能。
需要注意的是,当文件系统已满或接近满时,JFFS2会大大放慢运行速度。
这是因为垃圾收集的问题。
相对于EXT2fs而言,JFFS2在嵌入式设备中更受欢迎。
JFFS2文件系统通常用来当作嵌入式系统的文件系统。
JFFS2克服了JFFS的一些缺点:
使用了基于哈希表的日志节点结构,大大加快了对节点的操作速度
l支持数据压缩
l提供了“写平衡”支持
l支持多种节点类型
l提高了对闪存的利用率,降低了内存的消耗
我们需要在自己的嵌入式Linux中加入JFFS2文件系统并做少量的改动,就可以使用JFFS文件系统。
通过JFFS2文件系统,可以用Flash存储器来保存数据,即将Flash存储器作为系统的硬盘来使用。
可以像操作硬盘上的文件一样操作Flash芯片上的文件和数据。
同时系统运行的参数可以实时保存到Flash存储器芯片中,在系统断电后数据不会丢失。
JFFS2文件系统是一种“追加式”的文件系统,新的数据总是被追加到上次写入数据的后面。
这种“追加式”的结构就自然实现了“损耗平衡”。
1.4实验设备及工具
硬件:
XSBase270实验平台,PC机pentium500以上,硬盘10G以上。
软件:
PC机操作系统RedHatLinux9.0+MiniCOM+ARM-Linux开发环境。
1.5课题分工
1、小组人员先在一起讨论实验内容和详细步骤。
2、鲁芳菡、李佳丽负责实验操作,魏星星负责查找整理实验资料,并参与监督讨论问题,最后三个人一起做实验报告,并讨论实验中所遇到的问题。
1.6需求分析
功能需求分析:
能够实现制作mkfs.jffs2文件系统映像,并将文件系统映像下载烧写到开发板。
性能需求分析:
PC机的CPU性能需要pentium500以上,硬盘需要10G以上
虚拟机需要安装RedHatlinux9.0操作系统,操作系统内要安
装minicon,以及ARM-Linux开发环境,符合以上性能才能进行。
课题任务目标:
系统运行环境:
PC机、操作系统RedHatLinux9.0+MiniCOM+ARM-Linux开发环境。
小组成员讨论:
嵌入式文件系统的构建实验,首先需要PC机和实验机各一台,实验代码和程序要提前准备并共享在虚拟机里边。
还需要对Busybox进行解压,然后编译。
在配置文件系统的时候,要对多个程序编译,而且还要配置一些设备文件。
在制作JFF2文件映像并烧写到Linux实验机时,需要检查目标机minicom是否安装完备并设置完成,最后对程序调试和测试,直至正确运行。
整个实验要特别注意的是对Busybox编译正确,在烧写时要保证程序的正确性,而且还要对minicom进行设置并启动。
第二章实验过程
2.1概要设计
【根文件系统构架】
/
bin
sbin
boot
dev
etc
home
lib
mnt
proc
tmp
usr
Lost+found
local
rc.d
init.d
sysconfig
【构建文件系统流程图】
设备文件
Console等
MTD块设备mdblock3等
符号连接文件rcS
2.2详细设计
2.2.1文件系统的制作
1、从网上下载BusyBox软件包,这里下载的是busybox-1.00-pre05.tar.bz2。
首先把它放在/root/Xsbase270_Linux/Filesystem目录下并进行解压缩。
2、通过makemenuconfig进行配置。
3、配置完成后,分别输入makedep、makeinstall命令,便可对BusyBox进行编译。
4、保存好menuconfig的配置后,对BusyBox进行编译make和安装makeinstall,安装完毕后,cd/XSBase270/Filesystem/bus/busybox-1.00-pre5/_install到安装的目录下,可以找的bin、sbin、usr目录和Linuxrc等一系列文件。
实验截图如图5-1所示。
图5-1BusyBox的编译
2.2.2配置文件系统
1、在_install目录下,用mkdir创建etc文件夹,cdetc创建inittab、rc、motd三个文件,其中rc用chmod777rc增加可执行属性。
2、在etc下建立init.d目录,而后在init.d目录下建立rc文件的符号连接文件rcS。
指令如下:
#mkdirinit.d
#cdinit.d
#ln–s../rcrcS
2.2.3创建设备文件
1、在_install下建立dev目录,创建设备文件。
在本实验中一些设备文件是必需的,比如系统控制台console,MTD块设备mdblock3等,可以使用mknod命令来创建。
#mknodconsolec51
#mknodmdblock3b313
2、除了使用mknod命令来手工创建设备文件外,还可以复制主机平台/dev目
录下一些必要的设备文件在:
/root/Xsbase270_Linux/Filesystem/busybox-1.00-pre5/_install/dev
目录下,指令如下:
#cp-dpR/dev/*/root/Xsbase270_Linux/Filesystem/busybox-1.00-pre5/_install/dev
(-dp参数表示复制过程中保证链接文件保持不变,但不会复制链接所指的原文件,而且属性不变,然后删除不必要的设备文件。
)实验截图如图5-2所示。
图5-2创建设备文件
2.2.4使用格式工具制作JFFS2文件映像
1、将光盘的filesystem下的mkfs.jffs2拷贝到buybox下。
2、在busybox的根目录下,运行命令mkfs.jffs2。
2.2.5烧写文件系统到目标机
1、生成映像文件rootfs270.img,拷贝到/tftpboot中。
2、运行minicom,烧写到flash中。
3、对程序进行调试和测试,测试无误后,启动运行结果。
实验截图如图5-3所示。
图5-3烧写映像文件
第三章设计阶段/编码分析
内核启动后的第一个进程为init进程,它根据配置文件决定启动哪些程序,比如要执行哪些脚本、启动shell、执行用户指定进程等。
一般init进程的执行都是通过/sbin/init发起,所以实际上,BusyBox的启动流程可以概括为:
/sbin/init->
/etc/inittab->
/etc/init.d/rcS。
init进程执行过程:
步骤
描述
为init设置信号处理进程
初始化控制台
解析inittab文件(/etc/inittab)
执行系统初始化命令(动作类型:
sysinit)
5
执行所有阻塞的(会导致init暂停的)inittab命令(动作类型:
wait)
执行所有仅执行一次的inittab命令(动作类型:
once)
7
一旦完成以上工作,init进程会循环步骤8,9
执行所有终止时必须重新启动的inittab命令(动作类型:
respawn)
执行所有终止时必须重新启动,但启动前必须询问用户的inittab命令(动作类型:
askfrist)
3.2代码分析
u/root/Xsbase270_Linux/Filesystem/busybox-1.00-pre5/_install/etc文件目录下的rc(代码见附录)
[root@localhostetc]#chmod777rc
功能分析:
1、脚本文件rc的开头部分不是注释,而是脚本文件开头的固定格式,如果缺省,会出现FAQ中的问题。
2、mount:
Linux下的一个命令,它可以将Windows分区作为Linux的一个“文件”挂接到Linux的一个空文件夹下。
3、chmod命令:
改变文件属性。
u在etc下新建一个inittab文件(代码见附录)
inittab:
为linux初始化文件系统时init初始化程序用到的配置文件。
这个文件负责设置init初始化程序初始化脚本在哪里;
每个运行级初始化时运行的命令;
开机、关机、重启对应的命令;
各运行级登陆时所运行的命令。
id字段:
表示该进程使用的控制台,可以省略。
runlevel字段:
对于BusyBoxinit进程没有意义,可以省略。
action字段:
用来指定可应用到process的动作。
process字段:
用来指定所要执行的程序、脚本。
Busyboxinit能够识别的inittab动作及类型描述:
respawn:
监视子程序终止执行时,重新启动。
sysinit:
为init提供初始化命令行的路径。
wait:
告诉init必须等到相应进程完成才能继续执行。
once:
仅执行相应的进程一次,而且init不会等待它完成。
shutdown:
当系统重启关机时执行相应程序。
restart:
当init重新启动时,执行相应的进程。
askfrist:
类似respawn,它的主要用途是减少系统上执行的终端应用程序数量。
他会促使init在控制台上显示“PleasepressEntertoactivatethis
console.”的信息,并在重新启动进程之前等待用户按下Enter键。
uetc下建立motd文件代码:
Welcometo
========================================
ARM-LINUXWORLD
Baseon:
Xsbase270-EDR
Partner:
emdoor()
u符号连接文件rcS:
符号链接又叫软连接,是一类特殊的文件,这个文件包含了另一个文件的路径名(绝对路径或者相对路径)。
路径可以是任意文件或目录,可以链接不同文件系统的文件。
u创建设备文件,可以使用mknod命令来创建:
1、-dp参数表示复制过程中保证链接文件保持不变,但不会复制链接所指的原文件,而且属性不变,然后删除不必要的设备文件。
2、mknod命令:
手工创建设备文件。
第四章程序调试
4.1程序运行及调试
1、先在目标机烧写并试运行,运行不了再调试修改;
2、查看程序的正确性,确认字母大小写是否正确。
标点符号和空格的标注是否正确;
3、查看命令的输入,所属文件名称等是否正确;
4、最后在目标机运行,程序在编译过程中要特别仔细,不能出错。
4.2问题及解决
问题一:
在编译Busybox过程中,编译不成功。
讨论解决:
看在交叉编译选项中需要使用带glibc库的支持的交叉编译器arm-linux-gcc,具体配置是否正确,通过menuconfig对Busybox重新详细设置,然后查看虚拟机命令输入是否正确。
问题二:
程序烧写运行不了.
对程序仔细检查,看是否有写入(标点、字母大小写、是否空格等)、编译错误,查看程序所在的文件夹是否对应正确。
第五章实验总结
通过这次实验,我们对课堂上所学的知识进行了实践操作,有助于我们更好地理解这些理论知识,将其转化为日后学习、工作的技能。
做完这个实验不仅让我们对平台更加熟悉,而且让我们对busybox、mkfs.jffs2有了比较深入的了解。
加深了对嵌入式系统的基础知识了解,提高了开发嵌入式应用系统,解决实际难点的能力。
在实验过程中也遇到一些问题,比如说编译和烧写阶段,都有出现过错误,经过小组讨论,反复修改,最终得出正确的实验结果。
让我们不仅收获了知识,提高实践操作能力,还大大提高了我们的团队合作能力。
这是我们三个人一起努力的成果。
我们有这样的成绩,非常感谢老师!
在平时的学习和实践操作当中,高老师给予了我们热心的帮助和大力的支持,给我们提了诸多的宝贵意见,拓宽了我们的思维。
在此我们向老师诚挚和衷心的感谢!
参考文献
【1】高欣.嵌入式文件系统的构建实验指导书.开封:
黄河水利职业技术学院.2012.
【2】谢荣生.嵌入式系统软件设计.北京:
邮电大学出版社.2011.P123-P138
【3】亿道公司.亿道LINUX版使用手册.深圳:
亿道电子技术有限公司.2006.
【4】电子文献:
EELiodLinux使用手册.pdf
【5】百度百科
附录
1、etc文件目录下的rc代码:
#!
/bin/sh
hostnameemdoor
mount-tprocproc/proc
cat/etc/motd
2、etc文件目录下inittab代码:
:
sysinit:
/etc/init.d/rcS
#Startan"
askfirst"
shellontheconsole(whateverthatmaybe)
askfirst:
#/sbin/gettyinvocationsforselectedttys
tty4:
respawn:
/sbin/getty38400tty5
tty5:
/sbin/getty38400tty6
#Exampleofhowtoputagettyonaserialline(foraterminal)
#:
/sbin/getty-LttyS09600vt100
/sbin/getty-LttyS19600vt100
#
#Examplehowtoputagettyonamodemline.
/sbin/getty57600ttyS2
#Stufftodowhenrestartingtheinitprocess
restart:
/sbin/init
#Stufftodobeforerebooting
ctrlaltdel:
/sbin/reboot
shutdown:
/bin/umount-a-r
/sbin/swapoff-a
3、etc下建立motd文件代码:
Welcometo
11