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