版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本实验的内容是要添加一个类似于ext2 的自定义文件系统myext2 。 myext2 文件系统实验5添加一个文件系统实验目的文件系统是操作系统中最直观的部分,因为用户可以通过文件直接地和操作系统交互,操作系统也必须为用户提供数据计算、数据存储的功能。本实验通过添加一个文件系统,进一步理解Linux中的文件系统原理及其实现。深入理解操作系统文件系统原理学习理解Linux的VFS文件系统管理技术学习理解Linux的ext2文件系统实现技术设计和实现自定义文件系统实验内容添加一个类似于ext2的自定义文件系统 myext2 。实验主要内容:添加一个和ext2完全相同的文件系统 myext2修改 m
2、yext2 的 magic number修改文件系统操作 添加文件系统创建工具实验指导1.问题描述的描述如下:1 、 myext2 文件系统的物理格式定义与ext2 基本一致,除了 myext2 的 magic number是 0x6666 ,而 ext2 的 magic number 是 0xEF53 。2 、 myext2 是 ext2 的定制版本,它只支持原来ext2 文件系统的部分操作,以及修改了部分操作。2. 实验步骤提示:下面的操作步骤以3.6.6 版本的内核为例,2.6.15 版本的内核请参照教材,其它版本内核可能会有所区别。2.1 添加一个和ext2 完全相同的文件系统myex
3、t2要添加一个与ext2 完全相同的文件系统myext2 , 首先是确定实现ext2 文件系统的内核源码是由哪些文件组成。Linux 源代码结构很清楚地告诉我们:fs/ext2 目录下的所有文件是属于ext2 文件系统的。再检查一下这些文件所包含的头文件,可以初步总结出来Linux源代码中属于ext2 文件系统的有:fs/ext2/acl.cfs/ext2/acl.hfs/ext2/balloc.cfs/ext2/bitmap.c fs/ext2/dir.cfs/ext2/ext2.h fs/ext2/file.c include/linux/ext2_fs.hinclude/linux/ex
4、t2_fs_sb.h接下来开始添加 myext2文件系统的源代码到Linux源代码。把ext2部分的源代码克隆到myext2去,即复制一份以上所列的ext2源代码文件给 myext2用。按照Linux源代码的组织结 构,把 myext2 文件 系统的源 代码存 放到fs/myext2 下,头 文件放 到 include/linux 下。在Linux的shell下,执行如下操作:# cd /linux-3.6.6/*内核源代码目录,假设内核源代码解压在主目录的Linux-3.6.6 只目录中*/# cd fs# cp -R ext2 myext2# cd ./include/linux# cp
5、ext2_fs.h myext2_fs.h# cp ext2_fs_sb.h myext2_fs_sb.h 3.6.6没有止匕文件# cd /linux-3.6.6/fs/myext2# mv ext2.h myext2.h# cd /linux-3.6.6# cp ext2-atomic.h myext2-atomic.h# cp ext2-atomic-setbit.h myext2-atomic-setbit.h/3.6.6 修改此文件这样就完成了克隆文件系统工作的第一步 源代码复制。对于克隆文件系统来说,这样当然还远远不够,因为文件里面的数据结构名、函数名、以及相关的一些宏等内容还没有
6、根据 myext2 改掉,连编译都通不过。下面开始克隆文件系统的第二步 : 修改上面添加的文件的内容。为了简单起见,做了一个最简单的替换:将原来“EXT2”替换成“MYEXT2 " ;将原来的“ext2 ”替换成“myext2对于 fs/myext2 下面文件中字符串的替换,也可以使用下面的脚本:#!/bin/bashSCRIPT=substitute.shfor f in *doif $f = $SCRIPT thenecho "skip $f"continuefiecho -n "substitute ext2 to myext2 in $f.cat
7、 $f | sed 's/ext2/myext2/g' > $f_tmpmv $f_tmp $fecho "done"echo -n "substitute EXT2 to MYEXT2 in $f.cat $f | sed 's/EXT2/MYEXT2/g' > $f_tmpmv $f_tmp $fecho "done"done把这个脚本命名为substitute.sh ,放在 fs/myext2 下面,加上可执行权限,运行之后就可以把当前目录里所有文件里面的“ ext2 ”和“ EXT2”都替换成
8、对应的“myext2 ”和“ MYEXT2 ”。用 编 辑 器 的 替 换 功 能 , 把 include/linux/myext2_fs.h,include/linux/myext2_fs_sb.h(3.6.6 没 有 此 文 件 ) 和include/asm-generic/bitops/myext2-atomic.h, myext2-atomic-setbit.h ( 3.6.6为此文件) 文件中的“ext2 ”、“ EXT2 ”分别替换成“myext2 ”、“ MYEXT2 ”在 include/asm-generic/bitops.h文件中添加:kernel 3.6.6拜includ
9、e <asn-generic/bttops/Hy|&xt2atonic,h>其他内核版本可能需要做:#include <asm-generic/bitop5/inyext2-non-atomic.h>#include asm-generic/bitops/myext2- atomic.h>在 arch/x86/include/asm/bitops.h文件中添加:kernel 3.6.6include -generic/bttops/myextz-atomic-setbit.h>其他内核版本可能需要做:<include-non-atoiBic.h
10、3#define 二但 bit atomic I Lock., nr , addr)test and set bit(nr), (unsi9n«d lang )(addr)#define myeitt? clear bit atomic(l&ckr nr. addr)test and clear bit(nrj/<unsigned lo-ng 1) <addr)在 include/linux/magic.h文件中添力口" #define MYEXT2 SUPER MAGIC0xEF53源代码的修改工作到此结束。接下来就是第三步工作一一编译源代码。首先要把
11、myext2加到编译选项中去,以便在做make menuconfig 的时候,可以将该选项加上去。做这项工作只需要修改三个文件:fs/Kconfigfs/Makefilefs/Kconfig中拷贝一份对应的对EXT2文件宏的定义和帮助信息,这样在做makemenuconfig的时候可以查看该选项的有关帮助的内容。fs/Makefile的修改是告内核编译系统,当myext2对应的宏被选择上的时候,至Ufs/myext2 目录下去编译 myext2文件系统。在 kernel 3.6.6,在 fs/Kconfig 文件中增加 source " fs/myext2/Kconfig ;并且对“
12、 ext2 ”相关项的地方添加“ myext2 ”项。s-aurcc 'ts/nyfKt Z/Kconttfl" source "fs/CKtl/Ktonftg'1 SDtirce "#5史国tgrconrtg FS_IIP* execute In pI&wg booldep«nd g EKT2_FS_XIP default yconfig FS_xiP s 匕Hfcutu l<i placebooldcp«nd& an myexTz_F5_xi? default yHurce -ft/jbd/Kconfi
13、g"£-ource "tV jbdl/Kconftfl"corflg FSMBCACHE# Meca 机尊H cache f&r extended Attributes trtstfiude-ult y If EXTJFSh# 居果 EXTN.FSJTTRdefjult y tr wvEXT2_F5=y 我 myfst2_fs,_xattrdrf«ult y It £XTJ_F5-y at EKT3_FS_XATFRdEjult ¥ &F EXT4_F5-。EXT4_F$_XATTftderulT: n tf
14、 EJ(TZ-F5_XfcrrR | |mXTZ_FS_XATTR EX73_FS_KArTR | I EXT<_F5_XATTR在 fs/Makefile文件中添加 “ obj-$(CONFIG_MYEXT2_FS)+= myext2/1 *Makefile Xvvj unr&u rnvrKCKnvr-lii;西芭工宦*W«bj-t(CONFTC OLMI+= dim/# Do not addany filesystems befor0bj-$(CONFIGFSCAEHE)+nhj-StCOhFIGREISERF F£)+=CONFIGEm FS)+=。而备
15、(匚ONFItiEKT2 FS)+=Obj-SfCONFlGHYEXT2 FS)/二# we place e)ct4 dfter ext2 so plaii* unless expLlcitly requested by rootfstypei this linefcache/reis«rfs/esttJJ # Before ext2 sc root can be ext3 ext 27a/ext2/i ext2 root fs-s are mounted using ext2Obi-S(CQNFIG EKT4 FS) flbj-S(CONFIG前) cbi-iANFTG 1UJ1+
16、= e)ct4/+= jhd/+= ihd?/文件中“Ext2 ”为了在 make mencuconfig中看得更加清楚,修改 fs/myext2/Kconfig替换为 “ MYExt2 ” , “Second ” 前加上 “ MY0- 'Keenfig卜川K皿浏过互联网-比文件旧 启呢旧宜里何)阳案 mtn 文口1诩SHH)q1打开, 3保存里 撤消 Q *K8Mig XCfiftfig HYEXT2 FS SECURIT* bool 'Mvext? Security Labels" depends on MYEXT2 FS KAHR helpSecurity la
17、bels support alterrative access control niseis i折pl钳by security raiules likt SELinux, This option enables an extended attribute handler Mr file security labels in the my«xt2 filesysteni.If you are not using a security tmodule that requires using extended attributes for file security labels, N,c
18、onfi9 MYEXTJ F5 XIPbool hM¥Ext2 execute in place support* depends on myext? F5 0 mmu helpEtecLte in place can tie used on raemory-backed black devices. If you liable this opuon. yau can select io nount t>U<k devices which are一切都准备就绪了,使用 make menuconfig 选择上 myext2 ,如下:# cd /linux-3.6.6# ma
19、ke menuconfigSecond extended fs. supper卜 Ext2 extended attributes* xt2 POSIX Access Control Lists*Ext? Security Labels Ext2 execute in place support< > MY ecord extended fs support (NEW),*> xt3 j9Undl!Ang ftle systen support*号选中ext2和myext2文件系统对应的选项,即原来空白用空格键选中为, Se匚口nd ex七ended Fs 5uppQrt*
20、xt2 extended attributesxt2 POSIX Access Control ListsLabels place support fs support attributes-xt2 Security xt2 execute in MY econd extended MY xt2 extendedMY xtz POSIX Access Control ListsMY xt2 Security LabelsI4YExtZ execute tn place support保存修改,退出。然后做 make等重建内核的工作第一部分工作一一克隆ext2文件系统已经完成了。新编译出来的内核
21、重新启动系统。下面我们来对添加的myext2文件系统进行一下测试:#pwd/root#dd if=/dev/zero of=myfs bs=1M count=1#/sbin/mkfs.ext2 myfs#cat /proc/filesystems | grep extext2ext3myext2ext4#sudo mount-t myext2-o loop ./myfs /mnt#mount/dev/loop0 on /mnt type myext2 (rw)#sudo umount /mnt#sudo mount-t ext2 p loop ./myfs /mnt#mount/dev/loo
22、p0 on /mnt type ext2 (rw)#sudo umount /mnt2.2 修改 myext2 的 magic number0x6666 :文件中。 2.6.15 内核参照教材。在上面做的基础上。找到myext2 的 magic number2.3 .20 以后内核版本,这个值在include/linux/magic.h- #define MYEXT2_SUPER_MAGIC0xEF53+ #define MYEXT2_SUPER_MAGIC0x6666改动完成之后,再用make 重新编译内核。以新内核重新启动,准备下面的测试。在我们测试这个部分之前,我们需要写个小程序chan
23、geMN.c ,来修改我们创建的myfs 文件系统的magic number 。因为它必须和内核中记录myext2 文件系统的magicnumber 匹配, myfs 文件系统才能被正确地mount 。changeMN.c 程序可以在课程网站中下载。这个程序经过编译后产生的可执行程序名字为 changeMN 。下面我们开始测试:#dd if=/dev/zero of=myfs bs=1M count=1#/sbin/mkfs.ext2 myfs#./changeMN myfs#sudo mount-t myext2-o loop ./fs.new /mnt#mount/home/user/fs
24、.new on /mnt type myext2 (rw)#sudo umount /mnt# sudo mount 十 ext2-o loop ./fs.new /mntmount: wrong fs type, bad option, bad superblock on /dev/loop0,#2.3 修改文件系统操作myext2 只是一个实验性质的文件系统,我们希望它只要能支持简单的文件操作即可。因此在完成了myext2 的总体框架以后,我们来修改掉myext2 支持的一些操作,来加深对操作系统对文件系统的操作的理解。下面以裁减myext2 的 mknod 操作为例,了解这个过程的实现流
25、程。Linux 将所有的对块设备、字符设备和命名管道的操作,都看成对文件的操作。mknod操作是用来产生那些块设备、字符设备和命名管道所对应的节点文件。在ext2 文件系统中它的实现函数如下:fs/ext2/namei.c, line 144144 static int ext2_mknod (struct inode * dir, struct dentry *dentry, int mode, dev_trdev)145 146struct inode * inode;147int err;148149if (!new_valid_dev(rdev)150return -EINVAL;15
26、1152inode = ext2_new_inode(dir, mode);153err = PTR_ERR(inode);154if (!IS_ERR(inode) 155init_special_inode(inode, inode->i_mode, rdev);156 #ifdef CONFIG_EXT2_FS_XATTR157inode->i_op = &ext2_special_inode_operations;158 #endif159mark_inode_dirty(inode);160err = ext2_add_nondir(dentry, inode);
27、161162return err;163 它定义在结构ext2_dir_inode_operations 中:fs/ext2/namei.c, line 400392 struct inode_operations ext2_dir_inode_operations = 393.create= ext2_create,394.lookup= ext2_lookup,395.link= ext2_link,396.unlink= ext2_unlink,397.symlink= ext2_symlink,398.mkdir= ext2_mkdir,399.rmdir= ext2_rmdir,40
28、0.mknod= ext2_mknod,401 .rename= ext2_rename,402 #ifdef CONFIG_EXT2_FS_XATTR403.setxattr= generic_setxattr,404.getxattr= generic_getxattr,405.listxattr= ext2_listxattr,406.removexattr= generic_removexattr,407 #endif408.setattr= ext2_setattr,409.permission= ext2_permission,410 ;当 然 , 从 ext2 克 隆 过 去 的
29、 myext2 的 myext2_mknod , 以 及myext2_dir_inode_operations 和上面的程序是一样的。对于 mknod 函数,我们在myext2 中作如下修改:fs/myext2/namei.cstatic int myext2_mknod (struct inode * dir, struct dentry *dentry, int mode,int rdev)printk(KERN_ERR “ haha, mknod is not supported by myext2! you vebeen cheated!n ” );return-EPERM;添加的程序
30、中:第一行 打印信息,说明mknod 操作不被支持。第二行 将错误号为EPERM 的结果返回给shell ,即告诉shell ,在 myext2 文件系统中,maknod 不被支持。修改完毕,然后重新编译内核。以新生成的内核重新启动计算机,我们在shell 下执行如下测试程序:# sudo mount 十 myext2-o loop ./fs.new /mnt#cd /mnt# sudo mknod myfifo pmknod: 'myfifo': Operation not permitted第一行命令:将fs.new mount 到 /mnt 目录下。第二行命令:进入/mn
31、t 目录,也就是进入fs.new 这个 myext2 文件系统。第三行命令:执行创建一个名为myfifo 的命名管道的命令。第四、五行是执行结果:第四行是我们添加的myext2_mknod 函数的 printk 的结果;第五行是返回错误号EPERM 结果给 shell , shell 捕捉到这个错误后打出的出错信息。需要注意的是,如果你是在图形界面下使用虚拟控制台,printk 打印出来的信息不一定能在你的终端上显示出来,但是可以通过命令dmesg|tail 来观察。可见,我们的裁减工作取得了预期的效果。2.4. 添加文件系统创建工具文件系统的创建对于一个文件系统来说是首要的。因为, 如果不存在一个文件系统,所有对它的操作都是空操作,也是无用的操作。其实,前面的第一小节添加一个和ext2 完全相同的文件系统myext2 和第二小节修改 myext2 的 magic number 在测试实验结果的时候,已经陆陆续续地讲到了如何创建 myext2 文件系统。下面工作的主要目的就是将这些内容总结一下,制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年钢材行业技术改造投资合作协议
- 2025年度出国打工人员劳动合同终止与后续服务合同4篇
- 二零二五年度体育场馆虫鼠害防治与运动安全保障合同3篇
- 2025年度仓储租赁合同规范范本2篇
- 二零二五年度床具行业产业链整合与资源对接合同4篇
- 2025年度存量房居间买卖合同电子版示范文本4篇
- 二零二五年度航空航天零部件供应合同3篇
- 2025年度打桩工程材料供应合同3篇
- 2025年度绿色生态住宅承建与生态保护合同4篇
- 二零二五年度留学奖学金申请合同4篇
- 游戏综合YY频道设计模板
- 高中数学知识点全总结(电子版)
- 小学科学项目化作业的设计与实施研究
- GB/T 10322.7-2004铁矿石粒度分布的筛分测定
- 2023新译林版新教材高中英语必修一重点词组归纳总结
- 苏教版四年级数学下册第3单元第2课时“常见的数量关系”教案
- 弘扬中华传统文化课件
- 基于协同过滤算法的电影推荐系统设计
- 消防应急预案流程图
- 《数据科学与大数据技术导论》完整版课件(全)
- 人教统编版高中语文必修下册第六单元(单元总结)
评论
0/150
提交评论