




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 / 24文件系统实验报告嵌入式系统实验报告091180083 刘浩通信工程一、实验目的了解嵌入式系统的开发环境,内核的下载和启动过程;了解 Linux 内核源代码的目录结构及相关内容;了解 Linux 内核各配置选项的内容和作用;掌握 Linux 内核的编译过程;理解嵌入式操作系统文件系统的类型和作用;了解 jffs2 文件系统的优点及其在嵌入式系统中的作用;掌握 busybox 软件制作嵌入式文件系统的方法;掌握Linux 嵌入式文件系统的挂载过程。二、嵌入式系统开发实验1、minicom 和 tftp串口通信的硬件基础:嵌入式系统一般通过异步串行接口进行初级引导。本实验中用到的是 RS-232C 标准的接口。软件结构:minicom运行 minicom,Ctrl+A-o 进入 minicom 的configuration 界面。对串行通信接口进行配置,如串行通信口的设置,波特率、数据位等串口参数的设置。保存好设置后以后可以不用再设置。bootloader 引导:给开发板加电,任意按下一2 / 24个键进入 bootloader 界面。可以通过命令行方式进行设置,按 0 进入命令行模式,出现51board,可以设置开发板和pc 机的 ip 地址:set myipaddr (设置开发板的 ip 地址),set destipaddr 。注意 ip 地址的设置:使其处于同一网段,并且避免和其他系统的 ip 发生冲突。通过 bootloader 的主菜单可以完成很多功能,3下载内核,4将内核烧进 flash,5下载文件系统,6将文件系统烧进 flash,7启动嵌入式操作系统等。由于 bootloader 需要从服务器上下载内核和文件系统,一般采用 tftp 服务。进入/etc/tftp 修改配置,注意一定要关闭防火墙,否则可能导致下载时出问题。再设置完后要重新启动 tftp 服务。按下 a,写入下载的内核名和文件系统名,之后就可以进行下载和启动。2、pc 机和开发板之间文件共享NFS 文件系统服务NFS 是在不同机器不同操作系统之间进行网络共享文件的服务系统。在嵌入式系统中目标机可以将宿主机的共享文档挂载在自己的系统中,从而,目标机使用宿主机上的远端文件就像是使用自己本地的文件一样,有利于嵌入式开发。 在 pc 机上要打开 NFS 服务:3 / 24#chkconfignfs on#chkconfigportmap on#service nfs restart#service portmap restart我们要查看服务器的共享目录是哪个目录时,需要在/etc/exports 中查看或者修改设置。通过查看,发现默认的共享目录设置为/exp。当想修改共享目录时,可以编辑文件 exports,保存退出后需要用#exportfsa 这条命令使设置生效。 启动目标板操作系统后,用 mount 命令将主机的共享目录挂载在目标机的/mnt 目录下:#mount :/exp /mnt此条命令之前先要设置目标机的 ip:#ifconfig eth0 3、编写应用程序,分别在主机和目标机上运行,注意区别编写简单的 c 程序:#include int main()printf(“hello,worldn”);return 0;在主机上编译,gcc hello 4 / 24执行./hello显示 hello,world将 hello 可执行程序复制到/exp:cp hello /exp在目标机上 cd /mnt./hello出现错误。因为主机上编译生成的 x86 体系下的二进制代码,而目标机用的是 arm 体系。不能兼容。在主机上用交叉编译器进行编译。本实验中用到的是 arm-linux-gcc,所在目录/usr/local/arm-linux/bin.编译方法是:/usr/local/arm-linux/bin/arm-linux-gcco hello1 或者先 export PATH=/usr/local/arm-linux/bin:$PATH然后 gcc o hello1 在主机上运行./hello1错误不能运行。因为可执行程序是 arm 代码。在 x86 上不能正确运行。 将 hello1 复制到共享目录/exp在目标机上运行/mnt/hello1显示 hello,world4 归纳总结嵌入式系统下软件开发的一般流程pc 机上软件的编写在 pc 机上编译及调试5 / 24在 pc 机上采用交叉编译器进行编译生成可执行程序将可执行程序下载到目标机中在目标机上运行程序三、Linux 内核配置和编译1、内核源代码目录的简单介绍本实验中用的是内核源码是_EDR 在目录/usr/src/linux 下。源代码树下有如下目录:arch,include,init,mm,kernel,drives,lib,net,ipc,fs,scripts。本实验中要求将目标板的启动画面换成自己设定的画面。做法是:将/usr/src/linux 目录下的内核源代码拷贝到自己的目录下,进入这个目录,在 arch/arm 下找到开发板启动画面的文件,将其删除,用自己的图画替换。注意,目标板只是别.ppm 文件,所以需要改变原来图画的文件格式,可直接改文件后缀名,或者在终端中用命令:convert 2、编译内核进入内核源代码目录,输入:make menuconfig进入内核配置菜单,可以根据需要对内核配置项进行选择。配置变量有四种选择:y静态编译进内核,m内核代码被编译成模块,n表示不编译进内核, 表示配置变量的值为空。在配置过程中,可以通过 help 来帮6 / 24助了解各个配置变量的功能,从而决定要不要把这项编译进内核。下面针对一些比较重要的内核配置项进行说明:1code maturity level options 代码的成熟程度。我在网上看到一篇文档中提到:要配置 framebuffer必须将其选为 y。故我在实验中将其选为 y,其实不选也行。2Loadable module support.将不常用的设备模块化,动态地加载。这样能更加有效利用内存。所以最好选为 y。3System type 处理器种类。本实验选“PXA270/210-based”“XSBase270-EDR”4在 Network device support,网络设备驱动。选择对应的网卡。本实验箱的网卡是“Ethernet 10M or 100Mbit”SMSC LAN91C111”,将其选为 y5Console drivers.终端设备驱动配置。为了以后实验中要用到的支持图像的功能,要选择“support for framebuffer devices”和”PXA LCD support” 。上面这些配置很重要。其他的配置见实验讲义p20。配置完之后选择保存,执行完之后会生成.config 文件。然后执行 make clean,清除以前构核过程中生成的目标文件、模块文件、核心和一些临时文件。再执7 / 24行 make dep,建立依赖关系,然后 make,将生成核心vmlinux,再执行 make zImage,则可以在 arch/arm/boot 下生成压缩的内核映像文件 zImage。3、通过 bootloader 加载引导内核我们将生成的内核映像文件拷贝到/tftpboot 下,以便开发板下载。然后我们将内核下载到开发板。先保证电脑和开发板之间是连接的。在终端中输入 minicom,给开发板上电,按照上一实验的方法进行下载,然后 boot 执行启动。看到开发板出现自己设置的启动画面。在系统启动过程中,终端提示文件系统没有启动。原因可能是文件系统没有配置好,这将是下次实验的要求。在这次实验中不对其做过多分析。4、总结内核映像文件的生成方法及其对操作系统的作用Make menuconfigmake cleanmake depmakemake zImage内核文件是操作系统的核心,负责系统的进程管理,内存管理,设备和文件管理等,决定着系统的性能和稳定性。5、内核配置中哪些选项对操作系统的正常启动是必须的?8 / 24System type (系列选型);Character devices(字符设备驱动)中的 Virtual terminal,support for console on serial support,support for console on virtual terminal,standard/generic serial support,unix98 PTY support; 文件系统四、嵌入式文件系统的构建1、linux 文件系统的类型和优缺点比较1、ext2fs/ext3fs 可以实现快速符号链接,类似于 Windows 文件系统的快捷方式,可将目标名称直接存储在索引节点表中,提高了访问速度;支持的内存大至 4TB,文件名称很长,可达 1024 个字符;管理者在创建系统文件时根据需要选择存储逻辑块的大小。这种文件系统稳定,可靠,健壮,在台式机、服务器、工作站中普遍使用。2、jffs2 支持数据压缩,多种文件节点类型,是一种基于 FLASH 的日志文件系统,提高了对闪存的利用率,降低了内存的损耗。通过 jffs2,可以通过 flash 来存储数据,将 flash 当作硬盘来使用,而且系统运行的参数可以实时保存在 flash 中,在系统断电后数据不会丢失。它在嵌入式系统中很受欢迎。3、romfs 是一种相对简单,占用空间较少的文9 / 24件系统。它比 ext2 文件系统代码少,而且它在建立系统超级块时需要更小的空间。但它只是可读文件系统,禁止写操作,因此系统同时需要虚拟盘来支持临时文件和数据文件的存储。2、busybox 简单介绍和编译Busybox 可编译成一个叫做 busybox 独立执行程序,根据配置,可以执行几十个小应用程序。 这其中包括一个迷你的 vi 编辑器, 系统不可或缺的 /sbin/init 程序, 以及如 ifconfig, ping,mkdir, mount, cat,ls等程序。Busybox 将全部的功能都编译进去,也只有 100多 k。我们可以根据需要对其进行才将,使其规模更小。1.将/exp 目录下的压缩文件复制到自己的文件夹 /home /st /81180015 , 在该目录下解压缩 tar 2.进入解压后的目录,执行 make menuconfig,对 busybox 进行配置。配置过程中要针对文件系统的需要进行配置。下面将针对几点注意事项进行分析: a 在Build Option 菜单下,可以选择静态库编译方式,b 在交叉编译器设置,在 cross compiler prefix 中输入/ usr/ local / arm-linux /bin / arm-linux-c 在 Installation Option 菜单下,自定义安装目录,建议使用默认目录 . / _install10 / 24d 在 Init Utilities 中配置初始化指令。其中init 选项必选,否则无法正常进入命令行界面的系统,若不选则会显示“kernel panic: no init”。其他选项如:reboot,poweroff 等都选上。因为在/etc/中用到了。 e在 Login/Password Mangement Utilities 菜单下配置对用户登录/密码管理的配置。其中 getty 必选,因为在inittab 文件中要用到该指令,若不选则在执行 boot7开发板命令,系统启动过程中,会显示 couldt find “sbin/getty”。f 在 Networking Utilities 菜单下配置和网络有关的命令,为了使用网络连接,其中 ping 和 ifconfig必选。g 在 Another Bourne like shell 菜单下指定shell,否则在开发板启动时会出现错误“ Bummer, could not run etc / / rcS no such file or directory ”, “/ bin /sh”no such file or directory”。在实验中,当看到提示的错误之后,我在 choose your default shell下选择了 ash。但重启开发板时仍然出现了上述的错误。于是我开始查看 bin 目录,发现找不到 sh,有的是 ash 可执行程序。经过分析,我将 inittab 文件中的:askfirst:/bin/sh 改成了:askfirst:/bin/ash,并将 rc中的#!/bin/sh 改成#!/bin/ash。重启开发板,错误被解决11 / 24了。h 在 Linux System Utilities 中配置系统指令,为了使用 NFS 文件系统,要选择 mount ;Support mounting NFS file systems。 此外 umount 也应该选上,因为在 inittab 中有:shutdown:/bin/umount -a r。其他的选项要根据开发的需要进行选择。这些在实验记录中有详细的记录。这里就不再诉述。配置好 busybox 之后保存退出。makemake install,就会在安装目录_install 看到 bin,sbin 等目录,和一些指向 busybox 的可执行程序的符号链接。3、构建文件系统创建常用目录,etc,dev,lib,proc。并在各目录下建立必要的文件。具体方法见实验指导书上的操作步骤和实验记录纸上的过程记录。这里只就几个重要问题做说明:etc/inittab 是由系统启动程序 init 读取并解释执行的。Init 进程是系统启动的第一个进程,是其他所有进程的父进程。下面对 inittab 中的字段进行说明:/etc/inittab 文件中每个登记项的结构都是一样的,共分为以冒号“:”分隔的 4 个字段。具体如下:identifier : run_level : action : process12 / 24本实验中无须指定 identifier 和run_level。action 动作关键字。action 用于指定 init 命令或进程对相应进程所实施的动作。本实验中包含的动作有:respawn。sysinit。askfirst。ctrlaltdel:允许init 在用户于控制台键盘上按下 C t r l + A l t + D e l 组合键时,重新启动系统。restart(系统重启的时候要执行的进程)。shutdown。 实验中编写的 inittab 文件的功能:在系统启动的时候执行/etc/rcS,即显示主机名是XScale270,将 proc 文件系统挂载到/proc 目录,然后执行一条打印命令,即打印出/etc/motd 里的启动信息。在进入console 终端之前先问候 shell:press “ENTER” to enter console(具体我记不清楚了,就是这个意思)。init进程启动选择终端 tty5 和 tty6。当重启系统时执行/sbin/init 初始化程序,若用户按下 ctr+alt+del 时,重启系统。当关机时实行解挂和关机。创建 dev 目录,这个目录下建立必要的目录。实验操作的时候将老师提供的文档复制到文档里,将前面的命令符$去掉后,在终端中粘贴一下就执行了所有的命令。这个目录下有很多设备,如终端设备,dsp,声卡,frame buffer 帧缓冲,硬盘,鼠标,键盘,ram,触摸屏等。建立 lib 目录,将交叉编译器链接库中路径下的几个库复制到 lib 目录,并做软链接。这样做的原因是:13 / 24Busybox 本身不带 glibc 和 uclibc,所以实验中要用静态链接的方式来运行应用程序,并且实验中要将这些库安装在/lib 目录下。本实验中安装了三个库文件,,。它们分别是 linux 的动态加载器和 libc 标准的 c 库函数,和数学库。实验中还做了四个软链接,这些软链接使其不受版本的影响,从而具有向后兼容的作用,所有的 linux版本都能使用这些共享库。4、制作 JFFS2 的文件映像在 busybox 的目录下,用制作 JFFS2 文件系统。命令为: o e 0x40000 r _install -p -l说明:-o 选项表示输出的文件系统镜像名为;-e 选项表示所需内存至少为 64K;-r 表文件系统镜像所在的目录。-l 表示制作一个小型的 jffs2 文件系统。5、加载文件系统用实验一中的方法加载内核和文件系统,启动开发板。实验过程中,通过反复调试,修改开发板启动过程中的错误,将必要的配置选项加入后,开发板正常启动,出现了/etc/motd 中要求显示的欢迎界面。进入开发板环境中,编写简单的应用程序来检测文件系统的可行性。在实验中,先建立/mnt 目录,配置 ip 后,将/mnt 目录挂14 / 24载在主机的/exp 共享目录下,然后编写简单的应用程序, 。在主机上交叉编译后,在目标板上 运行成功。五、实验总结花了五六次课的时间做上面三个实验,对嵌入式 linux 开发环境、内核和文件系统有了更加清楚的认识,明白了嵌入式系统的特点,如它不提供 bios 程序,所以基本输入输出由程序员完成;缺乏友好的人机交互界面,开发能力不如通用计算机,存储空间有限。这些特点决定了嵌入式系统的开发 需要在宿主机上开发,通过交叉编译,利用串行口和网口进行开发。试验一中我了解到了嵌入式系统的基本硬件设施,熟悉了几个接口:JTAG 主要用于 bootloader 引导和调试,RS232 串行接口用于 bootloader 初级引导。学会了用minicom 这个串口通信软件建立开发板和宿主机之间的连接。明白了 tftp 协议传输的设置。通过网络文件系统 NFS 实现目录的挂载和文件的共享。实验一是第一次接触嵌入式开发实验,很多东西都很陌生。实验中犯了很多错误,比如说实验过程中总是按照实验指导书的提示做,没有理解目录及操作的作用,以至于在目录挂载的时候,将/mnt 目录挂载到了主机的/opt 目录,结果发现主机上交叉编译后,在目标机上没法正确运行。后来在看书和同学交流的帮助下,明白了 NFS15 / 24是有一个共享目录的,只能将主机的共享目录挂载到目标机上,否则无法实现共享。而共享目录和权限是在/etc/exports 中设定的。通过查看该文件可以知道现有的共享目录,实验室是/exp;也可以通过编辑这个文件来修改共享目录。总之在实验中要明白实验中每一个步骤的目的,搞清楚它们之间的联系,而不能照搬书上的内容。 实验二是内核的配置和编译,在实验过程中,我通过查看内核源码中的各个目录,结合书本知识,明白了内核各个目录的作用,也清楚了内核源码的结构。在内核配置时,我仔细查看了配置选项的功能,虽然有很多看不懂,而且实验之前内核选项已经基本配置好,不需要做太多的变更。实验中我又犯了比较低级的错误,在生成内核镜像后没有把它复制到正确的目录/tftpboot 下,导致内核没法下载到开发板中。这说明我在实验一时没能理解/tftpboot的作用,它是 tftp 协议服务的主目录,文件只有放到这个目录下才能通过 tftp 服务下载。实验三是文件系统的构建和编译。首先要理解busybox 的作用。Busybox 是一个集成的应用程序。文件系统中需要许许多多的程序,这些程序如果独立编译,会显得相当繁琐。利用 busybox 对应用程序进行裁剪,使其生成文件系统需要的应用程序。通俗地说 Busybox 是帮助构建文件系统的。实验开始时,我没有明白 busybox 的作用,16 / 24也不清楚各个配置选项的功能,所有在一开始配置 busybox时,只是简单地改了一下静态编译方式,设置了交叉编译的路径,其它的选项都没做改动。结果在建立好文件系统目录,生成文件系统镜像后加载文件系统并启动时发现文件系统中缺少很多选项和很多程序,系统无法正常启动。后来通过不断的完善,终于可以启动文件系统,并在开发环境下运行简单的程序。实验的整个过程是比较曲折的,感觉自己在一直犯错误,然后纠正错误。通过这次实验,基本上对嵌入式开发环境有了较深刻的认识。实验给我的经验是,以后在实验之前一定要多多查阅资料,帮助自己的理解。这样实验时才不会措手不及。学生课程实验报告书课程: linux 网络操作系统级 系专业 班学号:姓名:指导教师:一、实验项目: 用户与组群管理二、实验日期: 三、实验原理:1.熟悉 Linux 下常用的操作指令。17 / 242.加深对文件,目录,文件系统等概念的理解。3.掌握 Linux 文件系统的目录结构。4.掌握有关 Linux 文件系统操作的常用命令。 5.了解有关文件安全方面的知识。 四、实验仪器: PC 机Redhat 网络操作系统五、实验步骤:进入虚拟机,并在此平台上练习文件管理有关命令.一般在root localhost xxxx$ 提示符下键入有关命令。1.浏览文件系统1运行 pwd 命令,确定你当前的工作目录。图片已关闭显示,点此查看2利用以下命令显示当前工作目录的内容:(理解各字段彻底意义。) 3运行以下命令:ls 图片已关闭显示,点此查看ai4使用 mkdir 命令建立一个子目录 subdir,并用 ls 查看当前目录。图片已关闭显示,点此查看5使用带-d 选项的 ls 命令,你只能看到有关子目录的信息(.表示本身目录)。18 / 24图片已关闭显示,点此查看6使用 cd 命令,将工作目录改到根目录上。 用相对路径将工作目录改到根目录。图片已关闭显示,点此查看 用绝对路径将工作目录改到根目录。图片已关闭显示,点此查看7使用 ls 命令列出根目录的内容,再分别列出各子目录的内容,体会各目录作用及访问权限。图片已关闭显示,点此查看8使用 ls-l 命令列出/dev 的内容。Ls l /dev 列出/dev 目录的内容,文件太多显示多屏,各行第一个字符为 b 的表示块特别文件;各行第一个字符为 c 的表示字符特别文件。9使用不带参数的命令 cd,然后用 pwd 命令确定你当前的工作目录是什麽。图片已关闭显示,点此查看10使用命令 cd ./.,你将工作目录移到什麽地方? 2.查看你的文件1 利用 cd 命令,将工作目录改到你的主目录上。2 将工作目录改到你的子目录 subdir,然19 / 24后运行命令:date file1 将当前日期和时间存放到新建文件 file1 中。Ls l 反馈信息中有新文件 file1。请注意并记下文件长度为:图片已关闭显示,点此查看3 使用 cat 命令查看 file1 文件的内容。图片已关闭显示,点此查看4利用 man 命令显示 date 命令的用法:图片已关闭显示,点此查看5将 date 命令的用法附加到文件 file1 的后面图片已关闭显示,点此查看:图片已关闭显示,点此查看注意 file1 文件长度为 ,较前变长。图片已关闭显示,点此查看6利用 ls -l file1 命令列出文件 file1 的较详细的信息。ls -l file1 注意第二字段的值为“1” 。图片已关闭显示,点此查看7利用 ln file1./fa 命令进行文件链接。然20 / 24后运行 ls -l file1,查看显示的第二段的值发生了什麽变化。图片已关闭显示,点此查看8现在想利用 cat fa 命令显示文件 fa 的内容,应该如何改动工作目录图片已关闭显示,点此查看?9利用 cp file1 fa 命令生成文件 file1 的副本。然后利用 ls -l 命令查看工作目录的内容。图片已关闭显示,点此查看10将文件 fa 删除。再利用 ls -l 命令查看工作目录内容。图片已关闭显示,点此查看11运行 mv file1 file_a 命令,然后用 ls 命令查看这两个文件是否都还在工作目录中?图片已关闭显示,点此查看3.文件存取权限 1存取权限LINUX 系统对所有文件设置了存取权限。存取权限让你确定谁可以对你的个人文件和目录行访问,以及可以进行什麽操作。 把所有用户分为三类:文件主,即文件的属主。组用户,即文件组的成员。 其他用21 / 24户,即能对系统进行访问的所有其他用户。 对一个文件的存取权限分为三种: 读 写 执行一组存取权限以及相应的文件类型统称为文件模式。如:rw-r-r-表示文件主有读和写的权限,组用户和其他用户只有读权限。 2文件存取权限读权限允许指定的用户可以打开文件并阅读其内容。如 cat,more,file 和 cp 命令等。 写权限允许指定的用户可以打开文件并修改其内容。如 vi,mail,cp 等。执行权限允许指定的用户运行一个二进制文件文件或者把一个 she
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 傅雷家书考试题及答案
- 2025年国家特种设备安全管理人员(A证)考试练习题库(含答案)
- 医养结合人才培训班理论考试题(含答案)
- 医疗机构消毒技术规范培训试题及答案
- 2025心肺复苏理论考试试题(含答案)
- 2025年安全知识竞赛题库及答案
- 2024年农村农业《果树生产技术》知识试题与答案
- 北京培训知识课件
- 2024年事业单位招聘“动物检疫员”职责及技能知识考试题库与答案
- 柴胡种植课件
- 特种设备教育培训考试题
- 临床执业助理医师呼吸系统
- 检验科医师(技师)晋升高级职称晋升专题报告病例分析汇编三篇
- 工程师站及电子间管理规定
- 最新山东地图含市县地图矢量分层可编辑地图PPT模板
- 建设生态文明ppt模板课件
- T∕CGMA 033001-2018 压缩空气站能效分级指南
- 浙江鹏友化工有限公司
- 江苏常熟新材料产业园环境风险评估报告
- 《创新方法》课程教学大纲
- REFLEXW使用指南规范.doc
评论
0/150
提交评论