介绍交叉编译mtd-util的文章以及很多了,但是没有1.4.6版本的详细过程,我刚好工作需要编译了一个,前半部分基本是参考网上资料,只有最后mtd-util编译出错的地方无法照搬(也就是ubifs编译的时候的错误),经过分析网上的解决办法,无非就是将类型定义提供给缺少的c文件,触类旁通的修改了一下,证明我的思路是对的!
因为有一段时间了,代码版本都在公司,大家可以参考时间戳下载对应2012-10-08日时候的最新版本的软件包.
1)首先编译e2fsprogs
#./configure --host=i686-linux --target=arm-linux CC=arm-linux-gcc --enable-elf-shlibs --prefix=/root/work/util/mtd-util/arm_installed
#make
Add a define around the statfs structure to prevent this:
#ifndef _SYS_STATFS_H <- add this line
struct statfs {
long f_type;
long f_bsize;
long f_blocks;
long f_bfree;
long f_bavail;
long f_files;
long f_ffree;
__kernel_fsid_t f_fsid;
long f_namelen;
long f_spare[6];
};
#endif <- add this line
2)编译lzo,没有遇到问题
#./configure --host=i686-linux --target=arm-linux CC=arm-linux-gcc --prefix=/root/work/util/mtd-util/arm_installed
#make
#make install
3)编译zlib(老办法,先用gcc configure配置,后修改Makefile交叉编译------开始编译的时候竟然忘记了,汗!)
CC=arm-linux-gcc
LDSHARED=arm-linux-gcc ..........................
4)编译mtd-util
#source ./cross.env
修改include/mtd/ubi-media.h
添加
/***************************liuyuze change start here*****************************/
#include <stdint.h> //change all __u8 __le16 __le32 __le64 to uint8_t uint16_t uint32_t uint64_t
/***************************liuyuze change stop here*****************************/
将这个头文件里面的所有__u8 __le16 __le32 __le64 替换成为 uint8_t uint16_t uint32_t uint64_t
vi 命令 可以使用
:%s/__u8/uint8_t/g
:%s/__le16/uint16_t/g
:%s/__le32/uint32_t/g
:%s/__le64/uint64_t/g
#make
#make install