Chinaunix首页 | 论坛 | 博客
  • 博客访问: 437376
  • 博文数量: 123
  • 博客积分: 2686
  • 博客等级: 少校
  • 技术积分: 1349
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-23 22:11
文章分类
文章存档

2012年(3)

2011年(10)

2010年(100)

2009年(10)

我的朋友

分类: LINUX

2010-01-09 19:30:51

 
-----------------------------------------------------------------------
内核版本:linux-2.6.32.2
添加一个ext2文件系统,newext2.
-----------------------------------------------------------------------
STEP 1:首先,copy ext2文件系统的所有代码。与ext2密切相关的代码分为2部分,一部分是/fs/ext2/目
录下的文件,另一部分是include/linux/ext2_fs.h和include/linux/ext2_fs_sb.h 。
 

cd /usr/src/linux

 

cd fs

 

cp R ext2 newext2

 

cd ../include/linux

 

cp ext2_fs.h newext2_fs.h

 

cp ext2_fs_sb.h newext2_fs_sb.h

 

然后,进入/fs/newext2/目录下,把文件名为ext2的改成newext2.源代码复制完毕。

cd /fs/newext2
mv ext2.h newext2.h


STEP 2:修改复制的源代码,因为我们添加的文件系统名叫newext2,那我们就得把添加的所有文件里面的所有 ext2 改成 newext2, EXT2 改成NEWEXT2.聪明的话,写个脚本文件,不过我不会,只好用笨方法,用gedit 打开文件,用里面的替换功能,替换时注意大小写,并且是我们添加的所有文件都替换。
至此,newext2的代码全部准备好了。剩下的就是 newext2这个整体与周围环境的关系。
 
STEP 3:外界感知newext2的存在是通过文件/fs/Kconfig和/fs/Makefile.Kconfig文件是make menuconfig时要读取的文件,读取的顺序是按照递归的方式进行的。所有,我们添加的文件系统newext2能够在配置时显示出来,就要在/fs/Kconfig里面把newext2/Kconfig包含进来。所以,在/fs/Kconfig里面添加:
 

source "fs/newext2/Kconfig"

当然,要想newext2能够被编译器找到,那就得修改newext2目录下文件的上一个目录,即/fs.修改/fs/Makefile ,最好在靠近ext2处添加 :

obj-$(CONFIG_NEWEXT2_FS)    += newext2/

至此,newext2能够被外界感知存在,但是还与外界存在兼容问题,就要先make,哪里有错误就到哪里改,使用source insight最方便。

STEP 4:回到内核代码根目录,执行make menuconfig.在进入图形配置界面后,你会找不到newext2的名字,那么马上就相当这是/fs/newext2/Kconfig出了问题,没有显示newext2这个名字。所有把/fs/newext2/Kconfig里面的每个宏下面有个boot " --- ",这个用于显示在配置界面上面。把Ext2改成NewExt2就可以了。

bool "NewExt2 Security Labels"

配置时,把NewExt2文件系统选上。
 
STEP 5: make all
 
STEP 6: 改错

第1个错误:
fs/newext2/balloc.c: 在函数‘newext2_valid_block_bitmap’中:
fs/newext2/balloc.c:87: 错误:隐式声明函数‘newext2_test_bit’
fs/newext2/balloc.c:101: 错误:隐式声明函数‘newext2_find_next_zero_bit’
fs/newext2/balloc.c: 在函数‘newext2_free_blocks’中:
fs/newext2/balloc.c:549: 错误:隐式声明函数‘newext2_clear_bit_atomic’
fs/newext2/balloc.c: 在函数‘newext2_try_to_allocate’中:
fs/newext2/balloc.c:724: 错误:隐式声明函数‘newext2_set_bit_atomic’
make[2]: *** [fs/newext2/balloc.o] 错误 1
make[1]: *** [fs/newext2] 错误 2
make: *** [fs] 错误 2
修改:在include/asm-generic/bitops/Ext2-non-atomic.h,加入:

//*******************************add****************************
#define newext2_set_bit(nr,addr)    \
    generic___test_and_set_le_bit((nr),(unsigned long *)(addr))
#define newext2_clear_bit(nr,addr)    \
    generic___test_and_clear_le_bit((nr),(unsigned long *)(addr))

#define newext2_test_bit(nr,addr)    \
    generic_test_le_bit((nr),(unsigned long *)(addr))
#define newext2_find_first_zero_bit(addr, size) \
    generic_find_first_zero_le_bit((unsigned long *)(addr), (size))
#define newext2_find_next_zero_bit(addr, size, off) \
    generic_find_next_zero_le_bit((unsigned long *)(addr), (size), (off))
#define newext2_find_next_bit(addr, size, off) \
    generic_find_next_le_bit((unsigned long *)(addr), (size), (off))
//*******************************add****************************



第2错误:

fs/newext2/balloc.c: 在函数‘newext2_free_blocks’中:
fs/newext2/balloc.c:549: 错误:隐式声明函数‘newext2_clear_bit_atomic’
fs/newext2/balloc.c: 在函数‘newext2_try_to_allocate’中:
fs/newext2/balloc.c:724: 错误:隐式声明函数‘newext2_set_bit_atomic’
make[2]: *** [fs/newext2/balloc.o] 错误 1
make[1]: *** [fs/newext2] 错误 2
make: *** [fs] 错误 2


在/arch/x86/include/asm/bitops.h,末加入:

//************************add*********************************
#define newext2_set_bit_atomic(lock, nr, addr)            \
    test_and_set_bit((nr), (unsigned long *)(addr))
#define newext2_clear_bit_atomic(lock, nr, addr)            \
    test_and_clear_bit((nr), (unsigned long *)(addr))
//************************add*********************************


第3个错误:是NEWEXT2_SUPER_MAGIC没有声明。

在include/linux/magic.h,加入:

#define NEWEXT2_SUPER_MAGIC    0xEF53

 

STEP 7:继续make all,make modules_install,make install;选择我们编译的内核重新启动;
 
STEP 8:查看我们的文件系统是否被加载。
 

cat /proc/filesystems | grep newext2


STEP 9:如果step 8没有看到newext2,多半是你在配置内核时,把newext2以模块的形式编译了。不过可以,手动添加:

modprode newext2


 

至此,自己的文件系统添加成功.可惜cublog不能发图片.

阅读(1761) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~