Инструменты пользователя

Инструменты сайта


wiki:cross-compiling-mtd-utils

Кросс компиляция 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' для линковщика, поэтому динамические библиотеки в файловой системе не нужны. Если же вы скомпилировали утилиты и библиотеки динамическими, то библиотеки надо скопировать в файловую систему обязательно.

wiki/cross-compiling-mtd-utils.txt · Последние изменения: 2016/06/28 16:49 — maxx