实验八 构建根文件系统
busybox详解制作根文件系统

详解制作根文件系统单击,返回主页,查看更多内容一、FHS(Filesystem Hierarchy Standard)标准介绍当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。
该标准规定了根目录下各个子目录的名称及其存放的内容:制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。
其过程大体包括:•编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录•利用交叉编译工具链,构建/lib目录•手工构建/etc目录•手工构建最简化的/dev目录•创建其它空目录•配置系统自动生成/proc目录•利用udev构建完整的/dev目录•制作根文件系统的jffs2映像文件下面就来详细介绍这个过程。
二、编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录这些目录下存储的主要是常用命令的二进制文件。
如果要自己编写这几百个常用命令的源程序,my god,这简直是一个噩梦!好在我们有嵌入式Linux系统的瑞士军刀——busybox,事情就简单很多。
1、从/下载busybox-1.7.0.tar.bz22、tar xjvf busybox-1.7.0.tar.bz2解包3、修改Makefile文件175 ARCH ?= arm176 CROSS_COMPILE ?= arm-linux-4、make menuconfig配置busyboxbusybox配置主要分两部分。
第一部分是Busybox Settings,主要编译和安装busybox的一些选项。
这里主要需要配置:1)、Build Options -- Build BusyBox as a static binary (no shared libs),表示编译busybox时,是否静态链接C库。
文件系统管理实训报告

一、实训背景随着信息技术的飞速发展,文件系统作为存储和管理数据的核心,其性能、稳定性和安全性越来越受到重视。
为了提高我们对文件系统管理的理解和实践能力,我们进行了文件系统管理实训。
本次实训以Linux系统下的文件系统管理为主要内容,通过实际操作,加深对文件系统结构、命令、权限管理等方面的认识。
二、实训目标1. 掌握Linux文件系统的基本结构;2. 熟悉常用的文件系统管理命令;3. 理解文件权限和属性的概念;4. 学会文件系统备份与恢复;5. 提高文件系统的安全性和性能。
三、实训内容(一)文件系统结构Linux文件系统采用树状结构,以根目录“/”为起点,所有文件和目录都从根目录开始分层排列。
常见的文件系统结构包括:1. 根目录(/):包含系统中的所有目录和文件;2. 换行目录(/bin、/sbin、/usr):存放常用的系统命令和系统服务;3. 用户目录(/home):存放用户个人文件和目录;4. 临时目录(/tmp):存放临时文件和程序;5. 系统目录(/etc、/var、/opt):存放系统配置文件、日志文件和可选软件包。
(二)文件系统管理命令1. ls:列出目录内容;2. pwd:显示当前目录的绝对路径;3. cd:切换目录;4. mkdir:创建目录;5. rmdir:删除空目录;6. touch:创建空文件;7. rm:删除文件或目录;8. cp:复制文件或目录;9. mv:移动或重命名文件或目录;10. chmod:修改文件权限;11. chown:更改文件所有者;12. chgrp:更改文件所属组。
(三)文件权限和属性Linux文件权限分为三组:所有者、所属组和其他用户。
每组权限包括读(r)、写(w)和执行(x)三种。
通过chmod命令可以修改文件权限,例如:- chmod 755 filename:设置所有者有读、写、执行权限,所属组和其他用户有读、执行权限;- chmod u+x filename:给所有者添加执行权限;- chmod g-w filename:取消所属组的写权限。
计算机操作系统实验指导计算机实验环境搭建与使用

内核数设置
如何查看计算机有几个核
三. 利用VMWare虚拟机安装 Linux
Ubuntu Linux地下载
Ubuntu Linux 下载地址: https://ubuntu./download/desktop
版本可自行选择 以Ubuntu Linux 二0为例
编辑虚拟机设置
安装Linux映像文件(ubuntu-xxxx-xxxxxxxx.iso)
实验结果
The End!
user一
常用地磁盘管理命令
df 查看文件系统地磁盘空间占用情况 du 显示目录或文件所占磁盘空间大小 mount 挂装文件系统 umount 解挂文件系统
与用户有关地命令
passwd 修改用户口令 su 切换用户 sudo 允许普通用户使用超级用户权限执行一些命
令
六. Linux下C程序地编写
Makefile文件示例二
obj= main.o hello一.o hello二.o #变量定义
main: $(obj)
gcc –o main $(obj)
hello一.o: hello一.h 隐式规则
#自动推导与
hello二.o: hello二.h
clean:
rm $(obj)
七. 实验二.一 Linux常用命令 使用
实验目地
了解Linux 操作系统地Shell 命令格式,熟练掌握 常用命令与选项地功能
实验内容
练常用地Linux Shell 命令及命令选项,包括文件目 录命令,备份压缩命令,重定向及管道命令等。要求 熟练掌握下列命令地使用。 (一)改变及显示目录命令:cd,pwd,ls (二)文件及目录地创建,复制,删除与移动命令 :touch,cp,mv,rm,mkdir,rmdir (三)显示文件内容命令 :cat,more,less,head,tail (四)文件查找命令:find,whereis,grep (五)文件与目录权限改变命令:chmod (六)备份与压缩命令:tar,gzip,bzip二
操作系统原理实验

操作系统原理实验一、实验目的本实验旨在通过实际操作,加深对操作系统原理的理解,掌握操作系统的基本功能和调度算法。
二、实验环境1. 操作系统:Windows 102. 虚拟机软件:VirtualBox3. 实验工具:C语言编译器(如gcc)、汇编语言编译器(如nasm)、调试器(如gdb)三、实验内容1. 实验一:进程管理在这个实验中,我们将学习如何创建和管理进程。
具体步骤如下:a) 创建一个C语言程序,实现一个简单的计算器功能。
该计算器能够进行基本的加减乘除运算。
b) 使用fork()系统调用创建一个子进程,并在子进程中执行计算器程序。
c) 使用wait()系统调用等待子进程的结束,并获取子进程的退出状态。
2. 实验二:内存管理在这个实验中,我们将学习如何进行内存管理。
具体步骤如下:a) 创建一个C语言程序,模拟内存分配和释放的过程。
该程序能够动态地分配和释放内存块。
b) 使用malloc()函数分配一块内存,并将其用于存储数据。
c) 使用free()函数释放已分配的内存块。
3. 实验三:文件系统在这个实验中,我们将学习如何进行文件系统的管理。
具体步骤如下:a) 创建一个C语言程序,实现一个简单的文件系统。
该文件系统能够进行文件的创建、读取、写入和删除操作。
b) 使用open()系统调用打开一个文件,并进行读取和写入操作。
c) 使用unlink()系统调用删除一个文件。
四、实验步骤1. 安装虚拟机软件VirtualBox,并创建一个虚拟机。
2. 在虚拟机中安装操作系统Windows 10。
3. 在Windows 10中安装C语言编译器、汇编语言编译器和调试器。
4. 根据实验内容,编写相应的C语言程序并保存。
5. 在命令行中使用gcc编译C语言程序,并生成可执行文件。
6. 运行可执行文件,观察程序的执行结果。
7. 根据实验要求,进行相应的操作和测试。
8. 完成实验后,整理实验报告,包括实验目的、实验环境、实验内容、实验步骤和实验结果等。
ramdisk根文件系统制作

制作根文件系统有两种方法1、利用开发板提供的映像文件制作ramdisk2、利用busybox制作根文件系统(制作过程复杂)采用第一种方法制作需要的ramdisk1、拷贝已有的uramdisk.image.gz 到新建的tmp/下,cp uramdisk.image.gz tmp/2、去掉mkimage生成的64 bytes 的文件头,生成新的ramdisk.image.gz$ dd if=uramdisk.image.gz of=ramdisk.image.gz bs=64 skip=13、 gunzip解压ramdisk.image.gz 生成ramdisk.image$ gunzip ramdisk.image.gz4、新建挂载目录“ramdisk”,并将ramdisk.image挂载$ sudo mount -o loop,rwramdisk.imageramdisk5、接下来,只需要将ramdisk目录下的内容全部拷贝到rootfs下即可cp -R ramdisk /* rootfs这样就有了自己的rootfs,省去利用busybox制作的麻烦了有了制作好的rootfs,下面就开始制作映像文件了1、创建镜像文件ramdisk8M.image,并设置大小为8M,文件系统格式为ext2$dd if=/dev/zero of=ramdisk8M.image bs=1024 count=8192$mke2fs -F ramdisk8M.image -L "ramdisk" -b 1024 -m 0$tune2fs ramdisk8M.image -i 0$chmod 777 ramdisk8M.image大小可以按照需要自己调整,但是最好不要超过32M,创建ramdisk目录,将ramdisk8M.image 挂载到该目录下$mkdirramdisk$mount -o loop ramdisk8M.image ramdisk/接下来,只需要将rootfs目录下的内容全部拷贝到ramdisk下即可$cp -R rootfs/* ramdisk注意,这里cp的参数一定是R而非r。
yaffs2根文件系统的制作

Yaffs2文件系统移植到mini2440现在大部分开发板都可以支持yaffs2 文件系统,它是专门针对嵌入式设备,特别是使用nand flash作为存储器的嵌入式设备而创建的一种文件系统,早先的yaffs仅支持小页(512byte/page)的nand flash,使用yaffs2 就可以支持大页的nand flash。
所谓的根文件系统,就是创建各个目录,并且在里面创建各种文件,比如在/bin,/sbin/目录下存放各种可执行的程序,在/etc目录下存放配置文件,在/lib目录下存放库文件,下面就开始文件系统的移植。
一、准备工作1.Yaffs2源代码的获取在bbb:///node/346可以下载到最新的yaffs2 源代码,如果使用git工具,在命令行输入:就可以下载到yaffs2的源代码,到当前目录下。
2.下载Busybox-1.13.3可以从bbb:///downloads/下载Busybox-1.13.3。
3.下载Yaffs2的整理工具可以到友善之臂的网站下载,mkyaffs2image.tgz,其中解压出来有两个可执行的文件,一个是针对小页的,一个是针对NandFlash大页的,其名字为mkyaffs2image-128M,一开始在这里犯了错误,我的NandFlash是128MB的,可以按照网上用的是mkyaffs2image文件,所以老是出来假坏块的提示,仔细一分析,NandFlash不可能一下子出来这么多的坏块,而且我用他们公司提供的根文件系统却没有任何的问题,所以问题处在了整理Yaffs2的工具上面。
因为这两种大小NandFlash的ECC校验是不一样的,也就是spare区的大小是不一样的,造成了ECC校验出错。
4.链接库整理根文件系统时,要使用到链接库,这里直接使用友善之臂根文件系统中的链接库。
从网站下载root_qtopia.tgz。
使用lib目录下的链接库。
5.给内核打上YAffs2补丁然后进入yaffs2源代码目录执行:#cd yaffs2#./patch-ker.sh c /opt/mini2440/linux-2.6.33.3此时进入linux-2.6.32.2/fs目录,可以看到已经多了一个yaffs2目录。
Buildroot根文件系统构建

Buildroot根⽂件系统构建前⾯我们学习了如何使⽤ busybox 来构建根⽂件系统,但是 busybox 构建的根⽂件系统不其全,很多东西需要我们⾃⾏添加,⽐如 lib 库⽂件。
在我们后⾯的驱动开发中很多第三⽅软件也需要我们⾃⼰去移植,这些第三⽅软件有很多⼜依赖其他的库⽂件,导致移植过程⾮常的繁琐。
本章我们来学习⼀下另外⼀种实⽤的根⽂件系统构建⽅法,那就是使⽤ buildroot 来构建根⽂件系统。
1 何为 buildroot ?1.1 buildroot 简介我们讲解了如何使⽤ busybox 构建⽂件系统,busybox 仅仅只是帮我们构建好了⼀些常⽤的命令和⽂件,像 lib 库、/etc ⽬录下的⼀些⽂件都需要我们⾃⼰⼿动创建,⽽且 busybox 构建的根⽂件系统默认没有⽤户名和密码设置。
在后续的实验中,我们还要⾃⼰去移植⼀些第三⽅软件和库,⽐如 alsa、iperf、mplayer 等等。
那么有没有⼀种傻⽠式的⽅法或软件,它不仅包含了busybox 的功能,⽽且⾥⾯还集成了各种软件,需要什么软件就选择什么软件,不需要我们去移植。
答案肯定是有的,buildroot 就是这样⼀种⼯具,buildroot⽐ busybox 更上⼀层楼,buildroot 不仅集成了 busybox,⽽且还集成了各种常见的第三⽅库和软件,需要什么就选择什么,就跟我们去吃⾃助餐⼀样,想吃什么就拿什么。
buildroot 极⼤的⽅便了我们嵌⼊式Linux 开发⼈员构建实⽤的根⽂件系统。
从 busybox 开始⼀步⼀步的构建根⽂件系统适合学习、了解根⽂件系统的组成,但是不适合做产品(主要是⾃⼰构建的话会有很多不完善、没有注意到的细节)。
buildroot 会帮我们处理好各种细节地⽅,是我们的根⽂件系统更加的合理、有效。
因此⼤家在做产品的时候推荐⼤家使⽤ buildroot 来构建⾃⼰的根⽂件系统,当然了,类似buildroot 的软件还有很多,⽐如 yocto。
实验8,存储实验指导书-存储LUN配置

存储实验指导书深圳市讯方通信技术有限公司二零一四年七月版实验8、存储LUN配置实验一、实验目的熟练掌握S2600存储阵列LUN创建和划分的原则及流程可以熟练规划并创建需要LUN二、实验器材存储设备S2600一套,PC客户端一台。
三、实验内容说明通过现场操练,让学生掌握存储的RAID和LUN配置关系。
四、实验步骤(一)实验前准备1、设备条件S2600已经完成硬件安装,上电无异常,ISM初始化配置完成。
2、服务器条件EB服务器已经安装ISM客户端并正常运行,EB服务器的地址1和S2600的管理地址在同一网段,且能够正常通讯;EB服务器的地址2和EC616控制台地址在同一网段,且能够正常连接到S2600的端口通讯。
以上前提都正常,才可以进行以下实验操作。
3、服务器配置条件实验管理系统中完成存储设备初始化。
实验管理系统中完成设备组划分、学生组划分、存储实验环境搭建,并初始化完成,实验状态为“正在进行…”。
EB Storage SERVER 服务端启动成功。
4、客户端条件PC 客户端支持以下操作系统:Microsoft Windows XPMicrosoft Windows 2003资源要求:内存为1GB,硬盘空间大于40GB。
PC客户端到服务器网络通信正常。
PC客户端到存储业务口网络通信正常。
学生机完成EB Storage Client安装。
(二)创建LUN知识根据业务的需要,可以在RAID组中创建多个LUN。
将RAID组的存储空间划分为多个逻辑单元后,将存储资源更合理的分配给应用服务器使用。
前提条件系统中已经创建RAID组。
背景信息与LUN相关的概念:•分条深度:指在使用分条数据映射的硬盘阵列中,条带内的块数量。
也指在硬盘阵列的单个成员盘区中,连续编址的虚拟硬盘块映射到连续编址的块的数量。
在不同的应用场景下应选择适当的分条深度大小。
当存储系统应用于存储顺序数据较多的情况下,如存储媒体数据,建议设置较大的分条深度。
《Linux实验教程》教学课件 第7章 文件系统的设计与实现

Ext2文件系统(4)
块组描述符 – 每个块组都有一个块组描述符ext2_group_desc,记录该
块组的以下信息: – 数据块位示图。表示数据块位示图占用的块号,此位示
图反映块组中数据块的分配情况,在分配或释放数据块 时需使用数据块位示图。 – inode位示图。表示inode位示图占用的块号,此位示图反 映块组中inode的分配情况,在创建或删除文件时需使用 inode位示图。 – inode表。块组中inode占用的数据块数,系统中的每个文 件对应一个inode,每个inode都由一个数据结构来描述。 – 空闲块数、空闲inode数和已用数目。 – 一个文件系统中的所有块组描述符结构组成一个块组描 述结构表,每个块组在其超级块之后都包含一个块组描 述结构表的副本,实际上,Ext2文件系统仅使用块组1中 的块组描述结构表。
– 文件和文件系统 – 文件分类和属性 – 文件控制块和文件目录
UNIX类文件系统和非UNIX类文件系统
• UNIX类文件使用四种和文件系统相关的抽象概念: 文件、目录项、索引节点和安装点。
• 文件(file)—文件是由文件名标识的有序字节串,典 型的配套文件操作有读、写、创建和删除等。
• 目录项(dentry)—是文件路径名中的一部分。 • 索引节点(inode)—是存放文件控制信息的数据结构,
又分磁盘块中的inode和主存中活动的inode。 • 安装点(mount point)—文件系统被安装在一个特定
的安装点上,所有的已安装文件系统都作为根文件 系统树中的叶子出现在系统中。
主要内容
• 背景知识 – 文件系统基本概念 – 文件管理的数据结构 – Ext2文件系统
• 实验内容 – 模拟实现一个Linux文件系统
操作系统文件管理实验

操作系统实验三:文件管理一.实验目的1.加深对文件,目录,文件系统等概念的理解。
2.掌握UNIX文件系统的目录结构。
3.掌握有关UNIX文件系统操作的常用命令。
4.了解有关文件安全方面的知识。
二.实验内容1.使用pwd,cd,ls等命令浏览文件系统。
2.使用cat,cp,mv,head,tail,rm等命令查看你的文件。
3.使用ln命令进行文件的硬连接和符号连接。
4.使用find,grep命令进行文件查找和模式匹配。
5.使用chmod命令修改文件的权限。
三.实验步骤启动LINUX系统,首先以超级用户ROOT身份登录注册后(占用第一用户平台),然后以普通用户Mengqc(或其他用户名)身份登录注册后,在第二用户平台(<alt>+F2)练习文件管理有关命令.一般在[mengqc @ localhost mengqc]$提示符下键入有关命令。
1.浏览文件系统〈1〉运行pwd命令,确定你当前的工作目录(为/ home/mengqc)。
〈2〉利用以下命令显示当前工作目录的内容:(理解各字段意义。
)ls –l〈3〉运行以下命令:(反馈信息中.代表本身目录,..代表其父目录;选项a可以显示隐藏文件;选项i可以显示文件的I节点号)ls –ai〈4〉使用mkdir命令建立一个子目录subdir,并用ls查看当前目录。
下附本实验文件目录结构。
Mkdir subdir/根目录Ls –lBin dev home rootMengqc mlwjsubdirfa(file1)〈5〉使用带-d选项的ls命令,你只能看到有关子目录的信息(.表示本身目录)。
Ls -d〈6〉使用cd命令,将工作目录改到根目录(/)上。
①用相对路径将工作目录改到根目录。
Pwd 显示当前目录为 /home/mengqcCd .. 相对路径,返回上一级。
Pwd 反馈显示当前目录为 /homeCd .. 相对路径,再返回上一级。
Pwd 反馈显示当前目录为 /Cd /home/mengqc 恢复本身目录(也可以cd↙ ).Pwd 反馈显示当前目录为 /home/mengqc②用绝对路径将工作目录改到根目录。
实验8 文件管理

实验8 文件管理(2学时)
一、实验目的
理解文件系统的主要概念及文件系统内部功能和实现过程。
二、实验内容
采用二级文件目录结构,编写程序实现文件系统的文件存储空间的管理、文件的物理结构、目录结构管理和文件操作。
三、实验要求
1、设计一个有m个用户的文件系统,每个用户最多可保存一个文件。
2、规定用户在一次运行中只能打开K个文件。
3、系统能检查键入命令的正确性,出错时应能显示出错原因。
4、对文件应能设置保护措施,如只能执行、允许读、允许写等。
5、对文件的操作设计提供一套文件操作:
CREATE建立文件;
DELETE删除文件;
OPEN打开文件;
CLOSE关闭文件;
READ读文件;
WRITE写文件。
6、二级目录结构如下图所示。
用户名用户文件目录地址
主文件目录MFD
文件名状态(打开/建立)指针
用户文件目录UFD。
操作系统实验

操作系统实验报告(一)Linux基本操作与编程(验证性 2学时)1、实验目(de):1)熟悉Linux操作系统(de)环境和使用.2)了解LINUX系统(de)安装过程.(注:表示可选择)3)掌握Linux环境下(de)命令操作.2、实验内容:(1)完成LINUX系统(de)登录,启动终端.进行下列操作并记录结果(要求:结果以屏幕截图表示).1)运行pwd命令,确定你当前(de)工作目录.2)利用以下命令显示当前工作目录(de)内容: ls –l3)运行以下命令: ls –al4)使用mkdir命令建立一个子目录subdir.5)使用cd命令,将工作目录改到根目录(/)上.6)使用ls-l命令列出/dev(de)内容.7)使用不带参数(de)命令cd改变目录,然后用pwd命令确定你当前(de)工作目录是哪里8)使用命令cd ../..,你将工作目录移到什么地方(2)在LINUX下查看你(de)文件.1)利用cd命令,将工作目录改到你(de)主目录上.2)将工作目录改到你(de)子目录subdir,然后运行命令: date > file1 将当前日期和时间存放到新建文件file1中.3)使用cat命令查看file1文件(de)内容.4)利用man命令显示date命令(de)用法: man date5)将date命令(de)用法附加到文件file1(de)后面:man date >> file16)利用cat命令显示文件file1(de)内容.7)利用ls -l file1命令列出文件file1(de)较详细(de)信息.运行ls -l/bin 命令显示目录(de)内容.8)利用ls -l/bin|more命令行分屏显示/bin目录(de)内容.9)利用cp file1 fa命令生成文件file1(de)副本.然后利用ls -l命令查看工作目录(de)内容.10)用cd命令返回你(de)主目录,输入命令ls –l后,解释屏幕显示(de)第一列内容(de)含义.(3)编写能输出“Hello world”问候语(de)C程序,并在终端中编译、执行.要求记录所使用(de)命令及结果.操作步骤:1)在文本编辑器中,编写C程序如下:include ""main(){ printf("hello"); }2) 在终端中,用gcc命令进行编译,生成可执行文件a.gcc –o a3) 在终端中执行a (de)命令如下:./a(4)编写一个程序:显示信息“Time for Play”,并能在后台运行一段时间(自定义)后,弹出信息提醒用户.要求记录所使用(de)命令及结果.(提示:使用sleep(s)函数)3、实验结果分析:(对上述实验内容中(de)各题结果,进行分析讨论.并回答下列问题)(1)进程包括哪些特征间断性, 失去封闭性, 不可再现性, 动态性, 并发性, 独立性(2)在Linux中,如何设置前、后台命令和程序(de)执行命令后直接加 & ,这个命令就在后台执行;正在运行(de)命令,使用Ctrl+z ,就挂起; jobs命令,可以现实后台,包括挂起(de)命令;使用 bg %作业号就可以把挂起(de)命令在后台执行;使用 fg %作业号就可以把后台命令调到前台(3)你所使用(de)Linux系统(de)内核版本是多少用什么命令查看内核版本目前你所了解(de)各发行版本(de)情况如何Linux version (gcc version (Red Hat (GCC) ) 1 SMP Tue Jan 2911:48:01 EST 2013(4)你对Linux系统有什么认识linux是一款开放性(de)操作系统,也可以说成是开放(de)源代码系统,这些代码可以完全自由(de)修改可以再任何(de)计算机上去运行它,也就是“可移植性”,其次大家都知道,linux是由UNIX(de)概念所开发出来(de),所以它也继承了UNIX(de)稳定和效率(de)特点4、总结:你对本次实验有什么体会或看法.操作系统实验报告(二)文件访问权限设置与输入输出重定向(2学时)一、实验目(de)1、掌握linux(de)文件访问权限设置.2、熟悉输入输出重定向和管道操作.二、实验内容1、启动进入红帽linux系统2、设置文件权限:在用户主目录下创建目录test,进入test目录,用vi 创建文件file1,并输入任意(de)文字内容.用ls -l显示文件信息,注意文件(de)权限和所属用户和组.对文件file1设置权限,使其他用户可以对此文件进行写操作:chmod o+w file1.用ls -l查看设置结果.取消同组用户对此文件(de)读取权限:chmod g-r file1.查看设置结果.用数字形式来为文件file1设置权限,所有者可读、可写、可执行;其他用户和所属组用户只有读和执行(de)权限:chmod 755 file1.设置完成后查看设置结果.3、输入、输出重定向和管道(1) 输出重定向用ls命令显示当前目录中(de)文件列表:ls –l.使用输出重定向,把ls命令在终端上显示(de)当前目录中(de)文件列表重定向到文件list中:ls –l > list.查看文件list中(de)内容,注意在列表中会多出一个文件list,其长度为0. 这说明shell是首先创建了一个空文件,然后再运行ls命令:cat list.再次使用输出重定向,把ls命令在终端上显示(de)当前目录中(de)文件列表重定向到文件list中.这次使用追加符号>>进行重定向:ls –l >> list.查看文件list(de)内容,可以看到用>>进行重定向是把新(de)输出内容附加在文件(de)末尾,注意其中两行list文件(de)信息中文件大小(de)区别:cat list.重复命令ls –l > list.再次查看文件list中(de)内容,和前两次(de)结果相比较,注意list文件大小和创建时间(de)区别.(2) 管道who |grep root命令(de)结果是命令ls –l |wc –l结果是4、退出linux系统操作步骤:在主菜单上选择“注销” ->关闭计算机.三、实验结果与讨论(根据实验结果回答下列问题)1. 文件(de)权限如下:-rw-r—r-- 1 root root 19274 Jul 14 11:00回答:-rw-r—r-- (de)含义是什么答:是LINUX/FTP(de)简易权限表示法:对应于本用户-所在组-其他人(de)权限,每一个用执行(x)-读取(r)-写入(w)如本题若是说自己可以读取写入不可以执行,所在组和其他人只能读取.2、文件(de)所有者添加执行权限(de)命令是答:chmod u+x 、赋予所有用户读和写文件权限(de)命令是四、答:chmod a+w,a+r 个人体会(你对本次实验有什么体会或看法)操作系统实验报告(三)文件和目录管理一、实验目(de)1) 掌握在Linux系统下(de)文件和文件系统(de)概念及命令;2) 掌握Linux系统下(de)目录操作.二、实验内容1. 进入linux终端后,用命令(de)操作结果回答下列问题:1)vi(de)三种工作模式是其中不能进行直接转换(de)是什么模式到什么模式命令模式、文本输入模式、末行模式命令模式不能直接到末行模式2)在vi中退出时,保存并退出(de)操作步骤是Ese:wq3)用vi 创建myfile1文件,并在其中输入任意文字一行,创建myfile2文件,任意输入文字3行.请问执行命令:cat <myfile1 >myfile2 后,myfile2中还有几行内容该命令(de)作用是用命令操作验证你(de)回答.myfile2中还有1行内容该命令(de)作用是替换myfile(de)内容4)请用至少两种不同(de)命令创建一个文本文件(),在其中写入“我是2014级学生,我正在使用Linux系统.”,记录命令及执行结果.1、Vi创建2、5)用___pwd________命令可查看所创建文件(de)绝对路径,写出它(de)绝对路径__/root_________;用___ls -l________命令查看该文件(de)类型及访问权限,其访问权限(数字和字母)分别是多少__-rw- r- - r- - 6 4 4______________.6)若将该文件(de)访问权限修改为:所有者有读写权限;其他用户只读;同组用户可读写,请写出命令,并记录结果.7)查找my开头(de)所有文件,可___find my_________命令,写出命令并记录结果8)在/home下创建子目录user,并在其中创建2个文件,名为file1和file2,file1(de)内容是/root目录(de)详细信息;file2(de)内容任意,最后将这两个文件合并为file3文件,请先写出命令序列,并在终端中验证,记录结果.2. 文件及目录操作,写出操作所使用(de)命令,并记录结果.在终端中完成下列命令操作,并记录结果在root用户主目录下创建一个mydir子目录和一个myfile文件,再在mydir下建立d1和d2两个子目录.查看mydir和myfile(de)默认权限查看当前myfile和mydir(de)权限值是多少将myfile文件分别复制到root 和dd1(de)主目录中将root主目录中(de)myfile改为yourfile通过从键盘产生一个新文件并输入I am a student查找文件是否包含student字符串三、实验结果与分析,回答下列问题:1、能够创建文件(de)命令有哪些vi 和cat>name2、能够查看当前目录(de)绝对路径(de)命令是pwd3、Linux中按用户属性将用户分成哪些类型根据文件(de)访问权限,用户又被分成哪些类型能够查看文件访问权限(de)命令是用户同组其他可读可写可执行 cat f1四、小结(本次实验(de)体会或小结)操作系统实验报告(四)作业调度算法模拟(验证性2学时)1、实验目(de):1)掌握作业调度(de)主要功能及算法.2)通过模拟作业调度算法(de)设计加深对作业管理基本原理(de)理解.3)熟悉Linux环境下应用程序(de)编程方法.2、实验内容:(1)作业调度算法(FCFS)编程模拟:编制一段程序,对所输入(de)若干作业,输入、输出数据样例如下表所示.按FCFS算法模拟调度,观察、记录并分析调度(de)输出结果情况.输入输出样例1:FCFS算法include <>include <>define SIZE 5struct Job_type{char no[2]; o,&job[i].tb,&job[i].tr);printf("输入作业顺序:\n");for(i=0;i<SIZE;i++)printf("\t%s\t%d\t%d\n",job[i].no,job[i].tb,job[i].tr);}void fcfs(){ int i,j,t=0,tw=0,tt=0;for(i=0;i<SIZE-1;i++)for(j=i+1;j<SIZE;j++)if(job[i].tb>job[j].tb){x=job[i];job[i]=job[j];job[j]=x;}printf("FCFS调度结果:\n");printf("开始时间作业号到达时间运行时间完成时间等待时间周转时间\n");for(i=0;i<SIZE;i++){printf(" %d",t);t=t+job[i].tr;tw=t-job[i].tb-job[i].tr; b; o,job[i].tb,job[i].tr,t,tw,tt);}}void main(){load();fcfs();}(2)作业调度算法(SJF)编程模拟:编程实现由短作业优先算法,分别用下面两组输入、输出数据样例进行模拟,观察分析运行结果.输入输出样例2:SJF算法输入输出A 0 4B 0 3C 0 5D 0 2E 0 1A 0 6 10 10B 0 3 6 6C 0 10 15 15D 0 1 3 3E 0 0 1 1include <>include <>define SIZE 5struct Job_type{char no[2]; o,&job[i].tb,&job[i].tr);printf("输入作业顺序:\n");for(i=0;i<SIZE;i++)printf("\t%s\t%d\t%d\n",job[i].no,job[i].tb,job[i].tr);}void sjf()n=i; pl[i].pfn=ERR;}for(i=1;i<total;i++){ pfc[i-1].next=&pfc[i];pfc[i-1].pfn=i-1;}pfc[total-1].next=NULL;pfc[total-1].pfn=total-1;freepf_head=&pfc[0];}void FIFO(int total){ int i,j;pfc_type p,t;initialize(total);busypf_head=busypf_tail=NULL;for(i=0;i<page_len;i++){if(pl[page[i]].pfn==ERR){ diseffect+=1;if(freepf_head==NULL){p=busypf_head->next;pl[busypf_head->pn].pfn=ERR; freepf_head=busypf_head;freepf_head->next=NULL;busypf_head=p;}p=freepf_head->next;freepf_head->next=NULL;freepf_head->pn=page[i];pl[page[i]].pfn=freepf_head->pfn;if(busypf_tail==NULL)busypf_head=busypf_tail=freepf_head; else{ busypf_tail->next=freepf_head;busypf_tail=freepf_head;}freepf_head=p;}}printf("FIFO:%d",diseffect);}main(){ int i; int k;printf(“请输入页(de)引用序列:\n”); for(k=0;k<page_len;k++)scanf("%d",&page[k]);for(i=4;i<=7;i++){printf("%2d page frames ",i);FIFO(i);}参考程序LRU算法,略三、实验结果分析:(对上述实验各题所使用(de)原始数据、调试数据与状态(包括出错)及最终结果进行记录并分析.)随着块数(de)增加,缺页数目也减少,4个实验中3个实验(de)块数增加到了5以后,即使块数再增加,缺页数目也是保持不变.只有实验4,块数增加到7以后,缺页数目又再次减少了四、总结:你对本次实验有什么体会或看法.。
文件实验报告

昆明理工大学信息工程与自动化学院学生实验报告( 2011 —2012 学年第二学期)一、实验目的用c或c++语言编写和调试一个简单的文件系统,模拟文件管理的基本功能。
从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
二、实验原理及基本技术路线图(方框原理图)用c模拟实现文件系统的管理;要求设计一个多级目录结构的文件系统,能正确描述文件控制块,采用合理的外存分配方式,能实现基本的目录及文件的操作,包括创建、删除、重命名、复制、移动等功能,并对文件有一定的存取权限控制。
请加上程序功能结构图、流程图、数据结构定义、主要变量的说明、函数的说明等流程图: 主要数据结构界面采用vc6 mfc环境开发#define maxfile 20 //每个用户最多保存20个文件 #define maxuser 10 //假想文件系统最多支持的人数 #define blocksize 32 //虚拟磁盘中物理块为每块32字节#define disksize blocksize*1000 //虚拟磁盘容量为1000*32=32k struct ufd //说明文件项的结构数组 { 节};struct mfd { };struct headblock { };struct block //虚拟磁盘的物理块数据结构 { byte pstack; //堆栈指针short pblock[10]; //块号 pblock[10]是下一个盘块号逻辑地址 char username[10];//主目录用户名 bool isexist; //该用户否存在 ufd ufd[maxfile]; //用户文件数组 ushort nitem;//ufd个数 char filename[15]; char time[16]; //文件建立或修改时间如2003/5/6 12:00 bool isexist;//文件是否存在,删除时标为0bool isshared; //共享标记,共享文件可被其它用户所访问 bool attrread;//文件是否可读 bool attrwrite; //文件是否可写 bool attrexecute; //文件是否可执行htreeitem treenode; //用于树控件显示的结点句柄 ushort filelen; //文件占用字节数 ushort blocknum; //文件占用的物理块数ushort filelink[100];//文件物理块地址数组,每块32字节,限定一个文件最大100*32=3200字union{ };struct fat { };//空闲块成组链接法bool openlist[maxuser][maxfile]; //描述文件是否打开的布尔型数组 fat filefat;//描述文件记录项的fat结构cfile fatio; //负责和vdisk.dat打交道的文件句柄 cstringcurrentuser; //当前登录的用户名int currentid; //前前登录的用户标识号block superblock; //超级块,指示第一个空闲块逻辑号 ushort maxopen;//该用户同时可打开的最大文件数 ushort usernum; //最户数mfd mfd[maxuser]; //最多可支持10个用户 byte block[32]; //一块为32字节 headblock headinfo; };说明:本实验采用模拟文件结构的方法,把记录用户帐号,用户文件和磁盘块的信息用当前目录下的vdisk.dat来记录,可以把vdisk.dat看成是一个虚拟的磁盘,其头部是fat结构,用来记录各个用户和文件信息,紧接着是空闲块成组链接法的数据结构,每块32字节,每组10块,共1000块,也就是说,用户文件数据的总容量是32*1000字节,如果程序当前目录下找不到用于做实验用的vdisk.dat,在登录时程序会提示是否“格式化虚拟磁盘”也就是新建一个vdisk.dat文件,接着,程序会显示“用户管理”的窗口,此时应新建几个帐号用于登录做实验。
根文件系统移植

实验五根文件系统移植实验目的:通过本次实验,使大家学会根文件系统移植的具体步骤,并对根文件系统有更近一步的感官认识。
让同学理解由于根文件系统是内核启动时挂在的第一个文件系统,那么根文件系统就要包括Linux启动时所必须的目录和关键性的文件,任何包括这些Linux 系统启动所必须的文件都可以成为根文件系统。
实验硬件条件:1、实验PC机一台,TINY6410开发板一台2、电源线,串口线,数据线。
实验软件条件:1、VMware Workstation,2、Ubuntu10.043、mktools-20110720.tar.gz4、busybox-1.13.3-mini2440.tgz,5、SecureCRT以及dnw烧写工具实验步骤:一、实验步骤1.进入rootfs目录,查看压缩文件,具体操作指令如下:2.发现有两个压缩文件夹,分别进行解压:3.tar xvzf busybox-1.13.3-mini2440.tgz,4.tar xvzf mktools-20110720.tar.gz,解压完成后,5.查看文件夹#ls二、实验步骤1.修改架构,编译器#cd busybox-1.13.3/2.进入后查看#ls3.#gedit Makefile4.修改 164行 CROSS_COMPILE ?=arm-linux-5.修改190行 ARCH ?= arm6.保存后,退出!三、实验步骤1.修改配置 #make menuconfig2.若出现如下提示3.需调整到最大化。
4.把Busybox Settings-----→>Build Option------→>Build BusyBox as astatic binary (no shared libs) 选择上,其他的默认即可。
然后一直退出,保存即可5.接着执行 make接着执行 make install6.最终生成的文件在_install 中#cd _install#ls存在这四个文件,即编译成功。
城院操作系统 实验报告_实验八

浙江大学城市学院实验报告课程名称操作系统原理实验实验项目名称实验八进程通信——管道学生姓名专业班级学号实验成绩指导老师(签名)日期注意:●务请保存好各自的源代码,已备后用。
●请上传到BB平台。
一. 实验目的和要求1.了解Linux系统的进程间通信机构(IPC);2.理解Linux关于管道的概念;3.掌握Linux支持管道的系统调用和管道的使用;4.巩固进程同步概念。
二、实验内容用系统调用pipe( )创建管道,实现父子进程间的通信。
三、实验步骤1、并发进程的无管道通信1)编译运行给出的pipe1.c,观察运行结果。
执行前:执行:执行后:2)思考:观察程序运行结果,比较新旧文件的内容是否有差异,并分析原因。
有。
程序将f1中的内容按字符逐个读出,并逐个写入到了f2中。
2、多进程的管道通信,编译并运行给出的代码pipe3.c,观察并理解多进程通过管道通信。
3、编写程序:(来自第三章习题)假定系统有三个并发进程read,move和print共享缓冲器B1和B2。
进程read负责从输入设备上读信息,每读出一个记录后把它存放到缓冲器B1中。
进程move从缓冲器B1中取出一个记录,加工后存入缓冲器B2。
进程print将B2中的记录取出打印输出。
缓冲器B1和B2每次只能存放一个记录。
要求三个进程协调完成任务,使打印出来的与读入的记录的个数,次序完全一样。
试创建三个进程,用pipe( )打开两个管道,如错误!未找到引用源。
所示,实现三个进程之间的同步。
程序源码:#include <unistd.h>#include <signal.h>#include <stdio.h>#include <semaphore.h>#include <fcntl.h>int pid1,pid2;/*sem_t *S1;sem_t *S2;sem_t *S3;sem_t *S4;*///sem_t S1;//sem_t S2;//sem_t S3;//sem_t S4;int valp;main( ){/* S1=sem_open("A",O_CREAT,0644,1);S2=sem_open("B",O_CREA T,0644,0);S3=sem_open("C",O_CREA T,0644,0);S4=sem_open("D",O_CREAT,0644,1);*/// sem_init(&S1,0,1);// sem_init(&S2,0,0);// sem_init(&S3,0,0);// sem_init(&S4,0,1);int fd1[2];int fd2[2];char pipe1[100],pipe2[100],pipe3[100];pipe(fd1); /*创建一个管道*/pipe(fd2);while ((pid1=fork( )) == -1);if(pid1 == 0){while ((pid2=fork( )) == -1);if(pid2==0){while(1){// S1=sem_open("A",O_EXCL);// sem_wait(S1);lockf(fd1[1],1,0);/*把输出串放入数组outpipe中*/printf("process1 is sending message to pipe1\n");sprintf(pipe1,"%d",rand());write(fd1[1],pipe1,50); /*向管道写长为50字节的串*/lockf(fd1[1],0,0);// printf("1111111111\n");// S2=sem_open("B",O_EXCL);// sem_post(S2);// printf("22222222222\n");}}else{while(1){//sem_open(const char *name,int oflag,mode_t mode,unsigned int value);// printf("33333333333\n");// S2=sem_open("B",O_EXCL);// sem_wait(S2);// printf("44444444444\n");// S4=sem_open("D",O_EXCL);// sem_wait(S4);printf("process2 is reading message from pipe1\n");read(fd1[0],pipe2,50);printf("process2 had received the message:%s\n",pipe2);lockf(fd2[1],1,0);printf("process2 is sending message to pipe2\n");write(fd2[1],pipe2,50);lockf(fd2[1],0,0);// S1=sem_open("A",O_EXCL);// sem_post(S1);// S3=sem_open("C",O_EXCL);// sem_post(S3);}}}else{while(1){// S3=sem_open("C",O_EXCL);// sem_wait(S3);printf("process3 is reading message from pipe2\n");read(fd2[0],pipe3,50);printf("process3 had received the message:%s\n",pipe3);// S4=sem_open("D",O_EXCL);// sem_post(S4);}}}程序运行结果:程序分析:程序实现了read,move和print的模拟。
Linux内核移植与根文件系统构建

Linux内核移植
10、SCSI device support
如果有SCSI 设备(SCSI 控制卡,硬盘或光驱等)则选上这项。目前SCSI 设备类型已经比较多,要具体区分它们你得先了解他们所使用的控制 芯片类型。2.6.X 内核中对各类型SCSI设备已经有更具体详细的支持。 <*> scsi support; <*>scsi disk support;
Linux内核移植
5、Networking option
网络选项,它主要是关于一些网络协议的选项。Linux 功能也就是在于 对网络功能的灵活支持。这部分内容相当多,根据不同情况,一般我 们把以下几项选上。 5.1、 packet socket 包协议支持,有些应用程序使用Packet 协议直接同网络设备通讯, 而不通过内核中的其它中介协议。同时它可以让你在TCP 不能用时找 到一个通讯方法。 5.2、 unix domain socket 对基本UNIX socket 的支持 5.3、 TCP/IP networking 对TCP/IP 协议栈的支持,当然要。如果你的内核很在意大小,而且 没有什么网络要就,也不使用类似X Window 之类基于Unix Socket 的应用那你可以不选,可节省大约144K 空间。
二、内核与根文件系统实验
• • • • 安装完成后依次执行以下命令: [root# root] Make dep [root# root] Make [root# root] Make PREFIX=./root install
由于根文件系统是内核启动时挂载的第一个文件系统那么根文件系统就要包括linux启动时所必须的目录和关键性的文件例如linux启动时都需要有init目录下的相关文件在linux挂载分区时linux一定会找etcfstab这个挂载文件等根文件系统中还包括了许多的应用程序bin目录等任何包括这些linux系统启动所必须的文件都可以成为根文件系统
FL2440根文件系统制作

根文件系统制作FL2440在移植完linux内核后,需要移植根文件系统才能正常的启动开发板上面的Linux系统。
下面介绍一下如何制作根文件系统。
首先要明确几个问题,首先,为什么要制作根文件系统?根文件系统是什么?文件系统又是什么?如何制作根文件系统?这里介绍的是制作方法,所以下面只回答最后一个问题。
至于其他问题,网上的资料以及相关的书籍上都有很详细的介绍,并且不是一句两句就能回答出来的,这里不多罗嗦。
开发板:FL2440SDRAM:64M NAND FLASH:256M环境:虚拟机vmware7.1.2.14247绿色版(网上到处是)、红帽企业版5交叉编译链:arm-linux-gcc-4.3.2(这里选择这个,低版本的比如3.4.1的等,在编译的过程中可能会提示很多错误)使用的工具:busybox-1.19.0.tar.bz2这里先改正一下错误,上次的linux-2.6.28.7内核移植到FL2440开发板时的触屏驱动有问题,需要改正几个错误,否则校正 3.5寸的屏幕时可能会出现错误,FL2440光盘中的linux-2.6.28的触屏驱动也存在此问题。
触屏校正有问题,校正不过去,需要修改源码中的触屏驱动才能解决。
文件:drivers/input/touchscreen/s3c2410_ts.cstatic irqreturn_t stylus_updown(int irq, void *dev_id)//172行函数中的data0 = readl(base_addr+S3C2410_ADCDA T0);//178行data1 = readl(base_addr+S3C2410_ADCDA T1);//179行修改为:data1 = readl(base_addr+S3C2410_ADCDA T0);//lysysjwdata0 = readl(base_addr+S3C2410_ADCDA T1);//lysysjwstatic irqreturn_t stylus_action(int irq, void *dev_id)//194行函数中的data1 = readl(base_addr+S3C2410_ADCDA T0);//199行data0 = readl(base_addr+S3C2410_ADCDA T1);//200行修改为data1 = readl(base_addr+S3C2410_ADCDA T0);//lysysjwdata0 = readl(base_addr+S3C2410_ADCDA T1);//lysysjw下面开始介绍根文件系统制作过程。
使用Buildroot制作根文件系统

使用Buildroot制作根文件系统Buildroot是一个用于构建嵌入式Linux根文件系统的工具,它提供了简单易用的配置方式和快速构建系统,可以帮助用户快速构建出自己的根文件系统。
Buildroot支持许多不同的架构和硬件平台,并集成了许多开源软件包,可以根据用户的需求来进行定制。
在本文中,我们将介绍使用Buildroot制作根文件系统的步骤和注意事项。
一、安装Buildroot在开始使用Buildroot制作根文件系统之前,需要先安装Buildroot。
可以在官方网站上下载最新版本的Buildroot,然后解压缩到本地目录。
在解压缩之后,进入到Buildroot的目录,可以看到有一个名为Makefile的文件,这是Buildroot的主要配置文件。
二、配置BuildrootConfigure Buildroot的过程就是创建一个默认的配置文件,通过这个默认配置文件生成根文件系统。
执行以下命令:```make menuconfig```这个命令将打开一个配置菜单,其中包括了一些基本的选项和一些高级选项。
基本选项包括选择所需的架构、选择和配置内核和交叉编译工具链等。
此外,还可以选择要安装的软件包、文件系统类型、文件系统大小等选项。
三、编译Buildroot完成配置后,就可以开始编译Buildroot。
执行以下命令:```make```这个命令将依照之前的配置文件,将所需的软件包下载、交叉编译、配置、安装,然后将所有安装的文件打包成 rootfs.tar 文件。
四、安装根文件系统在编译成功之后,就可以将根文件系统安装到目标平台上。
在目标平台上,先将 rootfs.tar 文件解压缩,然后将解压缩后的文件拷贝到目标文件系统的根目录下。
这里需要注意的是,需要将交叉编译的库和工具链一并拷贝到目标平台上。
五、启动目标平台在将根文件系统安装到目标平台之后,就可以启动目标平台并开始使用它了。
如果一切都配置正确的话,应该可以看到一个基本的 Linux 终端界面。
操作系统实验---文件系统

实验报告实验题目:文件系统姓名:学号:课程名称:操作系统所在学院:信息科学与工程学院专业班级:计算机任课教师:实验项目名称文件系统一、实验目的与要求:1、通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及其内部实现。
2、熟悉文件管理系统的设计方法,加深对所学各种文件操作的了解及其操作方法的特点。
3、通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。
4、通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。
二、实验设备及软件:一台PC(Linux系统)三、实验方法(原理、流程图)试验方法(1)首先应当确定文件系统的数据结构:主目录、子目录以及活动文件等。
主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。
(2)用户创建文件,可以编号存储于磁盘上。
如file0,file1,file2…并以编号作为物理地址,在目录中登记。
文件系统功能流程图图1.文件系统总体命令分析图 2.登录流程图图 3. ialloc流程图图4.balloc流程图图5.密码修改流程图图6.初始化磁盘图 7.显示所有子目录 dir/ls 操作流程图图8.创建文件 creatfile 、创建目录 mkdir 流程图图9.改变当前路径 cd 操作流程图实验原理1.文件操作◆mkdir 创建目录文件模块,输入 mkdir 命令,回车,输入文件名,回车,即会在当前目录文件下创建一个名为刚刚输入的文件名的目录文件。
在该创建过程中首先要判断该目录中有没有同名的文件,如果有的话就创建失败,还要判断在该目录下有没有创建文件的权限,有权限才可以创建。
具体流程图查看第二节,系统流程图设计部分。
◆del 删除文件模块,输入 del命令,回车,输入文件名,回车,即会在当前目录文件下删除一个名为刚刚输入的文件名的数据文件。
在该删除过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了,还要判断在该目录下有没有删除文件的权限,有权限才可以删除。
使用uboot去挂载根文件系统

1、根文件系统的制作1)创建根文件系统主目录:mkdir rootfs2)创建根文件系统的子目录cd rootfsmkdir bin dev etc lib proc sbin sys usr mnt tmp var 3)然后创建usr下的子目录mkdir usr/bin usr/lib usr/sbin lib/modules4)创建设备文件内核在引导时设备节点console,null必须存在cd dev/注:该目录为/mini2440/nfsroot/rootfs 下的dev目录mknod –m 666 console c 5 1mknod -m 666 null c 1 3c:表明类型为字符设备第一个数字(5,1):主设备号第二个数字(1,3):次设备号这两个设备文件设备号是固定的5)安装etcetc目录主要是一些启动时的脚本文件一般不需要修改tar etc.tar.gz –C /xxx/rootfs这个命令可能不给用改为:tar xvzf etc.tar.gz –C /xxx/rootfs6)编译内核模块内核模块保存在lib下面的module下配置内核:*直接编译到zimage m不链接到zimage而是编译成模块到.o就停住进入Linux内核目录(linux-2.6.32.2)make modules ARCH=arm CROSS_COMPILE=arm-linux- 添加了ARCH=arm表示现在编译的是arm架构的内核CROSS_COMPILE=arm-linux-表示使用交叉编译工具链安装内核模块到根文件系统:make modules_install ARCH=armINSTALL_MOD_PATH=/xxx/rootfs7)配置busybox因为Linux很多命令都是通过软连接实现的,所以无法直接将这些命令复制到根文件系统中。
Busybox是一个工具集合,根文件系统很多命令都可以通过busybox编译得到,如命令ls,cd,mkdir。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验八构建根文件系统
一、实验目的
1、了解嵌入式Linux文件系统的作用和类型;
2、了解jffs2文件系统的优点和在嵌入式系统中的应用;
3、理解文件系统的挂载过程;
4、使用BusyBox制作一个根文件系统。
二、实验环境
预装redhat9.0(内核版本2.4.x)的pc机一台,XScale嵌入式实验箱一台(已构建嵌入式Linux系统),以太网线一根,交叉编译工具链,BusyBox软件包。
三、实验步骤
1、解压BusyBox软件包;
2、使用make menuconfig来配置BusyBox,修改交叉编译器前缀;
Build Option
[*] Build BusyBox as a static binary(no shared library)
[*]Do you want to build BusyBox with a Cross ompile /usr/local/hybus-linux-R1.1/bin/arm-linux-
Installation Option
[*]Don't’t use /use
Coreutils
[*]ls
[*]cp
[*]reboot
[*]echo
[*]mkdir
[*]rm
Editors
[*]vi
Login Utilities
[*]getty
3、交叉编译BusyBox;
make
make install
4、建立BusyBox顶层目录结构
mkdir etc dev proc tmp lib var sys
5、在dev目录下创建必要的设备节点
(ram0,console,null,zero);
mknod mdblock b 31 3
mknod console c 5 1
mknod null c 1 3
mknod zero c 1 5
cp –dpR /dev /_install/dev (假设busybox的安装目录为/_install)
6、创建inittab文件;
vi /etc/rc
#!/bin/sh
hostname 192.168.0.3
mount –t proc proc /proc
cat /etc/motd
vi /etc/inittab
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
::restart:/sbin/init
::ctrllaltdel:/sbin/reboot
配置motd文件
Welcome to XSBASE255 broad
7、建立sysinit动作项执行的命令脚本vi etc/init.d/rcS
#!/bin/sh
hostname 192.168.0.3
mount –t proc proc /proc
ifconfig lo 127.0.0.1
ifconfig eth0 192.168.0.50
最后chmod + x rcS
chmod 777 rcS
mkdir init.d
cd init.d
ln –s ../rc rcS
file rcS
8、创建根文件系统映像文件
使用mkfs.jffs2生成映像文件
mkfs.jffs2 –o rootfs.img –e 0x400000 –r _install –p -l
9、移植文件系统到开发板
四、实验要求
1、要求随时观察记录实验结果;
2、掌握配置和编译BusyBox;
3、掌握构建根文件系统的方法。
五、实验报告要求
1、每人一份实验报告;
2、对文件系统裁剪的体会;
3、比较裁剪的文件系统与原文件系统的大小,理解文件系统裁剪对嵌入式系统的意义。
4、理解和掌握建立根文件系统的方法和步骤。
六、思考题
1、嵌入式文件系统的特点?
2、BusyBox的优点?
3、根文件系统的作用?。