Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6078
  • 博文数量: 2
  • 博客积分: 30
  • 博客等级: 民兵
  • 技术积分: 25
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-15 17:26
文章分类
文章存档

2012年(2)

我的朋友
最近访客

分类: LINUX

2012-04-09 16:52:45

mtd-utils-1.4.6编译

       对于mtd-utils-1.4.6的编译,需要以下几个软件包:mtd-utils-1.4.6.tar.bz2 zlib-1.2.3.tar.gz lzo-2.04.tar.gz e2fsprogs-1.41.3.tar.gz。本次编译使用的编译工具链是arm-linux-gcc 3.4.6 开发环境是Red Hat Enterprise Linux 5。下面开始详细的编译过程介绍(带#开头的表示linux终端输入的命令):

1、 解压mtd-utils-1.4.6.tar.bz2

# tar -xjvf mtd-utils-1.4.6.tar.bz2

2、 解压安装zlib-1.2.3.tar.gz

# tar -xzvf zlib-1.2.3.tar.gz

# cd zlib-1.2.3

# CC=arm-linux-gcc ./configure --shared --prefix=/root/HH/mtd-utils-1.4.6/arm-linux

# make

# make install

 

编译完成以后,通过make install将头文件以及编译生成的库文件安装(copy)到/root/HH/mtd-utils-1.4.6/arm-linux目录,即$(BUILDDIR)中。此后在安装mtd-utils-1.4.6.tar.bz2时要记得修改mtd-utils-1.4.6目录下的Makefile文件,在第一行添加如下内容:

export  ZLIBCPPFLAGS=-I/root/HH/mtd-utils-1.4.6/arm-linux/include

目的是指定刚刚安装的zlib库的头文件所在目录(下面要安装的lzo-2.04.tar.gze2fsprogs-1.41.3.tar.gz也是使用该目录)。此处使用export声明一个变量是为了在接下来调用其它Makefile时该变量依然有效。否则,在执行mtd-utils-1.4.6/mkfs.ubifs/Makefile时会报错。

 

3、 解压安装lzo-2.04.tar.gz

# tar -xzvf lzo-2.04.tar.gz

# cd lzo-2.04

# CC=arm-linux-gcc ./configure --host=arm-linux \ --prefix=/root/HH/mtd-utils-1.4.6/arm-linux --enable-shared

# make

# make install

 

4、 解压安装e2fsprogs-1.41.3.tar.gz(如果仅需要nand flash相关工具的话,这个可以不安装,以后在安装mtd-utils-1.4.6.tar.bz2时会出现错误:mkfs.ubifs.h:48:23: error: uuid/uuid.h: No such file or directory但可不理会) 

# tar -xzvf e2fsprogs-1.41.3.tar.gz

# cd e2fsprogs-1.41.3

# CC=arm-linux-gcc ./configure --host=arm-linux \ --prefix=/root/HH/mtd-utils-1.4.6/arm-linux

# make

# make install-libs

5、 安装mtd-utils-1.4.6.tar.bz2

# cd mtd-utils-1.4.6

A.       Makefile 中加入

export ZLIBCPPFLAGS=-I/root/HH/mtd-utils-1.4.6/arm-linux/include

B.        serve_image.c recv_image.c中预定义AI_ADDRCONFIG

# define AI_ADDRCONFIG  0x0020 (来自于4.3.2

也可在MakefileTARGETS=…中注释掉serve_image, recv_image以不生成serve_image, recv_image.

C.        include/mtd目录的ubi-media.h中加入:

#ifdef __CHECKER__

#define __bitwise__ __attribute__((bitwise))

#else

#define __bitwise__

#endif

#ifdef __CHECK_ENDIAN__

#define __bitwise __bitwise__

#else

#define __bitwise

#endif

 

typedef __u16 __bitwise __le16;

typedef __u16 __bitwise __be16;

typedef __u32 __bitwise __le32;

typedef __u32 __bitwise __be32;

#if defined(__GNUC__)

typedef __u64 __bitwise __le64;

typedef __u64 __bitwise __be64;

#endif

typedef __u16 __bitwise __sum16;

typedef __u32 __bitwise __wsum;

D.       mkfs.ubifs目录的mkfs.bbifs.h中加入

#define    FS_COMPR_FL            0x00000004 /* Compress file */

#define FS_SYNC_FL              0x00000008 /* Synchronous updates */

#define FS_IMMUTABLE_FL   0x00000010 /* Immutable file */

#define FS_APPEND_FL            0x00000020 /* writes to file may only append */

#define FS_DIRSYNC_FL        0x00010000 /* dirsync behavior */

#define    FS_IOC_GETFLAGS    _IOR( 'f', 1, long )

 

# make CROSS=arm-linux- WITHOUT_XATTR=1

 

其中CROSS= arm-linux- 指定编译器前缀。WITHOUT_XATTR=1是因为mtd-utils中有些源码使用了zlib.h中的库文件而不使用acl.h的库文件。

 

 

 

 

附:

1、如果在安装mtd-utils-1.4.6.tar.bz2时出现如下错误:

是因没有指定WITHOUT_XATTR=1

WITHOUT_XATTR=1是因为mtd-utils中有些源码使用了zlib.h中的库文件而不使用acl.h的库文件。

如在mkfs.jfFs2.c文件中:

#ifndef WITHOUT_XATTR

    #include

    #include

#endif

    #include

    #define crc32 __zlib_crc32

    #include

#undef crc32

 

2、如果在安装mtd-utils-1.4.6.tar.bz2时出现如下错误:

compr_zlib.c:39:18: error: zlib.h: No such file or directory

是因为没有安装zlib库的原因

 

3、如果在安装mtd-utils-1.4.6.tar.bz2时出现如下错误:

是因为没有安装lzo库的原因

 

4、使用编译工具链arm-linux-gcc 3.4.6时会出现如下错误:

可能是因为编译器太老,在相关头文件中没有预定义

现在解决的方法是人为预定义(来自于4.3.2

# define AI_ADDRCONFIG  0x0020

也可在MakefileTARGETS=…中注释掉serve_image, recv_image以不生成serve_image, recv_image.

 

include/mtd目录的ubi-media.h中加入:(来自于4.3.2

#ifdef __CHECKER__

#define __bitwise__ __attribute__((bitwise))

#else

#define __bitwise__

#endif

#ifdef __CHECK_ENDIAN__

#define __bitwise __bitwise__

#else

#define __bitwise

#endif

 

typedef __u16 __bitwise __le16;

typedef __u16 __bitwise __be16;

typedef __u32 __bitwise __le32;

typedef __u32 __bitwise __be32;

#if defined(__GNUC__)

typedef __u64 __bitwise __le64;

typedef __u64 __bitwise __be64;

#endif

typedef __u16 __bitwise __sum16;

typedef __u32 __bitwise __wsum;

 

mkfs.ubifs目录的mkfs.bbifs.h中加入(来自于4.3.2

#define    FS_COMPR_FL            0x00000004 /* Compress file */

#define FS_SYNC_FL              0x00000008 /* Synchronous updates */

#define FS_IMMUTABLE_FL   0x00000010 /* Immutable file */

#define FS_APPEND_FL            0x00000020 /* writes to file may only append */

 

#define FS_DIRSYNC_FL           0x00010000 /* dirsync behaviour */

#define    FS_IOC_GETFLAGS    _IOR( 'f', 1, long )

 

5、如果在安装mtd-utils-1.4.6.tar.bz2时出现如下错误:

是因为没有安装e2fsprogs库的原因,如果仅需要nand flash相关工具的话,这个可以不安装

 

阅读(1976) | 评论(0) | 转发(0) |
0

上一篇:bind函数

下一篇:没有了

给主人留下些什么吧!~~