在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统

在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统

        • 一、写在前面
        • 二、Ubuntu下挂载NTFS文件系统
        • 三、i.mx6ull开发板挂载NTFS文件系统

一、写在前面

什么是NTFS文件系统呢?引自百科的回答如下

NTFS(New Technology File System)是Windows NT内核的系列操作系统支持的、
一个特别为网络和磁盘配额、文件加密等管理安全特性设计的磁盘格式,提供长文件名、
数据保护和恢复,能通过目录 和文件许可实现安全性,并支持跨越分区

暂且知道这个fs是在window下使用的,但是Linux系统并不支持该格式的fs。

那有什么方法支持NTFS呢? 安装NTFS-3G,它的概念如下
NTFS-3G is an open source Linux driver for 32-bit and 64-bit hardware platforms, 
providing users with support for mounting and writing on hard disk drives formatted
with the proprietary NTFS filesystem used on Microsoft Windows operating systems.
直译来说,NTFS-3G是适用于32位和64位硬件平台的开源Linux驱动程序,
为用户提供有关在格式化的硬盘驱动器上安装和写入的支持
与Microsoft Windows操作系统上使用的专有NTFS文件系统一起使用。

因此,需事先准备NTFS-3G源码包,可执行如下命令获取
wget  https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2017.3.23.tgz

如果网速慢,我已下载到网盘,如下入口(仅1.2M)
链接:https://pan.baidu.com/s/1ITWM_xTgUIMZuYbKPyzQJA 
提取码:fyh2 
获得源码并解压后,  按下面三步安装(来自官网:https://www.tuxera.com/community/open-source-ntfs-3g/)
安装成功的标志: ntfs [Ta键] 能自动补全为  ntfs-3g  

在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统_第1张图片

二、Ubuntu下挂载NTFS文件系统

一图胜千言,下面看图说话。

在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统_第2张图片
在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统_第3张图片
在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统_第4张图片
在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统_第5张图片
在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统_第6张图片
umount /mnt/window
在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统_第7张图片
在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统_第8张图片

总结来说,在 "Linux下" 挂载NTFS的设备,可用如下命令(前提是安装了ntfs-3g,尤其注意: 事先安装了gcc和libc-dev库)
ntfs-3g  /dev/sdb4  /mnt/window
sudo mount -t "ntfs"  /dev/sdb4  /mnt/window
sudo mount -t  ntfs-3g  /dev/sdb4   /mnt/window
注意:/dev/sdb4只是例子,具体先dmesg | tail 查看你的设备在哪个设备节点。 
另外,/mnt/window 的window目录是提前建好的,建议在/mnt先建个目录,而不是直接挂载到 /mnt
此外,拔掉设备前,良好的习惯是 sudo umount  /mnt/window  先卸载。

拓展:如果文件系统类型是 FAT32 ,不需安装ntfs-3g,直接如下命令挂载就可以。
sudo  mount -t  vfat   /dev/xxx   /mnt/xxxx     

如果要开机自动挂载你的设备,可编辑/etc/fstab ,添加一行:
/dev/sdb4         /mnt/window     ntfs-3g silent,umask=0,locale=zh_CN.utf8 0 0
ntfs-3g后面一堆啥东西呢?一些编码设置而已,可以不用管,像下面这样default即可
/dev/sdb4        /mnt/windows   ntfs-3g defaults 0 0
这些是怎么知道的呢?可看ntfs-3g的源码包,根目录下有个README文件,里面有说明。

OK,讲解完在Linux下的挂载,麻烦在于开发板如何挂载NTFS类型的设备呢?
因为 ntfs-3g有个前提条件,需要基本的开发环境: gcc  和 libc-dev库

三、i.mx6ull开发板挂载NTFS文件系统

之前有考虑过在i.mx6ull开发板安装gcc和 libc-dev ,但是太麻烦了。索性采取交叉编译 ntfs-3g . 如下所示

在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统_第9张图片

备注:ABI,application binary interface (ABI),应用程序二进制接口。EABI中的E,表示“Embedded”,即嵌入式应用二进制接口。
配置之后,执行make   && make install  , 但make install 错误,需要sudo make  install , 但是仍有错误,看下图

在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统_第10张图片

错误原因在于,sudo make install 临时切换到root,使用的是root的工作环境,而不是 book 用户的。
解决办法是 su 切换到root 用户,再手动export 导入 交叉工具链的 路径。再执行 make install 即可,看下图

在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统_第11张图片
在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统_第12张图片

然后,执行make install 就成功了。
到配置时指定的 --exec-prefix目录,可以看到有 bin  sbin  lib 目录,然后把lib的所有动态库拷贝到开发板的/lib
把 bin 下的 ntfs-3g 拷贝到  开发板的 /bin 。
最后执行挂载命令,成功挂载,如下图

在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统_第13张图片
在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统_第14张图片
还剩下中文乱码问题,目前搞不定。搞定了再来更新博文。
目前已确定,mount 命令是指向 busybox的,这可能需重新修改busybox源码,再重新编译。
网上我找到了这一解法的博文,可参考:https://blog.csdn.net/zhen_song/article/details/79020502
这些麻烦活我就不尝试了,读者可试一下。 (赶作业去了,没时间,后面再更新)

此外,还有一种解决办法,就是 ntfs-3g  -locale=zh_CN.UTF-8 /dev/sda4  /mnt/window
但这个依赖安装了中文包zh_CN.UTF-8 ,执行时会报错找不到文件,如下

在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统_第15张图片

由于开发板不是debian系统的,没有apt包管理器,所有安装中文包很麻烦。
当然这种方法不一定成功,有待尝试验证。


OK,这篇博文解决了在Ubuntu 和 i.mx6ull开发板挂载NTFS文件系统的问题。但仍然留下 中文乱码 问题。
有知道怎么解决的小伙伴,可在评论区指点指点呀。 :)

你可能感兴趣的:(ARM裸机基础编程)