使嵌入式Linux支持exFAT和NTFS文件系统,U盘自动挂载

20 篇文章 1 订阅
10 篇文章 0 订阅
文章详细介绍了如何在Linux系统中添加对exFAT和NTFS文件系统的支持,包括源码下载、内核配置、编译以及ntfs-3g的安装。同时,提供了USB设备的自动挂载和卸载脚本,以及相应的udev规则设置,以实现U盘的自动管理。
摘要由CSDN通过智能技术生成

使Linux支持exFAT和NTFS文件系统,U盘自动挂载

查看系统支持什么文件系统

cat /proc/filesystems

nodev   sysfs
nodev   rootfs
nodev   ramfs
nodev   bdev
nodev   proc
nodev   cgroup
nodev   tmpfs
nodev   devtmpfs
nodev   configfs
nodev   debugfs
nodev   securityfs
nodev   sockfs
nodev   pipefs
nodev   rpc_pipefs
nodev   devpts
        ext3
        ext2
        ext4
        vfat
        msdos
        exfat   #添加成功
nodev   nfs
nodev   nfs4
        ntfs	#需要在内核勾选
nodev   jffs2
nodev   autofs
        fuseblk
nodev   fuse
nodev   fusectl
nodev   ubifs

exFAT

源码下载

exfat-nofuse

git clone https://github.com/dorimanx/exfat-nofuse.git

编译

拷贝源码到内核/fs/下,并改名为exfat

cd [linux]
cp -rvf exfat-nofuse [linux]/fs/exfat

修改[linux]/fs/Kconfig

menu "DOS/FAT/NT Filesystems"

  source "fs/fat/Kconfig"
 +source "fs/exfat/Kconfig"   #添加
  source "fs/ntfs/Kconfig"
  endmenu

修改[linux]/fs/Makefile

  obj-$(CONFIG_FAT_FS)    += fat/
 +obj-$(CONFIG_EXFAT_FS)  += exfat/   #添加
  obj-$(CONFIG_BFS_FS)    += bfs/

添加相应配置

cd [linux]
make menuconfig

#File systems > DOS/FAT/NT check exfat as MODULE (M) (437) Default codepage for exFAT (utf8) Default iocharset for exFAT
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_EXFAT_FS=y
CONFIG_EXFAT_DISCARD=y
CONFIG_EXFAT_DELAYED_SYNC=y
CONFIG_EXFAT_KERNEL_DEBUG=y
CONFIG_EXFAT_DEBUG_MSG=y
CONFIG_EXFAT_DEFAULT_CODEPAGE=437
CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"
CONFIG_NTFS_FS=y
CONFIG_NTFS_DEBUG=y
CONFIG_NTFS_RW=y


开始编译

make -j8

把内核烧录挂载个exFAT U盘试试成功没。

NTFS

添加相应配置

cd [linux]
make menuconfig

CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_NTFS_FS=y
CONFIG_NTFS_DEBUG=y
CONFIG_NTFS_RW=y


ntfs-3g

下载源码

ntfs-3g

配置
./configure CC=交叉编译工具链 -host=arm-linux --prefix=`pwd`/_install --exec-prefix=`pwd`/_install/usr
编译和安装
make -j8 && make install

# _install/usr/bin/下的ntfsinfo和ntfs-3g放到板子里,ntfsinfo判断是否为NTFS文件系统,ntfs-3g用来挂载NTFS
ntfsinfo -m /dev/sdc1
ntfs-3g /dev/sdc1 /mnt

USB自动挂载

挂载脚本

mount-usb.sh

#!/bin/sh
count=$(ls /dev/$1* 2>/dev/null | wc -l)
if [ $count -gt 1 ];then
  exit 0;
fi

mkdir /mnt/$1

if ntfsinfo -m /dev/$1 >/dev/null 2>&1; then
  ntfs-3g /dev/$1 /mnt/$1
else
  mount /dev/$1 /mnt/$1
fi
#killall -SIGUSR1 发送信号给应用程序
sync

fi

卸载脚本

umount-usb.sh

count=$(ls /dev/$1* 2>/dev/null | wc -l)
if [ $count -gt 1 ];then
  exit 0;
fi

sync
umount /mnt/$1
#killall -SIGUSR1 发送信号给应用程序

udev规则

/etc/udev/rules.d/12-usbsd-mount.rules

#usb自动挂载
ACTION!="add", GOTO="farsight_mount"
KERNEL=="sd[a-z][0-9]", RUN+="/etc/udev/mount-usb.sh %k"
KERNEL=="sd[a-z]", RUN+="/etc/udev/mount-usb.sh %k"
LABEL="farsight_mount"

#usb卸载
ACTION!="remove", GOTO="farsight_umount"
KERNEL=="sd[a-z][0-9]", RUN+="/etc/udev/umount-usb.sh %k"
KERNEL=="sd[a-z]", RUN+="/etc/udev/umount-usb.sh %k"
LABEL="farsight_umount"
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

omnibots

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值