加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

mtd-utils工具的编译,

发布时间:2020-12-15 17:46:27 所属栏目:百科 来源:网络整理
导读:在ubuntu 10.04上交叉编译编译 mtd-utils ===================================================================================== 在写文章之前,大概有两天时间在找mtd-utils的交叉编译资料,经常找到的都是过时的,或者版本很低,或者需要改一堆的Makefile,

在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,statically linked,stripped 完成,编译出来的工具如: flash_eraseall,ubimkvol,ubiattach 等都可以独立运行于android平台.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读