Chinaunix首页 | 论坛 | 博客
  • 博客访问: 433848
  • 博文数量: 53
  • 博客积分: 2746
  • 博客等级: 少校
  • 技术积分: 829
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-14 10:41
文章分类

全部博文(53)

文章存档

2016年(2)

2013年(1)

2012年(7)

2011年(10)

2010年(5)

2009年(20)

2008年(8)

我的朋友

分类: LINUX

2008-12-28 10:21:57

ARM Linux NTFS 文件系统读写

一、准备

 1、  module-init-tools-3.0.tar.bz2

 2、  ntfs-3g-1.2812.tgz

 3、  fuse-2.5.2.tar.gz

二、环境

  我的是在fedore 8,arm-linux-gcc-3.3.2。

  export PATH=/usr/local/arm/3.3.2/bin/:$PATH

  因为arm-linux kernel 我也是用arm-linux-gcc-3.3.2来编释的,使用中发现编释kernel和编释fuse- 

  2.5.2.tar.gz不一样的话,编释fuse-2.5.2.tar.gz出来的fuse.ko不能ismod或modprobe。

三、安装过程

  1、编释module-init-tools工具,后面要用到。

         tar xvjf  module-init-tools-3.0.tar.bz2

         ./configue CC=arm-linux-gcc –host=arm-linux –prefix=/usr/mod_init

         make install

         cp –fdr /usr/ntfs-g3  <到arm-linux 的/usr 目录下>

 

   2、编释ntfs-3g

         tar xvzf ntfs-3g-1.2812.tgz

         ./configue CC=arm-linux-gcc –host=arm-linux –prefix=/usr/ntfs-g3

         make install

         cp –fdr /usr/ntfs-g3 <到arm-linux 的/usr 目录下>

 

   3、编释fuse

         tar xvzf fuse-2.5.2.tar.gz

         ./configure CC=arm-linux-gcc --host=arm-linux --enable-kernel-module --with-kernel=/home/longjindong/single-flash-linux-2.6.15-8140

         make

         这里不要install..

         cp fuse.ko <到arm-linux 的/lib/modules/2.6.15/ 目录下,如果没有这个目录,那就

         mkdir –p /lib/modules/2.6.15/ >

四、使用

    面作了那么多,现在该开始到ARM里面使用了。

    1、到/usr/mod_init/sbin 运行depmod 生成fuse.ko相关依赖和配置文件。

         /usr/mod_init/sbin/ depmod fuse.ko

    2、插入ntfs格式的盘并用fdisk –l | grep NTFS 看此盘是哪个device.。 

      # fdisk -l | grep NTFS

      /dev/sdc1   1   19457   156288321   7  HPFS/NTFS

    3、  把fuse.ko装入内核

       modprobe fuse.ko  (试过,直接insmod /lib/modules/2.6.15/fuse.ko 也可以)

    4、  mount ntfs分区

       /usr/ntfs/bin/ntfs-3g /dev/sdc1 /mnt/ntfs  -o silent,umask=0

       好了,到/mnt下就可以读写ntfs了,但是不支持中文文件和目录,那是因为我的ARM linux里没安

    装配置loclae语言支持;如果你已经安装置了locale,那就用:

    /usr/ntfs/bin /ntfs-3g /dev/sdc1 /mnt/ntfs  -o silent,umask=0,locale=zh_CN.utf8

    就ok了。

五、问题

    1、由于ntfs-3g是install到一个文件夹然后才使用的,不像在x386上,不用配--prefix,所以在使

     用 中用如下命不起作用:

     #mount -t ntfs-3g /dev/sdc1 /mnt/ntfs (提示无法识别 ntfs-3g差数,但org上说可以这么用)

      这么问题我还没解决了,也许是我的方法有问题了,但是我还不知道怎么解决。

六、其它

    1、多国语言支持主要是靠locale.arm-linux-gcc 3.4.1中就包含了locale。其中arm-linux/lib中的

   gconv就是字体转化时候用到的库.我们把gconv文件夹copy到开发板文件系统/usr/lib下面.把 arm- 

   linux/share文件夹copy到文件系统/usr下面。把arm-linux/locale和localedef复制到/usr/bin下面.

   通过localedef设置相应字体,将会在/usr/lib/locale下面生成locale-archive.这样就可以实现对不同

   语言的支持.
      不过整个移植比较大,根据不同需求裁减gconv中的库文件 和i18n,以及locale,这样就能减少很大

   空间。

 

     2 、编译某个内核模块
      编内核难免有的时候忘记了配置某个模块,导致该模块不可用,那是不是必须重新配置内核并重新

   编译呢,答案是否定的,完全可以单独编译某一个内核模块。

   我在使用最新的fuse-2.8.0-pre1时,发现其中已经没有fuse模块了,该项目的内核模块看来已经彻底

   移进内核源码中了,而我当前的内核在编译时并没有选中fuse模块,于是就产生了本文一开始的需求。


   定位fuse模块内核代码:/root/linux-2.6.23/fs/fuse/*.c
   查看其下的Makefile:
   #
   # Makefile for the FUSE filesystem.
   #
   obj-$(CONFIG_FUSE_FS) += fuse.o
   fuse-objs := dev.o dir.o file.o inode.o control.o

   进行如下操作即可单独编译fuse模块:
   [root@localhost ~]# make CONFIG_FUSE_FS=m -C /root/linux-2.6.23 M=/root/linux- 

    2.6.23/fs/fuse modules

   然后手动将生成的fuse.ko拷贝到/lib/modules/2.6.23/kernel/fs/fuse/fuse.ko
   运行depmod -a重新配置依赖关系,以后就可以通过modprobe fuse来加载fuse模块了。

 

   类似其他可编译成模块的内核代码都可以这样单独编译

     这两段是从网上copy过来的。

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

long_ming2009-01-07 11:41:38

with-kernel后面是开发板内核源码的路径,没错。

etrock2009-01-06 15:16:43

帮忙看一下了~~~ [root@MGB kernel]# ./configure CC=mipsel-linux-gcc --host=mipsel-linux --enable-kernel-module --with-kernel=/NFS/STB/PR12/stb225/build_generic/packages/linux-2.6.24_nxp/ configure: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used. checking for a BSD-compatible install... /usr/bin/install -c checking kernel source directory... /NFS/STB/PR12/stb225/build_generic/packages/linux-2.6.24_nxp/ chec

etrock2009-01-06 15:14:22

兄弟可以把FUSE那里写详细点吗? 那个with-kernel后面是那里路径啊,是开发板内核源码的路径吗? 我指定了我开发板源码的路径,结果一make就挂了~~~