前言
由于工作需要,经常在一些嵌入式平台用到mkfs.vfat命令来格式化u盘、存储卡等存储介质。在使用zedboard平台进行编译时,发现在用根文件系统中不含mkfs.vfat命令,给工作带来很多不便。故计划编译mkfs.vfat命令移植进平台。
可用方案
1、集成至busybox移植;
2、利用dosfstools编译移植;
对于方案1,已有诸多文章给出详细介绍。考虑到本人所用zedboard平台根文件系统放在nor flash,存储空间受限,编译出的busybox文件较大,无法存放至nor flash,故放弃此方案。
经查看可知(ls -l mkfs.vfat的路径),mkfs.vfat命令是mkfs.fat命令的链接,查阅资料(主要参考: https://www.jianshu.com/p/9348fac12dd8 )后,了解到dosfstools可直接编译mkfs.fat命令,故尝试采用方案2来编译移植mkfs.fat命令。
实现步骤
1、下载dosfstools源码 ,下载地址:http://ftp.de.debian.org/debian/pool/main/d/dosfstools/;
选择要下载的文件,右键复制链接,在ubuntu命令行下“wget 粘贴地址”(本人下载的是dosfstools_4.1.orig.tar.xz);
2、解压, tar -xvf dosfstools_4.1.orig.tar.xz;
3、进入解压目录dosfstools-4.1, cd dosfstools-4.1;
4、执行configure配置,注意根据实际需求添加配置选项:
./configure CC=arm-xilinx-linux-gnueabi-gcc --prefix=$PWD --host=arm-xilinx-linux
zedboard平台的交叉编译链为arm-xilinx-linux-gnueabi-, 故CC=arm-xilinx-linux-gnueabi-gcc,–host=arm-xilinx-linux。这里我指定程序存放路径为当前路径,故–prefix=$PWD;
5、编译,make;
6、安装,make install;
8、确认编出的可执行程序mkfs.fat的文件格式, file sbin/mkfs.fat;
本人编出的mkfs.fat在$PWD/sbin/路径下,实际路径根据上文“–prefix=”配置查找;
9、复制可执行程序mkfs.fat至所用平台(zedboard);
10、在所用平台(zedboard)将复制的可执行程序mkfs.fat放至/usr/sbin/路径:
mv mkfs.fat /usr/sbin/
11、到/usr/sbin路径,建立mkfs.vfat软链接:
cd /usr/sbin/
ln -s mkfs.vfat mkfs.fat
12、大功告成,可以在平台使用mkfs.vfat工具啦。
其他说明
本人最初采用了dosfstools_3.0.27.orig.tar.xz版本编译生成mkfs.fat,但使用过程中发现该版本对大容量存储卡强制格式化为F32格式,存储卡可见容量只有2G,故尝试采用了更新版本的dosfstools_4.1.orig.tar.xz编译mkfs.fat,这样格式化大容量存储设备,可见容量更符合实际。