mtd utils交叉編譯

2021-06-16 13:13:01 字數 4029 閱讀 1174

最後終於解決,原因是路徑的問題

1、原始碼

說明: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的庫,否則會報錯:

有人寫到出現此錯誤需要安裝libacl-dev,個人覺得如果指定without_xattr=1,就不需要安裝!

1.準備工具

mtd-utils-1.4.5.tar.bz2

或zlib-1.2.5.tar.bz2 或

lzo-2.04.tar.gz

e2fsprogs-1.41.14.tar.gz

2.編譯安裝

解壓mtd-utils-1.4.5.tar.bz2

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

#cd mtd-utils-1.4.5

# 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檔案中:

#ifndef without_xattr

#include 

#include 

#endif

#include 

#define crc32 __zlib_crc32

#include 

#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

#tar jxvf zlib-1.2.5.tar.bz2

#cd zlib-1.2.5

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

#make

#make install

編譯完成以後,通過make install將標頭檔案以及編譯生成的庫檔案安裝(copy)到/home/wloveg/mtd-utils-1.4.5/arm-none-linux-gnueabi目錄,即$(builddir)中。此時要修改mtd-utils-1.4.5目錄下的makefile檔案,在第一行新增如下內容:

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:

#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

#tar zxvf lzo-2.04.tar.gz

#cd lzo-2.04

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

#make

#make install

編譯完成以後,通過make install將標頭檔案以及編譯生成的庫檔案安裝(copy)到/home/wloveg/mtd-utils-1.4.5/arm-none-linux-gnueabi目錄,即$(builddir)中。

繼續編譯mtd-utils-1.4.5:

# 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

#tar zxvf e2fsprogs-1.41.14.tar.gz

#cd e2fsprogs-1.41.14

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

#make

#make install-libs

編譯完成以後,通過make install-libs將標頭檔案以及編譯生成的庫檔案安裝(copy)到/home/wloveg/mtd-utils-1.4.5/arm-none-linux-gnueabi目錄,即$(builddir)中。

繼續編譯mtd-utils-1.4.5:

# make cross=arm-none-linux-gnueabi- without_xattr=1

編譯成功!

以上這種編譯mtd-utils的方法並沒有將所有需要編譯的庫安裝到編譯器目錄下,而是安裝到mtd-utils自動生成的$(builddir)目錄。這樣做的好處是避免因編譯不成功影響編譯器使用,缺點就是如果下次再編譯其他軟體也用到了相同的庫,那麼必須重新編譯庫,因為上次編譯的庫沒有安裝在

mtd utils交叉編譯

1.準備工具 mtd utils 1.4.5.tar.bz2 或zlib 1.2.5.tar.bz2 或 lzo 2.04.tar.gz 原文 e2fsprogs 1.41.14.tar.gz 2.編譯安裝 解壓mtd utils 1.4.5.tar.bz2 tar jxvf mtd utils 1...

mtd utils交叉編譯

由於製作的busybox缺少ubiformat命令,然後自己移植mtd utils,這裡記錄下 環境 ubuntu虛擬機器19.04 mtd utils依賴zlib lzo e2fsprogs提供的庫和標頭檔案 zlib 1.2.11 lzo 2.10 e2fsprogs 1.45.3 mtd ut...

交叉編譯mtd utils方法

1 安裝需要的庫 mtd utils 依賴的庫 1 zlib 庫 編譯方法 cc mips linux cc configure shared prefix xx prefix xx 指定生成好的庫檔案存放的資料夾,make install 到對應得資料夾 安裝方法 make install 2 l...