mtd_utils交叉编译

1. 材料准备

1.     zlib-1.2.3.tar.gz:http://download.chinaunix.net/download.php?id=40893&ResourceID=12241

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

3.     e2fsprogs-1.44.2.tar.gz:http://prdownloads.sourceforge.net/e2fsprogs/e2fsprogs-1.41.14.tar.gz

4.     mtd-utils-1.00.tar.gz:http://git.infradead.org/mtd-utils.git/commit/7ddeed0c79a524f222d2911c023781c88f63eaf7

zlib的编译:

CC=arm-linux-gcc ./configure --shared --prefix=…/out/

root@Jon:/home/jon/code/H3_NEO/mtd_utils/zlib# CC=arm-linux-gcc  ./configure --shared --prefix=../out/
Checking for shared library support...
Building shared library libz.so.1.2.5 with arm-linux-gcc.
Checking for off64_t... Yes.
Checking for fseeko... Yes.
Checking for unistd.h... Yes.
Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf().
Checking for vsnprintf() in stdio.h... Yes.
Checking for return value of vsnprintf()... Yes.
Checking for attribute(visibility) support... Yes.

执行make

root@Jon:/home/jon/code/H3_NEO/mtd_utils/zlib# make
arm-linux-gcc -O3 -D_LARGEFILE64_SOURCE=1   -c -o example.o example.c
arm-linux-gcc -O3 -D_LARGEFILE64_SOURCE=1   -c -o adler32.o adler32.c
arm-linux-gcc -O3 -D_LARGEFILE64_SOURCE=1   -c -o compress.o compress.c
arm-linux-gcc -O3 -D_LARGEFILE64_SOURCE=1   -c -o crc32.o crc32.c

执行make install

 root@Jon:/home/jon/code/H3_NEO/mtd_utils/zlib# make install
cp libz.a ../out//lib
cp libz.so.1.2.5 ../out//lib
cd ../out//lib; chmod u=rw,go=r libz.a
cp zlib.3 ../out//share/man/man3
chmod 644 ../out//share/man/man3/zlib.3
cp zlib.pc ../out//lib/pkgconfig
chmod 644 ../out//lib/pkgconfig/zlib.pc
cp zlib.h zconf.h ../out//include
chmod 644 ../out//include/zlib.h ../out//include/zconf.h
root@Jon:/home/jon/code/H3_NEO/mtd_utils/zlib# 

2. 编译安装lzo:
执行配置:

CC=arm-linux-gcc ./configure --host=arm-linux
–prefix=/home/jon/code/H3_NEO/mtd_utils/out/

然后

make
make install

3. 编译安装e2fsprogs:

./configure --host=arm-linux --host=arm-linux --enable-elf-shlibs
–prefix=/home/jon/code/H3_NEO/mtd_utils/out/
然后

make
make install

4. 编译mtd-utils:
修改makefile在头部加入如下2行

CROSS=arm-linux-
WITHOUT_XATTR=1

直接编译还是会报错,因为我的目的只是希望得到flash_*相关的工具,因此,直接把其他的注掉即可,如下:

CROSS=arm-linux-
WITHOUT_XATTR=1
# -*- sh -*-

VERSION = 1.5.2

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

ifeq ($(WITHOUT_XATTR), 1)
  CPPFLAGS += -DWITHOUT_XATTR
endif
ifeq ($(WITHOUT_LZO), 1)
  CPPFLAGS += -DWITHOUT_LZO
else
  LZOLDLIBS = -llzo2
endif

TESTS = tests

MTD_BINS = \
	 flash_erase nanddump  \
	ftl_check  flash_lock flash_unlock \
	flash_otp_info flash_otp_dump flash_otp_lock flash_otp_write \
	mtd_debug flashcp nandwrite nandtest mtdpart \
	sumtool 


BINS = $(MTD_BINS)
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_FIND = find "$(BUILDDIR)/" -xdev '(' -name '*.[ao]' -o -name '.*.c.dep' ')'

clean::
ifneq ($(BUILDDIR)/.git,)
ifneq ($(BUILDDIR),.)
ifneq ($(BUILDDIR),$(CURDIR))
	rm -rf $(BUILDDIR)
endif
endif
endif
# findutils v4.1.x (RHEL 4) do not have '+' syntax
	@if test -d "$(BUILDDIR)/"; then \
		$(CLEAN_FIND) -exec rm -f {} + 2> /dev/null || \
		$(CLEAN_FIND) -exec rm -f {} \; ; \
	fi
	rm -f $(BUILDDIR)/include/version.h
	$(MAKE) -C $(TESTS) clean

install:: $(addprefix $(BUILDDIR)/,${BINS}) ${SCRIPTS}
	mkdir -p ${DESTDIR}/${SBINDIR}
	install -m 0755 $^ ${DESTDIR}/${SBINDIR}/
	mkdir -p ${DESTDIR}/${MANDIR}/man1
	install -m 0644 mkfs.jffs2.1 ${DESTDIR}/${MANDIR}/man1/
	-gzip -9f ${DESTDIR}/${MANDIR}/man1/*.1

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
LDFLAGS_mkfs.ubifs = $(ZLIBLDFLAGS) $(LZOLDFLAGS) $(UUIDLDFLAGS)
LDLIBS_mkfs.ubifs = -lz -llzo2 -lm -luuid
$(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)))

猜你喜欢

转载自blog.csdn.net/zhuyong006/article/details/89254813