开启SPI FLASH支持

mtd-utils编译安装

参考链接

104790183
116712874

依赖库编译

ZLIB

#下载
wget http://www.zlib.net/zlib-1.3.1.tar.gz

#解压
tar -xvf zlib-1.3.1.tar.gz;cd zlib-1.3.1

#配置 CC指定编译器 --prefix指定安装目录
CC=arm-linux-gnueabihf-gcc ./configure --shared --prefix=/home/xuyongxian/V3S/mtd/depend_lib/zlib

#编译
make

#安装
make install

LZO

#下载
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz

#解压
tar -xvf lzo-2.03.tar.gz;cd lzo-2.03

#配置
CC=arm-linux-gnueabihf-gcc ./configure --host=arm-linux-gnueabihf --prefix=/home/xuyongxian/V3S/mtd/depend_lib/lzo

#编译
make

#安装
make install

UUID


#下载依赖的UUID库
wget https://sourceforge.net/projects/e2fsprogs/files/e2fsprogs/v1.45.3/e2fsprogs-1.45.3.tar.gz

#解压
tar -xvf e2fsprogs-1.45.3.tar.gz;cd e2fsprogs-1.45.3

#########不需要编译 下面的步骤可以省略 直接用下载下来的内容就可以#############
#配置
CC=arm-linux-gnueabihf-gcc ./configure --host=arm-linux-gnueabihf --prefix=/home/xuyongxian/V3S/mtd/depend_lib/e2fs

#编译
make

#安装
make install

mtd-utils编译

#配置 顶层Makefile文件 在Makefile文件最上方增加
export CROSS=arm-linux-gnueabihf-
CC := $(CROSS)gcc -EL
LDFLAGS := -static
DEPEND_LIB_PATH=/home/xuyongxian/V3S/mtd/depend_lib/
export ZLIBCPPFLAGS = -I${DEPEND_LIB_PATH}/zlib/include   
export LZOCPPFLAGS = -I${DEPEND_LIB_PATH}/lzo/include/lzo
export UUIDCPPFLAGS = -I/home/xuyongxian/V3S/mtd/e2fsprogs-1.45.3/lib/
 
export ZLIBLDFLAGS = -L${DEPEND_LIB_PATH}/zlib/lib
export LZOLDFLAGS = -L${DEPEND_LIB_PATH}/lzo/lib
export UUIDLDFLAGS = -L/home/xuyongxian/V3S/mtd/e2fsprogs-1.45.3/lib/uuid
 
WITHOUT_XATTR = 1

#配置 mkfs.ubifs/Makefile文件

CPPFLAGS更改为 CPPFLAGS += $(ZLIBCPPFLAGS) $(LZOCPPFLAGS) ${UUIDCPPFLAGS}

LDLIBS_mkfs.ubifs更改为 LDLIBS_mkfs.ubifs += $(ZLIBLDFLAGS) $(LZOLDFLAGS) $(UUIDLDFLAGS)

#配置common.mk文件,修改安装路径
PREFIX 更改为 PREFIX=/home/xuyongxian/V3S/mtd/install

#编译
make

#安装
make install

#在安装目录下就能得到一系列的工具了,如果有的没有也可以去编译目录下找
#编译路径:/home/xuyongxian/V3S/mtd/mtd-utils-1.4.4/arm-linux-gnueabihf

成果物

2026-02-01T12:39:54.png

错误解决

libmtd.c:442:10: error: called object ‘major’ is not a function or function pointer

打开libmtd.c文件,在文件头里面加上
#include <sys/sysmacros.h>

mtd-utils使用

#查看 MTD 的基本信息,如大小、擦写块大小、擦写次数等
mtdinfo /dev/mtd3

#擦除
./mtd_debug erase /dev/mtd0 0 1024000

#可以查看 flash 类型、块大小及 mtd 分区总大小,大小以10进制显示,分区大小就是 len
mtd_debug info

#查看 MTD 分区
cat /proc/mtd

#读取 MTD 分区
#dd 命令从 /dev/mtd3 中读取数据。例如,要读取 mtd3 分区的前 10KB 数据
dd if=/dev/mtd3 of=flash_data.bin bs=1024 count=10

#写入 MTD 分区
flashcp data.bin /dev/mtd3

#擦除 MTD 分区
#擦除 mtd3 分区的前 1MB 数据
flash_erase /dev/mtd3 0 16

#全部擦除
flash_erase all /dev/mtd0