** Кросс компиляция MTD-UTILS для архитектуры ARM **
====== Компилятор ======
Используем компилятор gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux, но можно использовать и любой другой с аппаратной поддержкой плавающей точки. Компилятор по умолчанию установлен в директорию '/opt'
Утилиты MTD зависят от библиотек zlib и LZO, а также uuid от утилиты e2fsprogs.
====== Компиляция ======
Создадим директорию специально для компиляции библиотек и mtd-utils, например, '/media/storage/Projects/niia/cruis-v/imx/libs' и будем указывать её как PREFIX. Пропишем путь к компилятору в переменную окружения PATH, чтобы не использовать абсолютные пути:
$ export PATH=/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin:$PATH
===== Zlib =====
wget http://zlib.net/zlib-1.2.8.tar.gz
tar -xzf zlib-1.2.8.tar.gz
cd zlib-1.2.8/
./configure --prefix=/media/storage/Projects/niia/cruis-v/imx/libs
Теперь надо отредактировать Makefile, исправить следующие переменные:
CROSS=arm-linux-gnueabihf
CC=arm-linux-gnueabihf-gcc
LDSHARED=${CROSS}-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
CPP=${CROSS}-gcc -E
AR=${CROSS}-ar
RANLIB=${CROSS}-ranlib
Иеперь компилируем и устанавливаем:
make -j4
make install
===== LZO =====
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
tar -xzf lzo-2.06.tar.gz
cd lzo-2.06/
./configure --prefix=/media/storage/Projects/niia/cruis-v/imx/libs --host=arm-linux-gnueabihf
make
make install
===== e2fsprogs =====
wget https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v1.42.9/e2fsprogs-1.42.9.tar.gz
tar -xzf e2fsprogs-1.42.9.tar.gz
cd e2fsprogs-1.42.9
./configure --prefix=/media/storage/Projects/niia/cruis-v/imx/libs --host=arm-linux-gnueabihf LDFLAGS=-static
make -j4 && make install
cd lib/uuid/
make install
===== MTD Utils =====
git clone git://git.infradead.org/mtd-utils.git
cd mtd-utils/
git checkout v1.5.0
Отредактируйте Makefile и добавьте следующие строки в начало файла сразу же за переменной VERSION:
PREFIX=/media/storage/Projects/niia/cruis-v/imx/libs
CROSS=arm-linux-gnueabihf-
ZLIBCPPFLAGS = -I$(PREFIX)/include
ZLIBLDFLAGS = -L$(PREFIX)/lib
LZOCPPFLAGS = -I$(PREFIX)/include
LZOLDFLAGS = -L$(PREFIX)/lib
LDFLAGS += $(ZLIBLDFLAGS) $(LZOLDFLAGS) -static
CFLAGS ?= -O2 -g $(ZLIBCPPFLAGS) $(LZOCPPFLAGS)
Компилируем и устанавливаем
WITHOUT_XATTR=1 make -j4
make install
Теперь переходим в директорию, которую мы указывали как PREFIX и заходим в **sbin**. В этой директории находятся все наши скомпилированные утилиты, они имеют большой размер, потому что содержат отладочные символы. Обработаем их утилитой strip, чтобы уменьшить размер:
sbin$ arm-linux-gnueabihf-strip *
arm-linux-gnueabihf-strip:flash_eraseall: File format not recognized
не обращаем внимание на flash_eraseall, т.к. это не исполняемый файл, а текстовый скрипт. Теперь можно можно скопировать утилиты в файловую систему. Мы использовали опцию '-static' для линковщика, поэтому динамические библиотеки в файловой системе не нужны. Если же вы скомпилировали утилиты и библиотеки динамическими, то библиотеки надо скопировать в файловую систему обязательно.