mtd-utils工具的编译,

在ubuntu 10.04上交叉编译编译 mtd-utils

=====================================================================================

在写文章之前, 大概有两天时间在找mtd-utils的交叉编译资料, 经常找到的都是过时的, 或者版本很低, 或者需要改一堆的Makefile, 能不能不改Makefile并且使用最新版本的mtd-utils呢?

这是我完成mt-utils交叉编译后写本文的出发点, 希望更多的人少走些弯路吧. 以下是步骤, 我个人测试是完全没有问题的, 若有错误请邮件告知我 : szricky@gmail.com

本文时间是2010年5月24日, 编译平台是 ubuntu 10.04, 交叉编译工具是arm-none-linux-gnueabi, 版本是2010q1. 均为目前最高版本.

工具链安装包是:arm-2010q1-202-arm-none-linux- gnueabi-i686-pc-linux-gnu.tar.bz2, 如果找不到就google一下.解压后放在/home/szricky/toolchains/目录下。

cross-compile 的精髓是:在工具链里面可以加入自己编译的库和头文件。以mtd-utils为例子, 需要编译zlib, lzo 和 e2fsprogs. 最好安装这三个库到工具链中. 那么就不需要每个工程都改Makefile了.

------------------------- 传说中的分割线 ------------------------------

a.) export PATH=$PATH:/home/szricky/toolchains/arm-2010q1/bin, 加入工具链的有效路径, 确保改文件夹存在, 若不同, 则要做相应的修改.

b.) 使用git下载最新的 e2fsprogs: git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git

c.) 配置: e2fsprogs
./configure --host=i686-linux --target=arm-linux CC=arm-none-linux-gnueabi-gcc --prefix=/home/szricky/toolchains/arm-2010q1/arm-none-linux-gnueabi

d.) 编译:
make

e.) 安装:因为我们只需要 uuid 库, 所以不需要完全安装, 查看 Makefile文件, 所以只执行:
make install-libs

f.) 检查:可以在工具链目录看到, uuid/uuid.h 文件已经安装. libuuid.a 已经安装.

------------------------- 传说中 的分割线 ------------------------------

目前最新的lzo是 lzo-2.03.tar.gz, 下载并解压.

配置:
./configure --host=i686-linux --target=arm-linux CC=arm-none-linux-gnueabi-gcc --prefix=/home/szricky/toolchains/arm-2010q1/arm-none-linux-gnueabi

编译:
make

安装:
make install

检查:liblzo2.a 已经拷贝到工具链的lib目录.

zlib目前最新是zlib-1.2.5.tar.gz, 下载并解压.

配置:
CC=arm-none-linux-gnueabi-gcc ./configure --prefix=/home/szricky/toolchains/arm-2010q1/arm-none-linux-gnueabi

编译:
make

安装:
make install

检查: zconf.h 和 libz.a 都安装到了工具链目录.

------------------------- 传说中 的分割线 ------------------------------

mtd-utils 与上述的库有区别, 库文件要安装到工具链中, 而应用程序(mtd-utils)应该安装到文件系统中.
所以指定 --prefix=/home/szricky/work/install, 手工建立该空文件夹.

指定编译参数:
export CROSS=arm-none-linux-gnueabi-
export DESTDIR=/home/szricky/work/install

make 报错, sys/acl.h 文件找不到. 查看源代码和google, 判断需要加入 WITHOUT_XATTR=1 的参数

所以增加:
export WITHOUT_XATTR=1

直接编译:
make

安装:
make install

检查1:/home /szricky/work/install/usr/sbin 已经拷贝了所有mtd-utils的工具.

检查2:file flash_eraseall
flash_eraseall: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped

有两点不符合要求, 第一是使用动态库, 第二是没有strip.

查看Makefile 和 common.mk 文件, 发现有 CFLAGS ?= -O2 -g 编译选项,

所以再加上一个选项:
export CFLAGS="-static -O2 -g"

重新运行make & make install

去掉调试信息, 在 /home/szricky/work/install/usr/sbin 运行 arm-none-linux-gnueabi-strip *

再次检查:file flash_eraseall
flash_eraseall: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.16, stripped

完成, 编译出来的工具如: flash_eraseall, ubimkvol, ubiattach 等都可以独立运行于android平台.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值