How to support exFAT in i.MX6DQ Linux release

Document created by AlanZhang Employee on May 21, 2013
Version 1Show Document
  • View in full screen mode

Development environment: i.MX6Q SabreSD w/ L3.0.35_1.1.0_121218 release.

 

Quoting from Wikipedia about exFAT (exFAT - Wikipedia, the free encyclopedia) as following:

exFAT (Extended File Allocation Table) is a Microsoft file system optimized for flash drives.[3] It is proprietary and patent-pending.[1] It is supported in Windows XP and Windows Server 2003 with update KB955704,[2] Windows Embedded CE 6.0, Windows Vista with Service Pack 1,[4] Windows Server 2008,[5] Windows 7, Windows 8, Windows Server 2008 R2 (except Windows Server 2008 Server Core), Mac OS X Snow Leopard starting from 10.6.5,[6] Mac OS X Lion and OS X Mountain Lion.

 

The history of support exFAT in Linux was since from 2.6.x, it involves several parts that will be described followingly.

 

Part 1: Linux Kernel

           Enable FUSE (Filesystem in userspace) feature in Kernel Config, then build a new uImage and module if set it to be "M";

 

Part 2: fuse-2.9.2.tar.gz

           Download fuse-2.9.2.tar.gz from http://sourceforge.net/projects/fuse/files/fuse-2.X/, untar it, then build it with following commands:

./configure --prefix=/home/alanz/i.MX6_L3.0.35_121218/ltib/rootfs/usr --host=`/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-gcc -dumpmachine` --enable-lib --enable-util --enable-example --exec-prefix=/home/alanz/i.MX6_L3.0.35_121218/ltib/rootfs/usr

make

sudo make install

 

Part 3: exfat-utils-1.0.1.tar.gz

           Download exfat-utils-1.0.1.tar.gz from http://code.google.com/p/exfat/downloads/list, untar it, then build it with following command:

sudo scons SYSROOT=/home/alanz/i.MX6_L3.0.35_121218/ltib/rootfs DESTDIR=/home/alanz/i.MX6_L3.0.35_121218/ltib/rootfs/sbin CC=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-gcc AR=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-ar RANLIB=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-ranlib STRIP=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-strip install

 

Part 4: fuse-exfat.git

git clone git://sources.progress-linux.org/git/releases/baureo-backports/packages/fuse-exfat.git  fuse-exfat.git

cd fuse-exfat.git

Replace the root SConstruct with the attached one, then execute command:

sudo scons SYSROOT=/home/alanz/i.MX6_L3.0.35_121218/ltib/rootfs DESTDIR=/home/alanz/i.MX6_L3.0.35_121218/ltib/rootfs/sbin CC=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-gcc AR=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-ar RANLIB=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-ranlib STRIP=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-strip install

 

After all above steps done, you can check whether the necessary files under your rootfs like I did as following:

http://en.wikipedia.org/wiki/ExFAT#cite_note-uspatent-2alanz@alanz-VirtualBox:~/i.MX6_L3.0.35_121218/ltib$ find ./rootfs/ -name *exfat*./rootfs/sbin/exfatlabel
./rootfs/sbin/mount.exfat
./rootfs/sbin/fsck.exfat
./rootfs/sbin/dumpexfat
./rootfs/sbin/exfatfsck
./rootfs/sbin/mount.exfat-fuse
./rootfs/sbin/mkexfatfs
./rootfs/sbin/mkfs.exfat
alanz@alanz-VirtualBox:~/i.MX6_L3.0.35_121218/ltib$ find ./rootfs/ -name *fuse*./rootfs/usr/include/fuse
./rootfs/usr/include/fuse/fuse_common_compat.h
./rootfs/usr/include/fuse/fuse_compat.h
./rootfs/usr/include/fuse/fuse_lowlevel_compat.h
./rootfs/usr/include/fuse/fuse_opt.h
./rootfs/usr/include/fuse/fuse_lowlevel.h
./rootfs/usr/include/fuse/fuse.h
./rootfs/usr/include/fuse/fuse_common.h
./rootfs/usr/include/fuse.h
./rootfs/usr/src/linux/include/linux/fuse.h
./rootfs/usr/lib/libfuse.so
./rootfs/usr/lib/libfuse.a
./rootfs/usr/lib/libfuse.so.2.9.2
./rootfs/usr/lib/libfuse.la
./rootfs/usr/lib/libfuse.so.2
./rootfs/sbin/mount.exfat-fuse

 

Check Steps can be referenced by the steps presented on internet.

 

NOTE: The directory name "/home/alanz/i.MX..." should be revised per your self development environment.

Attachments

Outcomes