首先安装BananaLinux多说了,官方文档照着做就行了,装好后记得bananian-config一下。
系统的安装与优化下次再总结性的在一个帖子里讲。今天先谈增加Exfat驱动支持的问题。
总体来说exFat优点是:
1.Windows支持(WinCe支持,WinXP需要补丁支持,Win7以上原生支持)。
2.更适合U盘系统,FAT32不支持4G以上大文件,NTFS的日志系统太伤存储了,所以对于64G以上的U盘,微软都是推荐exFat系统的。
3.简单耐用,根据我在PPC上的测试,exFat可以高速写文件的过程中经历几千次随机掉电后正常使用,即使出现单个文件故障也不影响分区的挂载和其他目录的使用;Ext3可以经历几百次,出现故障后还是要fsck来修复;NTFS经历百十次就不错了。
Exfat驱动是三星贡献的,在GitHub上有,但是由于微软的版权因素,一般Linux是不带这个驱动的。
尝试一下:
root@bananapi /# mount -t exfat /dev/sda1 /mnt
mount: unknown filesystem type 'exfat'
BananaLinux不支持。
编译驱动前,先要安装好gcc,linux-header之类的一堆包,这里把源码附上来:
这里要吐槽一下Banana的源实在是太慢了。
还是把编译好的文件也附上来把。
PS:改文件来编译过程中,可能反复修改,截图太麻烦,所以下面都是复制SecureCRT的日志来说明。
下载好驱动源码就可以编译了,进入驱动目录Make
root@bananapi /home/exfat/driver # make
make -C /lib/modules/3.4.104-bananian/build M=/home/exfat/driver modules
make[1]: Entering directory `/usr/src/linux-headers-3.4.104-bananian'
CC [M] /home/exfat/driver/exfat.o
CC [M] /home/exfat/driver/exfat_api.o
CC [M] /home/exfat/driver/exfat_blkdev.o
CC [M] /home/exfat/driver/exfat_cache.o
CC [M] /home/exfat/driver/exfat_data.o
CC [M] /home/exfat/driver/exfat_global.o
CC [M] /home/exfat/driver/exfat_nls.o
CC [M] /home/exfat/driver/exfat_oal.o
CC [M] /home/exfat/driver/exfat_upcase.o
CC [M] /home/exfat/driver/exfat_super.o
LD [M] /home/exfat/driver/exfat_core.o
LD [M] /home/exfat/driver/exfat_fs.o
Building modules, stage 2.
MODPOST 2 modules
CC /home/exfat/driver/exfat_core.mod.o
LD [M] /home/exfat/driver/exfat_core.ko
CC /home/exfat/driver/exfat_fs.mod.o
LD [M] /home/exfat/driver/exfat_fs.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.4.104-bananian'
make 26.02s user 2.73s system 91% cpu 31.366 total
root@bananapi /home/exfat/driver #
在make install就好了。
接下来是加载驱动
root@bananapi / # modprobe exfat_core
root@bananapi / # modprobe exfat_fs
查看系统装载的驱动是否成功
root@bananapi ~ # lsmod
Module Size Used by
cpufreq_conservative 5966 0
cpufreq_powersave 1197 0
cpufreq_userspace 3294 0
cpufreq_stats 5901 0
exfat_fs 18469 0
exfat_core 81817 1 exfat_fs
ap6210 584108 0
cfg80211 173441 1 ap6210
8021q 18594 0
garp 6114 1 8021q
stp 1993 1 garp
llc 5491 2 stp,garp
如果希望在系统启动时自动加载驱动就需要
root@bananapi / # vi /etc/modules
在其中添加
exfat_core
exfat_fs
接下来就可以挂载U盘(事先用Windows格式化成exFat分区)
root@bananapi ~ # mount -t exfat /dev/sda1 /mnt :(
root@bananapi ~ # df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 3.7G 1.8G 1.7G 52% /
/dev/root 3.7G 1.8G 1.7G 52% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 98M 1.2M 96M 2% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 195M 0 195M 0% /run/shm
/dev/sda1 3.7G 96K 3.7G 1% /mnt
挂载成功,容量3.7G,那么再来哥速度测试。
root@bananapi /mnt # dd if=/dev/zero of=test.dat bs=1024 count=100k
102400+0 records in
102400+0 records out
104857600 bytes (105 MB) copied, 18.6473 s, 5.6 MB/s
本地读写速度5.6M,还可以。
为了避免每次都要敲命令使用麻烦,还是使用udev进行自动挂载。
新建一个udev规则:
root@bananapi ~ # touch /etc/udev/rules.d/S10_USB.rules
内容如下:
KERNEL!="sd[a-z][0-9]", GOTO="Exit"
IPORT{program}="/sbin/blkid -o udev -p %N"
#Plug In
#fat32
ACTION=="add",ENV{ID_FS_TYPE}=="vfat", RUN+="/bin/mkdir -p /mnt/usb-%k", RUN+="/bin/mount -t vfat /dev/%k /mnt/usb-%k"
#exfat
ACTION=="add",ENV{ID_FS_TYPE}=="exfat", RUN+="/bin/mkdir -p /mnt/usb-%k", RUN+="/bin/mount -t exfat /dev/%k /mnt/usb-%k"
#ntfs
ACTION=="add",ENV{ID_FS_TYPE}=="ntfs", RUN+="/bin/mkdir -p /mnt/usb-%k", RUN+="/sbin/mount.ntfs-3g /dev/%k /mnt/usb-%k"
#Unplug
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /mnt/usb-%k", RUN+="/bin/rmdir /mnt/usb-%k"
#Exit
LABEL="Exit"
保存后,重新插入U盘,看一下系统日志。
root@bananapi /home # dmesg
[ 2274.638618] ehci_irq: port change detect
[ 2274.642658] usb 1-1: USB disconnect, device number 3
[ 2276.881770] ehci_irq: port change detect
[ 2277.157684] usb 1-1: new high-speed USB device number 4 using sw-ehci
[ 2277.415818] usb 1-1: New USB device found, idVendor=058f, idProduct=6387
[ 2277.436036] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2277.453216] usb 1-1: Product: CoolFlash
[ 2277.467183] usb 1-1: Manufacturer: Teclast
[ 2277.481371] usb 1-1: SerialNumber: 7532E5D0
[ 2277.499631] scsi5 : usb-storage 1-1:1.0
[ 2278.511952] scsi 5:0:0:0: Direct-Access Teclast CoolFlash 8.07 PQ: 0 ANSI: 2
[ 2278.536596] sd 5:0:0:0: Attached scsi generic sg0 type 0
[ 2278.543040] sd 5:0:0:0: [sda] 7720960 512-byte logical blocks: (3.95 GB/3.68 GiB)
[ 2278.547450] sd 5:0:0:0: [sda] Write Protect is off
[ 2278.556752] sd 5:0:0:0: [sda] Mode Sense: 03 00 00 00
[ 2278.561719] sd 5:0:0:0: [sda] No Caching mode page found
[ 2278.574223] sd 5:0:0:0: [sda] Assuming drive cache: write through
[ 2278.587101] sd 5:0:0:0: [sda] No Caching mode page found
[ 2278.592200] sd 5:0:0:0: [sda] Assuming drive cache: write through
[ 2278.629059] sda: sda1
[ 2278.663169] sd 5:0:0:0: [sda] No Caching mode page found
[ 2278.686744] sd 5:0:0:0: [sda] Assuming drive cache: write through
[ 2278.704728] sd 5:0:0:0: [sda] Attached SCSI removable disk
[ 2278.991840] [EXFAT] trying to mount...
[ 2279.026435] [EXFAT] mounted successfully
显然已经自动挂载成功。
如果有时候需要在Linux中进行格式化怎么办,mkfs命令是不起作用的,不急,接着编译格式化工具,这里的格式化工具就纯粹是个块设备的应用层读写工具了。
root@bananapi /home/exfat/tools # ./build.sh
rm -f *.o libexfat.a
gcc -D_FILE_OFFSET_BITS=64 -c cluster.c -o cluster.o
gcc -D_FILE_OFFSET_BITS=64 -c io.c -o io.o
gcc -D_FILE_OFFSET_BITS=64 -c log.c -o log.o
gcc -D_FILE_OFFSET_BITS=64 -c lookup.c -o lookup.o
gcc -D_FILE_OFFSET_BITS=64 -c mount.c -o mount.o
gcc -D_FILE_OFFSET_BITS=64 -c node.c -o node.o
gcc -D_FILE_OFFSET_BITS=64 -c time.c -o time.o
gcc -D_FILE_OFFSET_BITS=64 -c utf.c -o utf.o
gcc -D_FILE_OFFSET_BITS=64 -c utils.c -o utils.o
ar rc libexfat.a cluster.o io.o log.o lookup.o mount.o node.o time.o utf.o utils.o
ranlib libexfat.a
*********************************************************************************
rm -f *.o mkfs.exfat
gcc -D_FILE_OFFSET_BITS=64 -I../libexfat -c cbm.c -o cbm.o
gcc -D_FILE_OFFSET_BITS=64 -I../libexfat -c fat.c -o fat.o
gcc -D_FILE_OFFSET_BITS=64 -I../libexfat -c main.c -o main.o
gcc -D_FILE_OFFSET_BITS=64 -I../libexfat -c mkexfat.c -o mkexfat.o
gcc -D_FILE_OFFSET_BITS=64 -I../libexfat -c rootdir.c -o rootdir.o
gcc -D_FILE_OFFSET_BITS=64 -I../libexfat -c uct.c -o uct.o
gcc -D_FILE_OFFSET_BITS=64 -I../libexfat -c uctc.c -o uctc.o
gcc -D_FILE_OFFSET_BITS=64 -I../libexfat -c vbr.c -o vbr.o
gcc -o mkfs.exfat cbm.o fat.o main.o mkexfat.o rootdir.o uct.o uctc.o vbr.o -L../libexfat -lexfat
cp -f mkfs.exfat /usr/local/bin
*********************************************************************************
rm -f *.o fsck.exfat
gcc -D_FILE_OFFSET_BITS=64 -I../libexfat -c main.c -o main.o
gcc -o fsck.exfat main.o -L../libexfat -lexfat
cp -f fsck.exfat /usr/local/bin
*********************************************************************************
尝试使用编译好的工具格式化一下:
root@bananapi /# mkfs.exfat /dev/sda1
PARTITION [0,eb732400] SIZE 3 GB
get volume size 3950191616
partition size (256M,32G),cluster 32KB
sector bits 9
first sector 1
sec per cluster bits 6
Creating... seek to 0
volume size 3950191616
sector_count 0
write exfat super block size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
seek to 1800
volume size 3950191616
sector_count 0
write exfat super block size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
seek to 10000
seek to 88000
seek to 90000
seek to 98000
done.
Flushing... done.
File system created successfully.
注:这个工具我改了一点内容,大家可以去Google Code下载原版。
最后,为了更更实用,我们把/mnt目录通过SAMBA共享出来。这样比如U盘里存放好电影后,就可以用手机远程共享再观看了。
向共享中写文件,速度200KB/s~500KB/s,存寸小文件还是可以的。
从共享中读文件,速度1.5MB/s~2MB/s,看看电影是够的。
就写到这里了。
Linux支持exFAT和NTFS:http://www.linuxdiyf.com/linux/13066.html
Ubuntu下挂载可读写exFat格式分区:http://www.linuxdiyf.com/linux/4103.html
Ubuntu/Xubuntu:读写exFAT文件系统:http://www.linuxdiyf.com/linux/2242.html
Linux系统下挂载exFAT和NTFS格式硬盘的驱动安装和配置:http://www.linuxdiyf.com/linux/1862.html