mtd-utils交叉编译 .

在网上参考了很多人的文章,开始就是编译不过去,提示/sys/acl.h无法找到!

最后终于解决,原因是路径的问题

 

1、源码

http://www.zlib.net/zlib-1.2.5.tar.gz

http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz

ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-1.4.1.tar.bz2

 

说明:zlib和lzo是编译mtd-utils所需库文件,需提前交叉编译完成,以供mtd-utils编译时调用

 

2、编译安装zlib:

root@:/home/# cd zlib-1.2.5

root@:/home/zlib-1.2.5# CC=arm-none-linux-gnueabi-gcc  ./configure --shared --prefix=/opt/armv6/codesourcery/arm-none-linux-gnueabi/

root@:/home/zlib-1.2.5# make

root@:/home/zlib-1.2.5# make install

 

其中-prefix指定zlib的安装路径,需要指定到交叉编译器所在路径!

 

 

3、编译安装lzo:

root@:/home/# cd lzo-2.03/

root@:/home/lzo-2.03# 编译安装lzo:

root@:/home/# cd lzo-2.03/

root@:/home/lzo-2.03# CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/opt/armv6/codesourcery/arm-none-linux-gnueabi/

root@:/home/lzo-2.03# make

root@:/home/lzo-2.03# make install

 

 

4、编译mtd-utils

 

make CROSS=/opt/armv6/codesourcery/bin/arm-none-linux-gnueabi- WITHOUT_XATTR=1

 

 

指定WITHOUT_XATTR=1 是由于在编译 mkfs.jffs2使其不调用acl.h而是用zlib的库,否则会报错:

mkfs.jffs2.c:69:21: error: sys/acl.h: No such file or directory
mkfs.jffs2.c: In function ‘formalize_posix_acl’:
mkfs.jffs2.c:1118: error: ‘ACL_USER_OBJ’ undeclared (first use in this function)
mkfs.jffs2.c:1118: error: (Each undeclared identifier is reported only once
mkfs.jffs2.c:1118: error: for each function it appears in.)
mkfs.jffs2.c:1119: error: ‘ACL_GROUP_OBJ’ undeclared (first use in this function)
mkfs.jffs2.c:1120: error: ‘ACL_MASK’ undeclared (first use in this function)
mkfs.jffs2.c:1121: error: ‘ACL_OTHER’ undeclared (first use in this function)
mkfs.jffs2.c:1127: error: ‘ACL_USER’ undeclared (first use in this function)
mkfs.jffs2.c:1128: error: ‘ACL_GROUP’ undeclared (first use in this function)
make: *** [mkfs.jffs2.o] Error 1

 

有人写到出现此错误需要安装libacl-dev,个人觉得如果指定WITHOUT_XATTR=1,就不需要安装!

 

 

 

1.准备工具

  1. mtd-utils-1.4.5.tar.bz2 ftp://ftp.infradead.org/pub/mtd-utils/

  2. 或http://download.csdn.net/source/3531827

  3. zlib-1.2.5.tar.bz2 http://zlib.net 或http://download.csdn.net/source/3531822

  4. lzo-2.04.tar.gz http://www.oberhumer.com/opensource/lzo/download/

  5. e2fsprogs-1.41.14.tar.gz http://sourceforge.net/projects/e2fsprogs/

2.编译安装

解压mtd-utils-1.4.5.tar.bz2

  1. #tar jxvf mtd-utils-1.4.5.tar.bz2

  2. #cd mtd-utils-1.4.5

  3. # make CROSS=arm-none-linux-gnueabi- WITHOUT_XATTR=1

其中CROSS=arm-none-linux-gnueabi-指定编译器前缀。

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

如在mkfs.jfFs2.c文件中:

  1. #ifndef WITHOUT_XATTR

  2.     #include <sys/xattr.h>

  3.     #include <sys/acl.h>

  4. #endif

  5.     #include <byteswap.h>

  6.     #define crc32 __zlib_crc32

  7.     #include <zlib.h>

  8. #undef crc32

通常此时编译不通过,出现如下错误:compr_zlib.c:39:18: error: zlib.h: No such file or directory。同时,在mtd-utils-1.4.5目录下会生成一个与编译器前缀同名的目录arm-none-linux-gnueabi,该目录为Makefile中的$(BUILDDIR)。

 

接下来编译zlib库:

解压zlib-1.2.5.tar.bz2

  1. #tar jxvf zlib-1.2.5.tar.bz2

  2. #cd zlib-1.2.5

  3. #CC=arm-none-linux-gnueabi-gcc ./configure --shared --prefix=/home/wloveg/mtd-utils-1.4.5/arm-none-linux-gnueabi

  4. #make

  5. #make install

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

  1. export ZLIBCPPFLAGS=-I/home/wloveg/mtd-utils-1.4.5/arm-none-linux-gnueabi/include

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

 

继续编译mtd-utils-1.4.5:

  1. #make CROSS=arm-none-linux-gnueabi- WITHOUT_XATTR=1

会出现如下错误:compr_lzo.c:31:23: error: lzo/lzo1x.h: No such file or directory。说明缺少lzo库。

 

接下来编译lzo库:

解压lzo-2.04.tar.gz

  1. #tar zxvf lzo-2.04.tar.gz

  2. #cd lzo-2.04

  3. #CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/home/wloveg/mtd-utils-1.4.5/arm-none-linux-gnueabi

  4. #make

  5. #make install

编译完成以后,通过make install将头文件以及编译生成的库文件安装(copy)到/home/wloveg/mtd-utils-1.4.5/arm-none-linux-gnueabi目录,即$(BUILDDIR)中。

继续编译mtd-utils-1.4.5:

  1. # make CROSS=arm-none-linux-gnueabi- WITHOUT_XATTR=1

会出现如下错误:mkfs.ubifs.h:48:23: error: uuid/uuid.h: No such file or directory。说明缺少头文件uuid/uuid.h,原因是缺少e2fsprogs。注:如果仅需要nand flash相关工具的话,这个错误可以不用理会,nand flash相关工具已经在/home/wloveg/mtd-utils-1.4.5/arm-none-linux-gnueabi目录下生成。

 

编译e2fsprogs-1.41.14:

解压e2fsprogs-1.41.14.tar.gz

  1. #tar zxvf e2fsprogs-1.41.14.tar.gz

  2. #cd e2fsprogs-1.41.14

  3. #./configure --host=arm-linux CC=arm-none-linux-gnueabi-gcc --prefix=/home/wloveg/mtd-utils-1.4.5/arm-none-linux-gnueabi

  4. #make

  5. #make install-libs

编译完成以后,通过make install-libs将头文件以及编译生成的库文件安装(copy)到/home/wloveg/mtd-utils-1.4.5/arm-none-linux-gnueabi目录,即$(BUILDDIR)中。

 

继续编译mtd-utils-1.4.5:

  1. # make CROSS=arm-none-linux-gnueabi- WITHOUT_XATTR=1

编译成功!

以上这种编译mtd-utils的方法并没有将所有需要编译的库安装到编译器目录下,而是安装到mtd-utils自动生成的$(BUILDDIR)目录。这样做的好处是避免因编译不成功影响编译器使用,缺点就是如果下次再编译其他软件也用到了相同的库,那么必须重新编译库,因为上次编译的库没有安装在

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值