ntfs在android平台上的移植

时间:2022-11-14 04:01:20

/*****************************************************************

*version:android4.2

*author:冷雨

*嵌入式开发群:122879839

*****************************************************************/

大家可能会发现androidntfs支持的并不是很好,在androidshell下面(adb或者串口),我们可以使用mountntfs的硬盘挂载到挂载点上。可是如果我们进入挂载点之后,对ntfs的盘进行一些读写操作的时候,会发现此时我们的盘是read-only的,也就是说在默认的情况下我们对ntfs的支持是可读不可写。

在遇到这种情况的时候,我们一般的做法是移植一个ntfsandroid上面,当然最简单的方法是使用fuse类的文件系统,这样我们只需要在kernel上让kernel支持fuse就可以,剩下在用户空间跑几个应用程序就OK了。

如果在网上查找这方面的资料会发现移植最多的是一款开源软件NTFS-3G,其代码在官网上可以下载到。由于android支持的底层库和标准linux支持的底层库并不完全一致,所以如果单单把NTFS-3G源代码放到androidbsp代码树里面去编译的话需要修改很多地方,这包括android编译的脚本Android.mk,因为库不同所产生的源码修改部分等。如果大家有充足时间的话可以慢慢的去移植。下面介绍另一种移植方法。

首先下载NTFS-3G源代码,如果是tgz格式的文件的话,使用tarxvfz xvfz.tgz解压,然后进入解压后的目录。

新建两个文件夹,buildinstall。其中build目录用于存放编译的中间文件,而install顾名思义用于存放install的文件。

建立完两个目录后进入build目录,执行如下命令。

../configure --prefix=/root/ntfs-3g_ntfsprogs-2013.1.13/install --host=arm-linux--enable-really-static

make

make install

解释一下,这里的prefix参数指明了我们执行make install之后将文件安装路径。host参数指明了我们编译的平台,其实这里也就是我们的交叉编译器了。enable-really-static参数指明了我们需要静态编译。当然前提是我们能够找到本地的arm-linux交叉编译环境。

这样我们就可以在我们的本地完成整个ntfs-3g的编译过程(静态编译),之所以强调是静态编译是因为我们这里没有使用android bsp的编译环境,如果不是静态编译的话在目标平台上并不能执行。

在我们执行完configure之后便会在我们的build目录下面生成对应的Makefile,也就可以执行我们对应的makemakeinstall命令。这样执行后我们所需要的文件便会放置在install目录下面。接下来将我们生成的文件放到android bsp环境下编译生成的system对应的目录下面就可以了。这样我们就可以在使用的时候直接去调用那些文件。

这样编译将androidbsp环境和ntfs-3g的源码环境分开了,几乎不用怎么修改代码,适用于快速开发的场合,但是需要注意的是,这样编译出来的文件明显的大了很多,因为在编译的时候我们制定了static静态编译选项。