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