类ex2文件系统.ppt
文本预览下载声明
编写一个类ex2的文件系统 一、添加一个和ext2完全相同的文件系统 1、linux系统fs/ext2目录下的所有文件是属于ext2文件系统。 2、克隆ext2文件系统到myext2文件系统 复制一份以上所列的 ext2源代码文件给myext2用。按照Linux源代码的组织结构,把myext2文件系统的源代码存放到fs/myext2下,头文件放到include/linux下。 3、修改myext2下的文件内容 做了一个最简单的替换:将原来“EXT2”替换成“MYEXT2”;将原来的“ext2”替换成 “myext2”。 4、修改操作系统中所有文件系统都需要数据结构 struct super_block和struct inode 5、编译源代码 要把myext2加到编译选项中,以便在做 make menuconfig的时候,可以将该选项加上去。 做这项工作需要修改三个文件: 6、添加myext2配置宏 6、添加myext2配置宏 7、编译连接生成内核文件 出现错误: 8、测试添加的myext2文件系统 二、修改 myext2的magic number 找到myext2的magic number,并将其改为0x6666: 四、修改文件系统操作 mknod 操作是用来产生那些块设备、字符设备和命名管道所对应的节点文件,取消此操作,并给出错误信息。 五、添加文件系统创建工具 制作出一个更快捷方便的myext2 文件系统的创建工具:mkfs.myext2(名称上与mkfs.ext2 保持一致) * fs/ext2/balloc.c fs/ext2/bitmap.c fs/ext2/dir.c fs/ext2/file.c fs/ext2/fsync.c fs/ext2/ialloc.c fs/ext2/inode.c fs/ext2/ioctl.c fs/ext2/namei.c fs/ext2/super.c fs/ext2/symlink.c include/linux/ext2_fs.h include/linux/ext2_fs_i.h include/linux/ext2_fs_sb.h 在 Linux的shell下,执行如下操作: #cd /usr/src/linux #cd fs #cp –R ext2 myext2 #cd ../include/linux #cp ext2_fs.h myext2_fs.h #cp ext2_fs_i.h myext2_fs_i.h #cp ext2_fs_sb.h myext2_fs_sb.h ext2_fs.h 将编译选项和宏关联起来 将宏与源代码目录关联 修改Makefile防止在连接的时候myext2 的目标文件与ext2 的目标文件冲突。 原因: 缺一些函数的定义。 解决方法: 在Linux源代码中搜索ext2_clear_bit,ext2_test_bit 等函数,找到它们后,复制一份,改成myext2_cear_bit,myext2_test_bit等函数名就 可以了。 回到linux 目录下,再次做make bzImage 添加完下述内容,保存,退出。 用make bzImage重新编译内核 Mknod函数 修改Mknod函数 在/sbin目录下编辑如下的程序: 创建文件系统myfs: *
显示全部