实验5 添加一个文件系统_第1页
实验5 添加一个文件系统_第2页
实验5 添加一个文件系统_第3页
实验5 添加一个文件系统_第4页
实验5 添加一个文件系统_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验5追加文件系统实验的目的由于文件系统是操作系统的最直观的部分,用户可以通过文件直接与操作系统交互,所以操作系统必须为用户提供数据计算和数据存储的功能。 本实验通过追加文件系统,进一步理解Linux中文件系统的原理及其实现。详细了解lOS文件系统的原理学习理解Linux的VFS文件系统管理技术学习理解Linux的ext2文件系统实现技术l自定义文件系统的设计与实现实验内容添加自定义文件系统myext2,例如ext2。 实验的主要内容:添加与ext2完全相同的文件系统myext2更改myext2的幻灯片编号更改l文件系统操作l添加文件系统创建工具实验指导1 .问题的说明本实验的内容是追加ext

2、2这样的定制文件系统myext2。 myext2文件系统的说明如下1、myext2文件系统的物理格式定义与ext2大致一致,myext2的magic number为0x6666,ext2的magic number为0xEF53。2、myext2是ext2的自定义版本,仅支持原始ext2文件系统的部分操作,并修改了某些操作。2 .实验顺序提示:以下步骤以3.6.6版本的内核为例,2.6.15版本的内核请参见教材。 其他版本的内核可能不一样。添加与2.1ext2完全相同的文件系统myext2要添加与ext2完全相同的文件系统myext2,请首先确定实现ext2文件系统的内核源代码由哪个文件组成。

3、Linux的源代码结构清楚地示出了fs/ext2目录中的所有文件都属于ext2文件系统。 通过检查这些文件中包含的头文件,可以首先对属于Linux源代码的ext2文件系统的文件进行归纳fs/ext2/acl.cfs/ext2/acl.hfs/ext2/balloc.cfs/ext2/位图. cfs/ext2/dir.cfs/ext2/ext2.hfs/ext2/文件. c包含/Linux/ext2_ fs.h包含/Linux/ext2_ fs _ sb.h然后,将myext2文件系统的源代码添加到Linux源代码中。 将ext2部分的源代码克隆到myext2,即,将以上列出的ext2源代码文件

4、复制到myext2。 根据Linux源代码的组织结构,将myext2文件系统的源代码存储在fs/myext2下,将报头文件存储在include/linux下。 在Linux shell上,执行以下操作#cd /linux-3.6.6 /*假设内核源代码目录和内核源代码已扩展到主目录的Linux-3.6.6目录中*/#cd fs#cp-rext2myext2#cd ./include/linux#cp ext2_fs.h myext2_fs.h# CP ext2_ fs _ sb.myext2_ fs _ sb.h/3.6. 6此文件不存在#cd /linux-3.6.6/fs/myext2#m

5、v ext2.h myext2.h#cd /linux-3.6.6# CD包含/ASM -通用/位# CP ext2- atomic.h myext2- atomic.h# CP ext2- atomic-set bit.myext2- atomic-set bit.h/3.6. 6修改此文件现在,复制文件系统的第一个步骤中的源代码就完成了。 对克隆文件系统来说,这是不够的。 无法编译文件中的数据结构名称、函数名称、相关宏等内容,因为myext2没有更改。然后,开始克隆文件系统的步骤2。 更改先前添加的文件的内容。 为了简单起见,进行了最简单的置换。 将原来的“EXT2”替换为“MYEXT2”

6、将原来的“EXT2”替换为“MYEXT2”。在fs/myext2以下的文件中替换字符串时,也可以使用以下脚本#! /bin/bashSCRIPT=substitute.shfor f in *PSif $f=$SCRIPT then系列echo skip $f continue联邦调查局echo-n substitute ext2to myext2in $ f . cat $ f|seds/ext2/myext2/g $ f _ tmpmv $f_tmp $fecho done echo-n substitute ext2to myext2in $ f.cat $ f|seds/ext2/my

7、ext2/g $ f _ tmpmv $f_tmp $fecho done done将该脚本命名为substitute.sh,放置在fs/myext2下,加上可执行的权限,执行后将当前目录中的所有文件中的“ext2”和“ext2”作为对应的“myext2”和“myext2”。编辑器替换功能包括include/linux/myext2_fs.h、include/linux/myext2_fs_sb.h (此文件不在3.6.6中)和include/ASM-generic/bitops /。 将myext2-atomic-setbit.h (该文件位于3.6.6中)文件的“ext2”、“ext2”分

8、别替换为“myext2”、“myext2”添加到include/ASM -通用/bitops.h文件中:kernel 3.6.6:在其他内核版本中,您可能需要:在arch/x86/include/asm/bitops.h文件中添加以下内容kernel 3.6.6:在其他内核版本中,您可能需要:添加到包含/Linux/magic.h文件中 # define myext2_ super _ magic0x ef 53 源代码的更改到此结束。 然后,在步骤3的作业中编译源代码。 首先,将myext2添加到编译选项中,以便在创建make menuconfig时可以添加此选项。 执行这项工作需要修改以下

9、三个文件PS/PS Kfs/化妆文件fs/Kconfig复制EXT2文件宏的定义和帮助信息,以便在创建make menuconfig时显示此选项的帮助内容。 fs/makefile的修改是内核编译系统,如果选择了与myext2相对应的宏,请到fs/myext2目录编译myext2文件系统。在kernel 3.6.6中,将sourcefs/myext2/kconfifig”添加到fs/Kconfig文件中,并将“myext2”项目添加到“ext2”相关项目的位置。在fs/makefile中添加“obj-$ (config _ myext2_ fs )=myext2/”为了使make mencuc

10、onfig更清楚,请将fs/MYExt2/Kconfig文件中的ext2更改为“MYExt2”和“Second”前加“my”。一切就绪,请使用make menuconfig选择myext2。 按如下方式进行# cd /linux-3.6.6# make menuconfig选择与ext2和myext2文件系统相对应的选项。 也就是说,在空白的情况下,从空格键中选择*号保存更改并退出。 我在做重建make等内核的工作。第一部分完成了克隆ext2文件系统。新编译的内核将重新启动系统。然后,测试添加的myext2文件系统#pwd/root# ddif=/dev/zero of=myf SBS=1mc

11、ount=1#/sbin/mkfs.ext2 myfs# cat/proc /文件系统ext2ext3myext2ext4# sudo mount-t myext2- OOP./myfs/mnt#mount/dev/loop0 on /mnt type myext2 (rw )#sudo umount /mnt#sudomount-text2-oop./myfs/mnt#mount/dev/loop0 on /mnt type ext2 (rw )#sudo umount /mnt更改2.2毫秒2的幻灯片编号根据以上做的事情。 找到myext2的幻灯片编号,并更改为0x66662.6.20或更

12、高版本的内核,该值位于include/linux/magic.h文件中。 2.6.15内核参考教材。- # define myext2_ super _ magic0x ef 53# define myext2_ super _ magic0x 6666更改完成后,使用make重新编译内核。 重新启动新内核,准备下一次测试。在测试本节之前,必须创建一个applet change Mn.c,用于修改您创建的myfs文件系统的magic number。 因为myfs文件系统必须与内核中记录的myext2文件系统的magic number匹配,才能正确装载。可以从课程网站上下载changeMN.c程

13、序。 编译这个程序生成的可执行程序名称是changeMN。接下来,开始测试# ddif=/dev/zero of=myf SBS=1mcount=1#/sbin/mkfs.ext2 myfs#./changeMN myfs# sudo mountt myext2- OOP./fs.new/mnt#mount/home/user/fs.new on/mnttypemyext2(rw )#sudo umount /mnt# sudo mount-text2- OOP./fs.new/mntmount : wrong fs类型,bad选项,bad superblock on /dev/loop0,#

14、2.3变更文件系统的操作myext2是一个实验性的文件系统,希望能支持简单的文件操作。 因此,在完成myext2的总体框架后,修改了myext2支持的一些操作,以加深对操作系统的文件系统操作的理解。 此处,以削减myext2的mknod操作为例,理解该过程的实现流程。Linux将块设备、字符设备和命名管道的所有操作视为文件的操作。 mknod操作用于生成与块设备、字符设备和命名管道对应的节点文件。 在ext2文件系统中,实现函数如下fs/ext2/namei.c,线144144静态索引2 _ mknod (结构索引* dir,结构目录* dentry,内部模式,dev_t rdev )1451

15、46结构节点*i节点147英特尔;148149 if (! new_valid_dev(rdev ) )150返回电压;151152i节点=ext2_new_i节点(dir,mode )153err=ptr_err(i节点)154 if (! 输入is_err(i节点) ) 1。 2155 init_special_inode(inode,inode-i_mode,rdev )156 #ifdef CONFIG_EXT2_FS_XATTR157i节点-i_op=ext2_special_i节点_操作;158 #endif159标记_ inode _ dirty (inode )160 err=

16、ext2_add_nondir(dentry,I节点)161 )162返回错误;163 )这是在ext2_dir_inode_operations结构中定义的fs/ext2/namei.c,线路400392structi节点_操作ext2_ dir _ I节点_操作= I 比较393 .create=ext2_create394 .lookup=ext2_lookup395 .链接=ext2_ link396 .unlink=ext2_unlink397 .symlink=ext2_symlink398 .mkdir=ext2_mkdir399 .rmdir=ext2_rmdir400 .mknod=ext2_mknod401 .rename=ext2_rename40

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论