先介绍一下平台环境:
开发环境: Win7+VirtualBox+Debian
工具链:arm-linux-
硬件平台:Tq2440 arm9开发板
使用到的mtd-utils软件包请到 这里 下载,压缩包中已经含有编译mtd-utils用到的所有软件,分别是:
zlib-1.2.8.tar
lzo-2.06.tar
e2fsprogs-1.42.8.tar
mtd-utils-1.4.9.tar
先将压缩包在Win7下解压,然后将得到的上面的四个软件包拷贝到debian。
这里有几个网址,可以下载到比较新的版本:
如果下载上面的软件包,在make的过程中出现不能解决的问题,可以尝试下载下面相应的工具。
mtd-utils http://www.mmnt.net/db/0/0/ftp.infradead.org/pub/mtd-utils
e2fsprogs http://sourceforge.net/projects/e2fsprogs/files/e2fsprogs/
lzo http://www.oberhumer.com/opensource/lzo/download/
zlib http://zlib.net/
下面开始进行编译:
参考: http://processors.wiki.ti.com/index.php/MTD_Utilities#MTD-Utils_Compilation
第一步、 编译安装zlib
tar -xzf zlib-1.2.8.tar.gz
cd zlib-1.2.8/
./configure --prefix=/home/pengdl/tq2440/my_mtd_utils/mtd_utils
修改Makefile
CC=arm-linux-gcc
LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
CPP=arm-linux-gcc -E
AR=arm-linux-ar
RANLIB=arm-linux-ranlib
修改完成后保存,执行下面的命令
make
make install
第二步、编译安装lzo
tar -xzvf lzo-2.06.tar.gz
cd lzo-2.06/
./configure --host=arm-linux --prefix=/home/pengdl/tq2440/my_mtd_utils/mtd_utils
make
make install
第三步、编译安装e2fsprogs
tar -xzvf e2fsprogs-1.42.8.tar.gz
cd e2fsprogs-1.42.8/
./configure --host=arm-linux --prefix=/home/pengdl/tq2440/my_mtd_utils/mtd_utils
make
make install
cd ./lib/uuid/
make install
第四步、编译安装mtd-utils
tar -xjvf mtd-utils-1.4.9.tar.bz2
cd mtd-utils-1.4.9/
修改Makefile:
CPPFLAGS += -I./include -I$(BUILDDIR)/include -I./ubi-utils/include $(ZLIBCPPFLAGS) $(LZOCPPFLAGS)
PREFIX = /home/pengdl/tq2440/my_mtd_utils/mtd_utils
CROSS=arm-linux-
ZLIBCPPFLAGS = -I$(PREFIX)/include
ZLIBLDFLAGS = -L$(PREFIX)/lib
LZOCPPFLAGS = -I$(PREFIX)/include
LZOLDFLAGS = -L$(PREFIX)/lib
LDFLAGS += $(ZLIBLDFLAGS) $(LZOLDFLAGS)
CFLAGS ?= -O2 -g $(ZLIBCPPFLAGS) $(LZOCPPFLAGS)
上面的内容插入的位置如下:
# -*- sh -*-
VERSION = 1.5.0
#added contents beginning!
PREFIX = /home/book/s3c2440/drivers/nand/mtd_utils_tools_package/utilstool
CROSS=arm-linux-
ZLIBCPPFLAGS = -I$(PREFIX)/include
ZLIBLDFLAGS = -L$(PREFIX)/lib
LZOCPPFLAGS = -I$(PREFIX)/include
LZOLDFLAGS = -L$(PREFIX)/lib
LDFLAGS += $(ZLIBLDFLAGS) $(LZOLDFLAGS)
CFLAGS ?= -O2 -g $(ZLIBCPPFLAGS) $(LZOCPPFLAGS)
#added contents ended!
CPPFLAGS += -I./include -I$(BUILDDIR)/include -I./ubi-utils/include $(ZLIBCPPFLAGS) $(LZOCPPFLAGS)
修改common.mk,将PREFIX=/usr注释掉
#PREFIX=/usr
保存,执行下面的命令
WITHOUT_XATTR=1 make
如果make时出现不能解决的问题,可以尝试下载高版本的
make install
执行完后,会在/home/pengdl/tq2440/my_mtd_utils/mtd_utils/sbin生成需要的工具:
使用的是否只需要将相应的工具拷贝到根文件系统的/sbin下即可,比如想测试一下mtdinfo能不能用,
cp mtdinfo /source/rootfs/sbin/ (我的根文件系统是用nfs挂载实现的)
在串口终端中执行下面的命令
可以用。
也可以看看这些工具依赖那些动态库
arm-linux-objdump –x mtdinfo | grep NEEDED
这些工具依赖库有:
libc.so.6、libdl.so.2、libgcc_s.so.1、libuuid.so.1、libm.so.6、libz.so.1、libpthread.so.0,所以根文件系统中应该有这些库。
libc、libgcc、libdl、ligpthread、libm这几个库在工具链中一般都有
libz在zlib-1.2.8下就有(工具链中也有,/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/usr/lib)
libuuid也在工具链中:/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/usr/lib
这里有一个脚本,用于获取当前目录下的依赖关系:
#!/bin/bash
file=bin.txt
file_list="`ls .`"
rm -rf $file
touch $file
for i in $file_list;do
du -sh $i >>$file
echo "" >>$file
arm-linux-objdump -x $i | grep NEEDED >>$file
done