arm linux 移植 mtd-utils 1.x【转】
转自:https://www.cnblogs.com/schips/p/12309281.html
背景
关于在公司的生产环境有关。不希望每次都在uboot下面做nand flash 的烧写;也觉得使用U盘升级的方法比较慢,而且有关的驱动不是我写的,不希望受制于人。还是希望在Linux下面比较通用。
要求: 根据本文进行操作时,需要明确清楚各个部分的烧写地址和大小。
host平台 :Ubuntu 16.04
arm平台 : 3531d
mtd-utils :1.4.8
zlib :1.2.11
lzo :2.08
e2fsprogs : 1.41.14
arm-gcc :4.9.4
编译
一个脚本解决所有的事情
bash
##
# Copyright By Schips, All Rights Reserved
# 自定义变量
OUTPUT_PATH=`pwd`/install
BUILD_HOST=arm-linux
ARM_GCC=${BUILD_HOST}-gcc
BASE=`pwd`
ZLIB=zlib-1.2.11
MTD_UTILS=mtd-utils-1.4.8
LZO=lzo-2.08
E2FSPROGS=e2fsprogs-1.41.14
make_dirs () {
#为了方便管理,创建有关的目录
cd ${BASE} && mkdir compressed install source -p
}
tget () { #try wget
filename=`basename $1`
echo "Downloading [${filename}]..."
if [ ! -f ${filename} ];then
wget $1
fi
echo "[OK] Downloaded [${filename}] "
}
download_package () {
cd ${BASE}/compressed
tget https://www.zlib.net/${ZLIB}.tar.gz
tget http://www.oberhumer.com/opensource/lzo/download/${LZO}.tar.gz
# 注意下面这行的网址
tget https://jaist.dl.sourceforge.net/project/e2fsprogs/e2fsprogs/1.41.14/${E2FSPROGS}.tar.gz
tget ftp://ftp.infradead.org/pub/mtd-utils/${MTD_UTILS}.tar.bz2
}
tar_package () {
cd ${BASE}/compressed
ls * > /tmp/list.txt
for TAR in `cat /tmp/list.txt`
do
tar -xf $TAR -C ../source
done
rm -rf /tmp/list.txt
}
make_zlib () {
# 编译安装 zlib
cd ${BASE}/source/${ZLIB}
echo "ZLIB ABOUT"
CC=${ARM_GCC} ./configure --prefix=${OUTPUT_PATH}/${ZLIB}
make && make install
}
make_lzo () {
# 编译安装 lzo
cd ${BASE}/source/${LZO}
echo "LZO ABOUT"
CC=${ARM_GCC} ./configure --host=arm-linux --prefix=${OUTPUT_PATH}/${LZO}
make && make install
}
make_e2fsprogs () {
# 编译安装 e2fsprogs
cd ${BASE}/source/${E2FSPROGS}
echo "E2FSPROGS ABOUT"
CC=${ARM_GCC} ./configure --host=arm-linux --enable-elf-shlibs --prefix=${OUTPUT_PATH}/${E2FSPROGS}
make && make install-libs
mkdir ${OUTPUT_PATH}/${E2FSPROGS}/include/uuid -p
cp lib/uuid/uuid.h ${OUTPUT_PATH}/${E2FSPROGS}/include/uuid
}
make_mtd_utils () {
# 编译安装 mtd-utils
cd ${BASE}/source/${MTD_UTILS}
echo "MTD ABOUT"
# 下面4行修复了mtd编译的一些问题
sed -r -i "/LDLIBS_mkfs.ubifs = -lz -llzo2 -lm -luuid/ s/.*/LDLIBS_mkfs.ubifs = -lz -llzo2 -lm -luuid \$(ZLIBLDFLAGS) \$(LZOLDFLAGS) \$(UUIDLDLIBS)/g" Makefile
sed -r -i "/#include <uuid\/uuid.h>/ s/.*/#include \"uuid\/uuid.h\"/g" mkfs.ubifs/mkfs.ubifs.h
mkdir mkfs.ubifs/uuid -p
cp ${BASE}/source/${E2FSPROGS}/lib/uuid/uuid.h mkfs.ubifs/uuid/uuid.h
export CROSS=${BUILD_HOST}-
export DESTDIR=${OUTPUT_PATH}/mtd-utils
export ZLIBCPPFLAGS=-I${OUTPUT_PATH}/${ZLIB}/include
export LZOCPPFLAGS="-I${OUTPUT_PATH}/${LZO}/include -I{$OUTPUT_PATH}/${E2FSPROGS}/include/"
export ZLIBLDFLAGS=-L${OUTPUT_PATH}/${ZLIB}/lib
export LZOLDFLAGS=-L${OUTPUT_PATH}/${LZO}/lib
export UUIDLDLIBS=-L${OUTPUT_PATH}/${E2FSPROGS}/lib
make WITHOUT_XATTR=1
}
make_dirs
#download_package
tar_package
make_zlib
make_lzo
make_e2fsprogs
make_mtd_utils
mtd-utils:
make 后 :mtd-utils工具链将会在当前目录下$CROSS目录生成
make install后 :make生成的结果将安装到DESTDIR目录下
如果 make install 失败,手动在 $CROSS 文件名的目录下就可以找到编译的结果
拷贝需要的程序和库即可
mtd-utils 2.0版本的编译: https://blog.csdn.net/liyangzmx/article/details/93901411
(注:本人尝试过2.x版本的编译,但是失败了。)
如果说我的文章对你有用,只不过是我站在巨人的肩膀上再继续努力罢了。
若在页首无特别声明,本篇文章由 Schips 经过整理后发布。
博客地址:https://www.cnblogs.com/schips/
若在页首无特别声明,本篇文章由 Schips 经过整理后发布。
博客地址:https://www.cnblogs.com/schips/
【作者】sky
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.