2022年Linux添加文件系统 .pdf

上传人:Che****ry 文档编号:34879516 上传时间:2022-08-19 格式:PDF 页数:19 大小:2.17MB
返回 下载 相关 举报
2022年Linux添加文件系统 .pdf_第1页
第1页 / 共19页
2022年Linux添加文件系统 .pdf_第2页
第2页 / 共19页
点击查看更多>>
资源描述

《2022年Linux添加文件系统 .pdf》由会员分享,可在线阅读,更多相关《2022年Linux添加文件系统 .pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验辅助四:添加一个文件系统Saturday, OS_TADecember15, 20091名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 19 页 - - - - - - - - - Contents1文档定位32运行环境33准备工作34实验说明35操作步骤45.1创建基于 ext2 的新文件系统satext2. . . . . . . . . . . . . . . . . . . . . .45.1.1明确我们要修改哪些内容. . . . . . . . . . .

2、 . . . . . . . . . . . . .45.1.2复制源文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45.1.3修改源文件的内容. . . . . . . . . . . . . . . . . . . . . . . . . . . .55.1.4修改编译选项. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95.1.5SomethingMore. . . . . . . . . . . . . . . . . . . .

3、 . . . . . . . .115.1.6重新编译内核. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155.2修改 satext2文件系统的magicnumber. . . . . . . . . . . . . . . . . . .155.2.1修改 magicnumber. . . . . . . . . . . . . . . . . . . . . . . . . .155.2.2一个小程序. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4、. . .165.2.3简单的测试. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165.3剪裁 satext2文件系统的mknod函数. . . . . . . . . . . . . . . . . . . . .165.3.1修改 mknod函数. . . . . . . . . . . . . . . . . . . . . . . . . . . .175.3.2简单的测试. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175.4

5、完成 mkfs.satext2功能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176结束语18名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 19 页 - - - - - - - - - 1文档定位实验辅助主要的作用是以TA 自己的经验来辅助同学们做实验,让大家少走弯路,少在Linux繁杂的内核版本和发行版本的中浪费时间,而把主要的精力集中在理解和实践操作系统本身。有关原理性的东西,在实验说明文档中已

6、有详细的介绍。如果大家有关原理性的问题, 请参考实验说明文档。在实验辅助文档中,我们主要讲实验步骤,帮助大家理解实验步骤,而不触及原理性的东西。TA 所选的发行版是当前最流行的Ubuntu9.04。编译所有的内核代码是 2.6.26 (注意,这个要与 2.6.26.1, 2.6.26.2, 等版本相区别。 )另外,这个文档也不是一份很严肃的文档。TakeIt Easy 同时,也难免会有这样或者那样的问题,欢迎大家指正。请联系:Saturday2运行环境操作系统:Ubuntu9.04内核版本:2.6.26虚拟机:SunVirtualBox3.0.4(注意不是开源版本的VirtualBox-OSE

7、)主系统:Fedora11以上运行环境中最重要的是操作系统和内核版本,这两个一定要与实验辅助中保持一致。3准备工作完全阅读了 实验辅助三: 添加系统调用 , 并已经完成了实验三。4实验说明大家已经完成了实验三,那么大家对于修改linux内核代码,并重新编译内核这样一个过程并不陌生。那么, 现在我们就要着手解决本学期最为复杂的实验四了。要完成整个实验的过程, 我们要编译三次内核。 。 。恩, 先不要被这个吓到。其实如果把整个过程一步一步的拆开,每一步其实都不难。且听我慢慢道来我们以编译一次内核为一个小节,可以把整个实验拆为四节。如下:1. 创建基于ext2 的新文件系统satext2 (这个名字

8、大家可以自己取)。要编译一次内核,并以新内核启动。5.12. 修改 satext2的 magicnumber, 要编译第二次内核, 以新内核启动。5.2名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 19 页 - - - - - - - - - 3. 剪裁 satext2的 mknod函数操作,要编译第三次内核, 以新内核启动。5.34. 最后完成一个shell 程序,完成 mkfs.satext2功能。这一次不用编译内核。5.4除了,第一节对于内核代码有比较多的修改,难

9、度比较大之外, 后面的三节其实只需要各修改一个地方,所以总的来说, 这是一个“虎头蛇尾” 的实验,大家不用被它的硕大的头给吓到,完成了第一节内容, 后面几节就基本上可以用naive 来形容了那么,废话少说,我们按照这四节的顺序来介绍整个的实验过程。5操作步骤5.1创建基于 ext2的新文件系统satext25.1.1明确我们要修改哪些内容首先,要明确的问题是, 我们需要修改哪些方面的内容。大体来说,分为这么几个方面。1. 我们所创建的satext2文件系统,实际上是完全基于ext2 文件系统的。而ext2 相关的源文件,大部分在文件夹fs/ext2下。 satext2文件系统的实现, 实际上是

10、通过复制和修改 ext2 源文件来完成的。所以,我们的第一步就是要复制ext2 相关的源文件。5.1.22. 即使 satext2有了和 ext2 同样的源文件之后, 还必须修改源文件的内容,具体的说就是让代码里面的所有的ext2 和 EXT2 换成 satext2和 SATEXT2。5.1.33. 修改编译选项, 使得我们新添加的文件系统在makemenucon?g中显示出来。5.1.44. SomethingMore5.1.55.1.2复制源文件在目录 linux/fs/ext2下, 基本上都是ext2文件系统所需要的源文件,另外,在 include/linux下也有两个ext2 相关的

11、.h , 分别是 ext2_fs.h和 ext2_fs_sb.h。那么总结下, 跟 ext2相关的文件列举如下:fs/ext2/balloc.cfs/ext2/bitmap.cfs/ext2/dir.c./*该文件夹 (fs/ext2)下所有内容*/include/linux/ext2_fs.hinclude/linux/ext2_fs_sb.h名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 19 页 - - - - - - - - - Figure1: fs/ext2下

12、面的内容截图如 Figure1 :通过如下命令来, 完成整个的源代码复制工作。cdfscp-Rext2satext2cd./include/linuxcpext2_fs.hsatext2_fs.hcpext2_fs_sb.hsatext2_fs_sb.h截图如 Figure2 :Figure2: fs/satext2下面的内容这样我们就完成了第一步工作,源代码的复制。5.1.3修改源文件的内容第二步的主要任务是,我们要把刚刚复制了的源文件里面的所有的ext2 替换成 satext2。这样才能够使得修改过的源文件能够通过编译,主要分为两个步骤。1. 修改 fs/satext2文件夹下面的所有源文

13、件.这个部分的工作通过一个脚本来完成,如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 19 页 - - - - - - - - - #!/bin/shSCRIPT=substitute.shforfin*;doif$f=$SCRIPT;thenechoskip$fcontinuefiecho-nsubstituteext2tomyext2in$f.cat$f|seds/ext2/myext2/g$f_tmpmv $f_tmp$fechodoneecho-nsubst

14、ituteEXT2toMYEXT2 in$f.cat$f|seds/EXT2/MYEXT2/g$f_tmpmv $f_tmp$fechodonedone截图如 Figure3 : 把这个脚本命名为substitute.sh, 放在 fs/satext2下面,加上可执行权限 chmod+x , 运行之后就可以把当前目录里所有文件里面的“ext2 ”和“EXT2 ” 都替换成对应的 “satext2”和 “SATEXT2” 。截图如 Figure4:2. 修改 include/linux下面的两个 .h 文件简单的说, 就是通过文本编辑器把两个.h 里面的内容替换。在这里通过vim 的功能来实现。

15、我们以satext2_fs.h为例,来说明这个问题:cdinclude/linuxvimsatext2_fs.h/*进入到 vim 里面之后输入如下内容*/:%s/ext2/satext2/g:%s/EXT2/SATEXT2/g这样就完成了include/linux下面的 satext2_fs.h的文件替换工作。截图如 Figure5:同一个目录下面的satext2_fs_sb.h用同样的方法就可以完成替换了。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 19 页 -

16、- - - - - - - - Figure3: substitue.sh的内容Figure4: 执行 substitue.sh的部分结果名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 19 页 - - - - - - - - - Figure5: satext2_fs.h的部分内容名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 19 页 - - -

17、 - - - - - - 5.1.4修改编译选项因为我们新增加了一个文件系统,而这个文件系统之前在内核的编译选项中是不存在的,所以我们要修改相关的配置,来使得 makemenucon?g中出现 satext2选项。总体说来, 有这么三个地方需要修改。这三个地方的修改方式都是一样的,把有关 ext2 的选项的内容复制一份, 然后把 ext2 和 EXT2 替换为 satext2和 SATEXT2。1. fs/Kcon?g我们需要 Kcon?g中拷贝一份对应的对Ext2文件宏的定义和帮助信息,这样在 makemenucon?g的时候可以查看该选项的有关内容。截图如 Figure6:Figure6:

18、 fs/Kcon?g的内容2. fs/Make?leMake?le的修改是告诉内核编译系统,当 satext2对应的宏被选上的时候, 到 fs/satext2目录下去编译satext2文件系统。截图如 Figure7:3. arch/x86/con?gs/i386_defcon?g这个文件的改动是修改默认的编译选项。截图如Figure8:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 19 页 - - - - - - - - - Figure7: fs/Make?le的内

19、容Figure8: fs/Make?le的内容名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 19 页 - - - - - - - - - 最后在 makemenucon?g中, 首先进入 ?le system的选项,看到有关 satext2的选项如图 9Figure9: makemenucon?g的截图5.1.5SomethingMore如果现在开始make , 是不能够通过编译的。因为fs/satext2中的一些函数还是需要引用一些头文件, 而这些头文件中只有ext

20、2 相关的函数的定义,而我们需要的是satext2相关的函数定义。根据我自己的经验来看,有这么几个文件需要修改。include/asm-generic/bitops/ext2-atomic.hinclude/asm-generic/bitops/ext2-non-atomic.hinclude/asm-x86/bitops.hinclude/linux/magic.h下面是关于这些被修改的地方的截图。注意,这个只是部分的截图,只是个示意图。代码的修改, 需要自己手动来完成! ! !截图如 Figure10 :名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -

21、- - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 19 页 - - - - - - - - - Figure10:ext2-atomic的内容截图如 Figure11 :截图如 Figure12 :截图如 Figure13 :名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 19 页 - - - - - - - - - Figure11:ext2-non-atomic的内容名师资料总结 - - -精品资料欢迎下载 - - - - -

22、- - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 19 页 - - - - - - - - - Figure12:bitops.h的内容Figure13:magic.h的内容也许你会问, 这些要修改的文件是怎么被找出来的呢?我们并不知道编译satext2文件系统的时候到底引用了哪些.h 文件阿?事实上, 发现这些文件的位置并不难,主要就是通过反复编译获得的。比如说, 如果在编译的过程中发现了这样的一条错误:fs/fs.o(.text+0 x27f8a):undefinedreferencetosatext2_find_first_z

23、ero_bit那么也就是说, 我们需要引用的satext2_?nd_?rst_zero_bit这样一个并没有被定义的东西。但是,可以确定的是, ext2_?nd_?rst_zero_bit肯定是存在的, 我们只要找到ext2_?nd_?rst_zero_bit的位置。然后复制一份并改成satext2_?nd_?rst_zero_bit不就好了吗?就是这么简单。查找的过程使用下面这个命令:cdlinuxgrep*ext2_find_first_zero_bit-r这个命令默认是在当前的文件夹及其子目录下面的所有文件中搜索ext2_?nd_?rst_zero_bit。得到的就是包含这个字符串的文件

24、和位置。找到了之后,只要把相关的内容复制一份, 将定义改为的satext2_?nd_?rst_zero_bit即可。以上这四个额外需要修改的文件都是这么被找出来的。大家可以尝试一下这样的改错过程, 这样有助于增加我们对于内核的理解。: )名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 19 页 - - - - - - - - - 5.1.6重新编译内核做完了上述的工作之后,我们就要开始重新编译内核了,这一部分内容参见实验辅助二:编译 Linux内核编译完成之后, 重启进

25、入新的内核, 进行一下简单的测试。#ddif=/dev/zeroof=satfsbs=1Mcount=1#mkfs.ext2satfs#cat/pro/filesystems|grepext#mount-tsatext2-oloop./satfs/mnt#mount#umount/mnt#mount-text2-oloop./satfs/mnt#mount#umount看看这些命令一行一行输入下来的结果是不是和预期的一致呢?要是对了的话,就恭喜你,这个实验最难的一节已经完成了5.2修改 satext2文件系统的 magicnumber我们在已经解决了虎头之后,后面的问题就非常简单了。我们只需要

26、修改satext2的magicnumber就可以了。5.2.1修改 magicnumber在 include/linux/magic.h文件中做如下修改就可以了:截图如 Figure14 :Figure14:magic.h的内容就这样,我们把 satext2的 magicnumber改成了 0 x6666。之后重新编译内核,进入新的内核。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 19 页 - - - - - - - - - 5.2.2一个小程序在我们测试之前,我们

27、需要写个小程序来修改我们创建的satext2文件系统的magicnumber。因为它必须和内核中记录satext2文件系统的magicnumber相匹配,satext2文件系统才能够被正确的mount。我们假设这个程序为changeMN.c(这个可以从老师官方的资料中获得), 在此不赘述了。5.2.3简单的测试执行代码如下:#ddif=/dev/zeroof=satfsbs=1Mcount=1#mkfs.ext2satfs#./changeMNsatfs#mount-tsatext2-oloop./fs.new/mnt#mount#umount/mnt#mount-text2-oloop./f

28、s.new/mnt结果应该是第一个mount-t satext2成功,第二个 mount-t ext2 失败。截图如 Figure15 :Figure15:测试修改 magicnumber的结果5.3剪裁 satext2文件系统的 mknod函数修改了 satext2的 magicnumber之后,我们剪裁一下satext2的 mknod函数。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 19 页 - - - - - - - - - 5.3.1修改 mknod函数截图

29、如 Figure16 :Figure16:剪裁 mknod5.3.2简单的测试#mount-tsatext2-oloop./satfs/mnt#cd/mnt#mknodmyfifop执行完 mknod之后,应该报错,然后用 dmesg的命令得到如图的结果。截图如 Figure17 :5.4完成 mkfs.satext2功能这个过程,只用我们在目录/sbin下完成一个名为mkfs.satext2的脚本就可以了, 代码如下:#!/bin/sh/sbin/losetup-d/dev/loop0名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -

30、 - 名师精心整理 - - - - - - - 第 17 页,共 19 页 - - - - - - - - - Figure17:剪裁 mknod/sbin/losetup/dev/loop0$1/sbin/mkfs.ext2/dev/loop0ddif=/dev/loop0of=/tmp/tmpfsbs=1kcount=2/sbin/changeMN/tmp/tmpfsddif=/tmp/tmpfsof=/dev/loop0/sbin/losetup-d/dev/loop0rm-f/tmp/tmpfs测试的代码如下:#ddif=/dev/zeroof=satfsbs=1Mcount=1#mk

31、fs.satext2satfs#mount-tsatext2-oloop./satfs/mnt#mountmount之后,应该得到如下类似的结果截图如Figure18 :6结束语一个冬学期的操作系统实验的最后一个实验终于完成了。本人的工作也完成了一大半了这是本人第一次做助教,感觉还不错感谢大家一路的支持最后引用 10086移动 mm 的一句话,作为结束:祝大家生活愉快 :)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 19 页 - - - - - - - - - Figure18:剪裁 mknod的结果名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 19 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁