mtd-util 1.4.6 arm版本移植

本文档详细记录了在ARM平台上交叉编译mtd-util 1.4.6的步骤,包括e2fsprogs、lzo和zlib的编译过程。在编译mtd-util时遇到ubifs相关错误,通过修改头文件将特定类型替换为uint8_t等解决。提供了具体的时间戳,以便读者找到相应的软件包版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍交叉编译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

编译出错,参考
http://blog.chinaunix.net/uid-26119896-id-3257394.html
http://forums.gentoo.org/viewtopic-p-644204.html
按如下形式修改/misc/e4defrag.c:
新增
#ifndef __NR_fallocate
#define __NR_fallocate 324
#endif
注释掉这些行
/#ifndef __NR_sync_file_range
//#ifndef __NR_sync_file_range2
//#error Your kernel headers dont define __NR_sync_file_range
//#endif
//#endif
sync_file_range 函数修改为如下形式
int sync_file_range(int fd, loff_t offset, loff_t length, unsigned int flag)
{
#ifdef __NR_sync_file_range
  return syscall(__NR_sync_file_range, fd, offset, length, flag);
//#else
  #elif defined(__NR_sync_file_range2)
    return syscall(__NR_sync_file_range2, fd, flag, offset, length);
  #else
    return fsync(fd);
#ifndef SYNC_FILE_RANGE_WAIT_BEFORE
#define SYNC_FILE_RANGE_WAIT_BEFORE 0
#endif
#ifndef SYNC_FILE_RANGE_WRITE
#define SYNC_FILE_RANGE_WRITE 0
#endif
#ifndef SYNC_FILE_RANGE_WAIT_AFTER
#define SYNC_FILE_RANGE_WAIT_AFTER 0
#endif
#endif
}
For some reason the statfs structure is getting defined twice. Edit /usr/include/asm/statfs.h

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交叉编译------开始编译的时候竟然忘记了,汗!)

#export CC=gcc
#./configure --shared --prefix=/root/work/util/mtd-util/arm_installed
# vim Makefile
CC=arm-linux-gcc
LDSHARED=arm-linux-gcc ..........................
#make

4)编译mtd-util

#echo -e "
CROSS=arm-linux-
DESTDIR=/root/work/util/mtd-util/arm_installed
WITHOUT_XATTR=1
CFLAGS="-static "
CPPFLAGS=-I/root/work/util/mtd-util/arm_installed/include
LDFLAGS=-L/root/work/util/mtd-util/arm_installed/lib
export CROSS  DESTDIR WITHOUT_XATTR CFLAGS CPPFLAGS LDFLAGS" > cross.env

#source ./cross.env

其次在 recv_image.c serve_image.c中添加
# define AI_ADDRCONFIG  0x0020

修改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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值