ubuntu mtd-utils交叉编译过程

MTD-utils的的编译依赖三个库

1,zlib(http://www.zlib.net/zlib-1.2.5.tar.gz

2,lzo(http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz

3,e2fsprogs(https://sourceforge.net/projects/e2fsprogs/files/e2fsprogs/1.41.14/e2fsprogs-1.41.14.tar.gz/download

先安装依赖库:

1,解压zlib文件,执行3条命令:CC=arm-linux-gcc ./configure --host=arm-linux --prefix=生成的路径

                                                     make

                                                     make install

2、安装lzo同zlib一样,也是三条命令

3、安装e2fsprogs:同样,只不过不需要安装所有,所以第三条命令改为make install-libs

依赖库的安装基本上网上一搜都很多,一般也没什么问题,下面主要介绍一下mtd-utils的安装和我遇到的问题及解决方法

下载mtd-utils(ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-1.4.8.tar.bz2

1、首先说一下版本的选择,mtd-utils都出到2.0.2版本了(2018/4/16),我一开始就用的这个,但是和网上大多数教程出入很大,网上都是解压后直接make就行了,但是2.0.2的版本里没有makefile,而是configure,但是我执行configure总是报错,具体错误挺多,所以我就放弃了这个版本,转而下载1.4.8的老版本。

2、编译前准备

make命令为:make CROSS=arm-linux- WITHOUT_XATTR=1

直接make会报错,提示找不到依赖,所以,这时候就要把前面装的三个库加进去了,具体加法为:

下面是修改好的makefile文件,红色部分是需要添加或修改的

VERSION = 1.4.8

ZLIBCPPFLAGS=-Izlib的头文件路径
LZOCPPFLAGS=-Ilzo的头文件路径
UUIDCFLAGS=-Ie2fsprogs的头文件路径

CPPFLAGS += -I./include -I$(BUILDDIR)/include -I./ubi-utils/include $(ZLIBCPPFLAGS) $(LZOCPPFLAGS) $(UUIDCFLAGS)

ifeq ($(WITHOUT_XATTR), 1)
  CPPFLAGS += -DWITHOUT_XATTR
endif
ifeq ($(WITHOUT_LZO), 1)
  CPPFLAGS += -DWITHOUT_LZO
else
  LZOLDLIBS = -Llzo的lib路径 -llzo2
endif

UUIDLDLIBS = -Le2fsprogs的lib路径 -luuid

TESTS = tests

MTD_BINS = \
        ftl_format flash_erase nanddump doc_loadbios \
        ftl_check mkfs.jffs2 flash_lock flash_unlock \
        flash_otp_info flash_otp_dump mtd_debug flashcp nandwrite nandtest \
        jffs2dump \
        nftldump nftl_format docfdisk \
        rfddump rfdformat \
        serve_image recv_image \
        sumtool jffs2reader
UBI_BINS = \
        ubiupdatevol ubimkvol ubirmvol ubicrc32 ubinfo ubiattach \
 ubidetach ubinize ubiformat ubirename mtdinfo ubirsvol

BINS = $(MTD_BINS)
BINS += mkfs.ubifs/mkfs.ubifs
BINS += $(addprefix ubi-utils/,$(UBI_BINS))
SCRIPTS = flash_eraseall

TARGETS = $(BINS)
TARGETS += lib/libmtd.a
TARGETS += ubi-utils/libubi.a

OBJDEPS = $(BUILDDIR)/include/version.h

include common.mk

clean::
ifneq ($(BUILDDIR)/.git,)
ifneq ($(BUILDDIR),.)
ifneq ($(BUILDDIR),$(CURDIR))
        rm -rf $(BUILDDIR)
endif
endif
endif
        @if test -d "$(BUILDDIR)/"; then \
                find $(BUILDDIR)/ -xdev \
                        '(' -name '*.[ao]' -o -name '.*.c.dep' ')' \
                        -exec rm -f {} + ; \
        fi
        rm -f $(BUILDDIR)/include/version.h
        $(MAKE) -C $(TESTS) clean

install:: ${BINS} ${SCRIPTS}
        mkdir -p ${DESTDIR}/${SBINDIR}
        install -m 0755 ${BINS} ${SCRIPTS} ${DESTDIR}/${SBINDIR}/
        mkdir -p ${DESTDIR}/${MANDIR}/man1
        gzip -9c mkfs.jffs2.1 > ${DESTDIR}/${MANDIR}/man1/mkfs.jffs2.1.gz
tests::
        $(MAKE) -C $(TESTS)

cscope:
        cscope -bR

$(BUILDDIR)/include/version.h: $(BUILDDIR)/include/version.h.tmp
        $(call BECHO,CHK)
        $(Q)cmp -s $@ [email protected] && rm -f [email protected] || mv [email protected] $@
$(BUILDDIR)/include/version.h.tmp:
        ${Q}mkdir -p $(dir $@)
        $(Q)echo '#define VERSION "$(VERSION)"' > $@

#
# Utils in top level
#
obj-mkfs.jffs2 = compr_rtime.o compr_zlib.o compr_lzo.o compr.o rbtree.o
LDFLAGS_mkfs.jffs2 = $(ZLIBLDFLAGS) $(LZOLDFLAGS)
LDLIBS_mkfs.jffs2  = -lz $(LZOLDLIBS)

LDFLAGS_jffs2reader = $(ZLIBLDFLAGS) $(LZOLDFLAGS)
LDLIBS_jffs2reader  = -lz $(LZOLDLIBS)

$(foreach v,$(MTD_BINS),$(eval $(call mkdep,,$(v))))

#
# Common libmtd
#
obj-libmtd.a = libmtd.o libmtd_legacy.o libcrc32.o libfec.o
$(call _mkdep,lib/,libmtd.a)

#
# Utils in mkfs.ubifs subdir
#
obj-mkfs.ubifs = crc16.o lpt.o compr.o devtable.o \
hashtable/hashtable.o hashtable/hashtable_itr.o
LDLIBS_mkfs.ubifs = -lz -lm $(LZOLDLIBS) $(UUIDLDLIBS)
$(call mkdep,mkfs.ubifs/,mkfs.ubifs,,ubi-utils/libubi.a)

#
# Utils in ubi-utils/ subdir
#
obj-libiniparser.a = libiniparser.o dictionary.o
obj-libscan.a      = libscan.o
obj-libubi.a       = libubi.o
obj-libubigen.a    = libubigen.o

obj-mtdinfo   = libubigen.a
obj-ubinize   = libubigen.a libiniparser.a
obj-ubiformat = libubigen.a libscan.a

$(foreach v,libubi.a libubigen.a libiniparser.a libscan.a,$(eval $(call _mkdep,ubi-utils/,$(v))))
$(foreach v,$(UBI_BINS),$(eval $(call mkdep,ubi-utils/,$(v),libubi.a ubiutils-common.o)))
 

修改好makfile文件就可以make了,之后生成的文件和工具都在mtd-utils文件夹的arm-none-linux-gnueabi文件夹下。

猜你喜欢

转载自blog.csdn.net/u011113596/article/details/81537501
今日推荐