长话短说,之前已经测试过很多个ntfs-3g的版本,包括内核自带的fuse驱动,另外又下载2.6.0的fuse,都一直都出现一个问题,就是挂载上,在读的时候会卡掉,就是Read函数进入长睡眠不返回.这种情况也不是100%会出现,偶尔一两次还是能成功操作的.不断换版本搞了两天还是无果.也考虑过到是否fuse版本太低的问题,但是时间问题也没有去仔细深入用户文件系统这一块了.后来改为用ntfsprogs的ntfsmout,问题才解决.下面是简单的过程记录.
所需软件包:
> <fuse.ko> > ./configure CC=/home/dara/crosstool/gcc-3.4.4-glibc-2.3.5/arm-linux/bin/arm-linux-gcc --host=arm-linux --enable-kernel-module --with-kernel=/home/dara/wonhawk/arm-linux-2.6_1.3/linux-2.6.14-fa
> <ntfsmount,libntfs.so.10> > ./configure --host=arm-linux --disable-gnome-vfs --enable-ntfsmount --enable-fuse-module --prefix=/home/dara/ntfs3g/ntfs3g --exec-prefix=/home/dara/ntfs3g/ntfs3g CC=/home/dara/crosstool/gcc-3.4.4-glibc-2.3.5/arm-linux/bin/arm-linux-gcc AR=/home/dara/crosstool/gcc-3.4.4-glibc-2.3.5/arm-linux/bin/arm-linux-ar
> <libfuse.so.2> > ./configure --host=arm-linux CC=/home/dara/crosstool/gcc-3.4.4-glibc-2.3.5/arm-linux/bin/arm-linux-gcc AR=/home/dara/crosstool/gcc-3.4.4-glibc-2.3.5/arm-linux/bin/arm-linux-ar
arm的2.6.14内核的flush_cache_page函数是内部链接的,所以无法使用其连接到fuse.ko.解决办法是:从内
核拷一份出来直接内部实现即可.
kernel/dev.c:
+ static inline void
+ fflush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsigned long pfn)
+ {
+ if (cpu_isset(smp_processor_id(), vma->vm_mm->cpu_vm_mask)) {
+ unsigned long addr = user_addr & PAGE_MASK;
+ __cpuc_flush_user_range(addr, addr + PAGE_SIZE, vma->vm_flags);
+ }
+ }
#ifdef DCACHE_BUG
- flush_cache_page(vma, cs->addr, page_to_pfn(cs->pg));
+ fflush_cache_page(vma, cs->addr, page_to_pfn(cs->pg));
#endif
这样即可编译出fuse.ko驱动.
注意:在配置fuse-2.8.0的时候不需要指定其安装目录,这样它会默认将编译好的库和头文件安装到系统默认路径,以此支持ntfsprogs-2.0.0的编译.
OK,得到编译好的几个文件后,首先需要将两个库文件拷贝到/lib下,然后安装fuse.ko驱动.最后就可以挂在了,但是,挂载时需要使用参数-o force.
例如:
#./ntfsmount -o force /dev/sda1 /mnt/hddisk/video
刚也顺手测试了一下写入的速度,我挂载的是500G的SATA移动硬盘,使用: time dd if=/dev/zero of=test.gz bs=10M count=50 写入500M的结果是用了125秒,刚好是4M/S的写入速度,下一步得继续测试其稳定性和兼容性.
阅读(3888) | 评论(3) | 转发(0) |