添加一个和ext3完全相同的文件系统myext3
一、代码拷贝
cd /usr/src/linux-2.6.10/fs
mkdir myext3
cp -r ext3/. myext3/.
notes:.h文件可以直接使用include/linux目录下ext3的这四个头文件ext3_fs.h,ext3_fs_i.h,ext3_fs_sb.h,ext3_jbd.h。如果需要自己的头文件以增加额外的声明和代码,可以在include/linux目录下创建,例如myext3_fs.h。
二、代码以及相关配置文件的修改
1. 修改fs/myext3/super.c
a: 将 struct ext3_fs_type的定义中.name = "ext3" 改为 .name = "myext3"
并作下列替换:
init_ext3_fs -> init_myext3_fs
exit_ext3_fs -> exit_myext3_fs
ext3_fs_type -> myext3_fs_type
b: 在函数init_inodecache中,将字符串"ext3_inode_cache"替换为"myext3_inode_cache"。
因为函数kmem_cache_create在创建cache时是按照字符串唯一分配的,所以要改一下,以防重复分
配,和ext3文件系统相冲突。
2. 修改fs/myext3/xattr.c
在函数init_ext3_xattr中,将字符串"ext3_xattr"替换为"myext3_xattr"。原因同1.b。
3. 修改fs/Kconfig
加入
config MYEXT3_FS
tristate "My ext3 file system support"
help
My own ext3 file system.
4. 修改fs/Makefile
加入
obj-$(CONFIG_MYEXT3_FS) += myext3/ # add by hrr for my own ext3
5. 修改fs/myext3/Makefile
原来的Makefile为
#
# Makefile for the linux ext3-filesystem routines.
#
obj-$(CONFIG_EXT3_FS) += ext3.o
ext3-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
ioctl.o namei.o super.o symlink.o hash.o resize.o
ext3-$(CONFIG_EXT3_FS_XATTR) += xattr.o xattr_user.o xattr_trusted.o
ext3-$(CONFIG_EXT3_FS_POSIX_ACL) += acl.o
ext3-$(CONFIG_EXT3_FS_SECURITY) += xattr_security.o
改为
#
# Makefile for the linux ext3-filesystem routines.
#
obj-$(CONFIG_MYEXT3_FS) += myext3.o
myext3-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
ioctl.o namei.o super.o symlink.o hash.o resize.o
myext3-$(CONFIG_EXT3_FS_XATTR) += xattr.o xattr_user.o xattr_trusted.o
myext3-$(CONFIG_EXT3_FS_POSIX_ACL) += acl.o
myext3-$(CONFIG_EXT3_FS_SECURITY) += xattr_security.o
即把相应的ext3改为myext3。
三、编译连接生成内核文件
1. make menuconfig
其他选项皆按默认配置不修改即可,只需要把myext3作为内核模块加载,即选中M即可。
notes:Y(直接编译到内核中),N(不选择)和M(编译成模块的方式)
2. make clean
这步不是必需的
3. make
make相当于 make bzImage 和 make modules的联合
4. make modules_install
这步的执行过程中,控制台显示的信息中应包含:
INSTALL fs/myext3/myext3.ko
此时,也可以运行命令 ls /lib/modules/ 来查看相应的模块
myext3.ko在/lib/modules/2.6.10-ac12/kernel/fs/myext3/目录下
5. make install
notes1:也可根据自己的需要来修改myext3,比如删除某些不需要的功能,增加某些新的功能等。
notes2:以上这些命令皆在 /usr/src/linux-2.6.10目录下运行
四、增加分区,创建相应挂载点来使用myext3文件系统
1. 先用fdisk创建分区,例如创建/dev/sda6
2. mkfs.ext3 /dev/sda6
把/dev/sda6格式化成ext3文件系统。从理论上看,myext3和ext3是完全一致的,当然除了名字外。在第
4步,我们可以试着用myext3文件系统格式去mount我们刚刚做出来的ext3文件系统。
3. modprobe myext3
装载myext3模块
4. mount -t myext3 /dev/sda6 /mnt/test
将 /dev/sda6 挂装(mount) 到 /mnt/test目录下。请注意,我们用的参数是 -t myext3,也就是用myext3
文件系统格式去mount的,发现这样mount是可以的,也就证明了新内核已经支持我们的新文件系统
myext3。
此时,在系统的其他地方都是用的linux默认的ext3文件系统。在/mnt/test目录下用的就是myext3。以后我们可以根据自己的需要来修改myext3。
notes:修改myext3模块后,可以运行如下命令来重新编译,以测试新的myext3的功能。
cd /usr/src/linux-2.6.10
make modules
lsmod //可以看到myext3 Module Used by 1
umount /mnt/test/
lsmod //此时可以看到myext3 Module Used by 0,这样就可以删除myext3 Module了
rmmod myext3 //删除myext3 Module
insmod fs/myext3/myext3.ko //加载新的myext3 Module
lsmod //此时可以看到myext3 Module。
mount -t myext3 /dev/sda6 /mnt/test
Notes:要想在应用层使用有关扩展属性的命令和系统调用,mount时需要加上user_xattr选项,
即mount -t ext3audit -o user_xattr /dev/sda6 /mnt/testaudit
然后就可进入/mnt/test目录下来测试我们修改的myext3文件系统。
gongji110 于 2008-04-16 13:24:42发表:
不知道为什么要添加myet3文件系统,但是还是支持你一下。
aliang9 于 2008-04-16 12:19:55发表:
请问接下来怎么样才能把某个分区格式化为myext3呢?