-NTFS-3G完整移植+中文支持+自动挂载
1内核裁剪
1.1进入内核源码目录下:
$make menuconfig
Linux/arm 2.6.37 Kernel Configuration
File systems ---> //NTFS-3G需要依赖用户空间文件系统FUSE的支持
<*> FUSE (Filesystem in Userspace) support
<*>Character device in Userspace support
-*- Native language support ---> //默认语言配置为utf8,并包含一些其他常用语言的编码
(utf8) Default NLS Option
<*> Codepage 437 (United States, Canada)
<*> Simplified Chinese charset (CP936, GB2312)
<*> ASCII (United States)
<*> NLS ISO 8859-1 (Latin 1; Western European Languages)
<*> NLS UTF-8
DOS/FAT/NT Filesystems ---> //这里的NTFS是只读的,不支持写,我们使用NTFS-3G软件包,并且支持读写,所以这里不配置。
< > NTFS file system support
1.2编译生成新的uImage,放入提供tftp服务文件夹下;
$make uImage
$cp arch/arm/boot/uImage /tftpboot
2 NTFS-3G完整移植
NTFS-3G使用的是时间距离较近的版本,优化了内存占用过多的问题:
2.1解压:
$tar xvf ntfs-3g_ntfsprogs-2016.2.22
2.2进入ntfs-3g源码目录下:
$cd ntfs-3g_ntfsprogs-2016.2.22
2.3编译前配置
$ ./configure --build=i386 --host=arm-arago-linux-gnueabi --prefix=/song/usr --exec-prefix=/song
--build=i386 编译的主机;
--host=arm-arago-linux-gnueabi编译出来的二进制程序所执行的主机;
/song/usr和/song 目录为生成的文件存放位置,可自己定义;
2.4然后就是make && make install;稍等片刻,就可以了。
$make && make install
2.5 /song/bin文件夹下的ntfsfix、ntfs-3g拷贝到nfs文件系统的/bin目录下:
$cp ntfsfix ntfs-3g /DVRRDK_04.00.00.03/target/rfs_816x/bin/
ntfsfix //ntfs硬盘修复工具
ntfs-3g //ntfs硬盘挂载工具
2.6 /song/sbin文件夹下的mkntfs拷贝到nfs文件系统的/sbin目录下:
$cp mkntfs /DVRRDK_04.00.00.03/target/rfs_816x/bin/
mkntfs //格式化分区工具
2.7 /song/lib文件夹下的libntfs-3g.so、libntfs-3g.so.87、libntfs-3g.so.87.0.0
拷贝到nfs文件系统的/lib目录下:
$cp libntfs-3g.so libntfs-3g.so.87 libntfs-3g.so.87.0.0 /DVRRDK_04.00.00.03/target/rfs_816x/bin/
libntfs-3g.so libntfs-3g.so.87 libntfs-3g.so.87.0.0 //动态库
暂时只用到挂载时的ntfs-3g和格式化的mkntfs以及ntfsfix三个工具,注意ntfs-3g需要动态库libntfs-3g.so.87,需要把lib夹中的so一同一起移植过去。
2.8好了,到此ok,我测试了一下:
[root@JHI-SXY:/media]#: ntfs-3g
ntfs-3g: No device is specified.
ntfs-3g 2016.2.22 integrated FUSE 27 - Third Generation NTFS Driver
Configuration type 1, XATTRS are on, POSIX ACLS are off
Copyright (C) 2005-2007 Yura Pakhuchiy
Copyright (C) 2006-2009 Szabolcs Szakacsits
Copyright (C) 2007-2016 Jean-Pierre Andre
Copyright (C) 2009 Erik Larsson
Usage: ntfs-3g [-o option[,...]] <device|image_file> <mount_point>
Options: ro (read-only mount), windows_names, uid=, gid=,
umask=, fmask=, dmask=, streams_interface=.
Please see the details in the manual (type: man ntfs-3g).
Example: ntfs-3g /dev/sda1 /mnt/windows
News, support and information: http://tuxera.com
2.9 ntfs-3g可以显示版本,再进行挂载测试:
#ntfs-3g /dev/sda1 /mnt //可以正常挂载,但是不支持中文目录,在后面进行了解决;
#mount -t ntfs-3g /dev/sda1 /mnt //不可以使用,ntfs-3g不是ntfs,无法识别,试了好多方法还是不行,原因可能是busybox的mount的缺陷吧,放弃;最后决定自动挂载时使用ntfs-3g,心累!。
3中文支持
3.1进入Busybox源码目录下,busybox版本是1.19.4
$cd libbb/
$vi printable_string.c
printable_string.c源码修改了红色加粗的代码:
中文是“?”的原因:大于0x7F的字符直接被break掉,或者直接被“?”代替了。所以就算是linux内核设置了支持中文,也是无法显示出来的,被“?”代替了。
1. const char* FAST_FUNC printable_string(uni_stat_t *stats, const char *str)
2. {
3. static char *saved[4];
4. static unsigned cur_saved; /* = 0 */
5.
6. char *dst;
7. const char *s;
8.
9. s = str;
10.