当前位置: 首页 > 工具软件 > e2s > 使用案例 >

编译e2fsprogs源码

羊舌阎宝
2023-12-01

最近参与的一个项目涉及到读写SD卡,在读写过程中,如果忽然发生断电行为,有一定概率性导致sd卡的文件系统损坏(本人采用ext2文件系统),试想过两种方案:

1、当系统启动时,检测mount失败,重新格式化分区,命令如下

mkfs.ext2 /dev/分区名(对应的硬件存储设备)
然后再重新执行mount指令
2、mount失败时选择修复SD卡的文件系统(第一种方式会导致SD卡之前存储的内容失效),这时我们就需要fsck相关镞修复指令,可是之前文件系统的工具是由BusyBox编译copy而来的,经md5sum校验发现fsck和fsck.mini的md5值是一致的,再看BusyBox中Utilities源码发现并没有fsck相关的.c和.h;于是想到直接编译e2fsprogs源码,直接生成fsck相关工具镞!

ex2fsprogs:The Ext2 Filesystem Utilities (e2fsprogs) contain all of the standard utilities for creating, fixing, configuring , and debugging ext2 filesystems.
上面是对ex2fsprogs工具包的描述。

接下来下载源码:

https://sourceforge.net/projects/e2fsprogs/
具体的版本信息可从http://e2fsprogs.sourceforge.net/e2fsprogs-release.html#1.43.8查看;
在编译前我们需要解决一个编译bug,采用sed指令:

sed -i -e 's/-DTEST/$(ALL_CFLAGS) &/' lib/e2p/Makefile.in   编译选项增加ALL_CFLAGS
接下来建议在该文件夹根目录创建一个Build目录,安装后的程序都会在该目录下,不会覆盖系统目录内容,然后运行configure

mkdir Build
cd ./Build
../configure  --host=arm-linux --prefix=$PWD CC=/opt/DVRRDK_04.00.00.03/ti_tools/cgt_a8/arago/linux-devkit/bin/arm-arago-linux-gnueabi-gcc
其中--host用于指令跨平台处理器类型;--prefix用于指定工具安装路径;CC指定( 交叉)编译器路径及其种类;默认动态编译,如想静态编译,选项增加 LDFLAGS=-static;如想生成动态库可采用 --enable-elf-shlibs 选项;

其他参数可阅读configure脚本自行学习!

接下来

make
make install
查看当前目录下sbin目录,获取fsck等工具,如:

badblocks  debugfs   e2freefrag  e2image  e2undo   e4defrag  findfs  fsck.ext2  fsck.ext4  mke2fs     mkfs.ext3  mklost+found  tune2fs blkid      dumpe2fs  e2fsck      e2label  e4crypt  filefrag  fsck    fsck.ext3  logsave    mkfs.ext2  mkfs.ext4  resize2fs     uuidd







 类似资料: