开源软件ntfs-3g提供了一种在应用层实现ntfs读写的功能,大致实现原理如下:
3.1)ntfs u盘自动挂载:2种方式
一是通过fdisk -l检查u盘格式是否为ntfs,直接调用ntfs-3g dev-path mountdir-path(或mount ntfs-3g dev-path mountdir-path,此种方式需要在busybox中启用ENABLE_FEATURE_MOUNT_HELPERS宏并且存在mount.ntfs-3g可执行文件,一般直接链接到ntfs-3g)
二是直接调用mount dev-path mountdir-path(系统自动识别到ntfs格式,同时需要在busybox中启用ENABLE_FEATURE_MOUNT_HELPERS宏并且存在mount.ntfs可执行文件,一般直接链接到ntfs-3g)
3.2)ntfs文件读写
需要解决2个问题:
一是ntfs格式设备的读写 - ntfs-3g本身支持对ntfs格式的dev设备直接读写
二是用户读写文件到ntfs-3g文件系统的映射 - ntfs-3g间接通过fuse文件系统实现,即当用户读写一个文件时:
第一阶段ntfs-3g收到用户读写操作:vfs(kernel) -> fuse(kernel) -> libfuse(userspace 通过套接字实现通信) -> ntfs-3g(userspace)
第二阶段ntfs-3g真实读写数据操作:ntfs-3g(userspace) -> dev读写(kernel) -> ntfs-3g(userspace) ->
第三阶段ntfs-3g返回读写数据用户:ntfs-3g(userspace) -> libfuse(userspace 通过套接字实现通信) -> fuse(kernel) -> vfs(kernel)
详细可参考以下资料:
ntfs-3g:https://wiki.archlinux.org/index.php/NTFS-3G_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
fuse:https://blog.csdn.net/ty_laurel/article/details/51685193
mount:
https://blog.csdn.net/bingyu880101/article/details/50481507
https://blog.csdn.net/zr_lang/article/details/39963253