2.5.1 Сборка набора инструментов

Предыдущая  Содержание  Следующая V*D*V

Сборка кросс-платформенного инструментария немного сложна и может очень раздражать, когда процесс создания не получается. Поэтому целесообразно просто скачать готовые кросс-платформенные инструменты для вашей целевой платформы. Отметим, что хотя binutils и компилятор языка Си могут быть использованы как для сборки ядра, так и приложений, библиотека языка Си используется только в приложениях.

Вот набор ссылок, где вы можете взять последний кросс-платформенный инструментарий:

 

ARM: http://www.emdebian.org/

PPC: http://www.emdebian.org/

MIPS: http://www.linux-mips.org/

M68K: http://www.uclinux.org/

 

Теперь, если вам не повезло и кросс-компилятор для вашей платформы с полки не доступен, то шаги, описанные ниже, помогут вам в сборке кросс-платформенного инструментария.

 

1.Укажите TARGET.

2.Укажите версию Kernel/GCC/Glibc/Binutils.

3.Наложите патчи для всего вышеперечисленного, если таковые имеются.

4.Укажите в переменной PREFIX, куда поместить образ.

5.Соберите binutils.

6.Получить подходящие заголовки ядра для вашей платформы.

7.Скомпилируйте минимальный GCC.

8.Соберите glibc.

9.Перекомпилируйте полнофункциональный GCC.

 

Выбор целевого имени

 

Имя цели определяет компилятор, который вы собираете и его результат работы. Вот некоторые из основных типов:

 

- arm-linux: поддерживает процессора ARM, такие как armV4, armv5t и так далее.

- mips-linux: поддерживает разнообразные ядра MIPS, такие как r3000, r4000 и так далее.

- ppc-linux: комбинация Linux/PowerPC с поддержкой разнообразных чипов PPC.

- m68k-linux: для сборки Linux, работающего на процессоре Motorola 68k.

 

Полный список можно найти на сайте http://www.gnu.org.

 

Выбор правильной комбинации версий

 

Это самая сложная часть из всех шагов и, скорее всего, причина всех проблем. Необходимо проделать некоторые исследования и принять решение о правильном сочетании версий, которое будет работать на вашей целевой платформе. Для этого прочитайте наиболее активные архивы списков рассылки. Например, в качестве хорошей комбинации для ARM-Linux известны ARM/Kernel 2.6/GCC 2.95.1, GCC 3.3/BINUTILS 2.10.x или ARM/Kernel 2.4/GCC 2.95.1/BINUTILS 2.9.5.

 

Доступны ли какие-то патчи?

 

После принятия решения о номере версии, поищите доступные патчи. Решение, применять патч или нет, зависит исключительно от ваших требований.

 

Выбор структуры каталогов и установка переменных

 

Перед созданием набора инструментов должно бы принято решение о дереве каталогов для хранения инструментов и заголовков ядра. Дерево каталогов также экспортируется с помощью определения соответствующих переменных, чтобы сделать работу по сборке более удобной. Используются следующие переменные:

 

- TARGET: эта переменная содержит имя целевой машины. Например, TARGET=mips-linux.

- PREFIX: это базовый каталог, содержащий все другие подкаталоги вашего набора инструментов; по умолчанию для родного набора инструментов любой системы это почти всегда /usr. Это означает, что вы найдёте (двоичный) gcc в BINDIR = $PREFIX/bin и заголовки в INCLUDEDIR= $PREFIX/include. Чтобы при сборке кросс-компилятора не задеть собственные средства и инструменты в своей системе, вы должны поместить набор инструментов для кросс-разработки в каталог, отличный от каталога по умолчанию /usr. Например, PREFIX=/usr/local/mips/.

- KERNEL_SOURCE_DIR: это место, где хранятся исходные тексты ядра (или хотя бы заголовки ядра). Они вполне могут быть отличными от родного набора файлов, особенно, если вы занимаетесь кросс-компиляцией. Хорошей практикой является хранение файлов ядра Linux в каталоге PREFIX/TARGET. Например, KERNEL_SOURCE_DIR = PREFIX/TARGET/linux (например, /usr/local/mips/linux).

- NATIVE: платформа рабочего компьютера (обычно x86).

 

Сборка binutils

 

Первый шаг заключается в сборке GNU binutils. Версия 2.9.5 является стабильной, но рекомендуется последняя версия. Шаги заключаются в следующем:

 

1.Загрузка и распаковка: загрузите последнюю версию с ftp://ftp.gnu.org/gnu/binutils/. Распакуйте архив с помощью команд:
 
cd $PREFIX/src
tar -xzf binutils-2.10.1.tar.gz
 
Для исправления различных ошибок binutils могут быть зависимые от платформы патчи; как правило, использовать эти исходники является хорошей идеей, если они существуют. Лучшим местом для получения последней информации является лист рассылки о наборе инструментов.

2.Конфигурирование: конфигурационный скрипт настраивает множество параметров компиляции, устанавливаемые двоичные файлы и конфигурацию компьютера. Командами для кросс-компилятора на рабочем компьютере для другой целевой платформы являются:
 
./configure --target=$TARGET --prefix=$PREFIX
 
Например,
 
./configure --target=mips-linux --prefix=/usr/local/mips

 

3.Сборка: для сборки binutils вызовите make в каталоге binutils.

4.Установка: чтобы установить созданный набор инструментов, вызовите make install в каталоге binutils. Перед установкой убедитесь, что путь установки не заменяет существующие binutils, если у вас они уже есть, а делает это только если вы действительно этого хотите. Вы найдёте новый набор инструментов в PREFIX/TARGET/.

 

Получение подходящих заголовков ядра

 

Первым шагом в сборке GCC является настройка заголовков ядра. Кросс-компиляция набора инструментов требует заголовки ядра. Ниже приводится список шагов, которые необходимы для этого:

 

1.Загрузите ядро Linux с ftp.kernel.org. Распакуйте tar-архив. Мы предлагаем сделать это в каталог $PREFIX/linux (например, /usr/local/mips/linux).

2.Если необходимо, примените патчи ядра.

3.Укажите архитектуру, для которой вы извлекаете файлы заголовков. Это делается установкой переменной ARCH в Makefile верхнего уровня, например ARCH=mips.

4.Сконфигурируйте ядро, даже если вы не обязательно хотите собрать его. Дайте команду make menuconfig в каталоге верхнего уровня исходных текстов ядра:
 
make menuconfig
 
Это вызовет программу конфигурации сборки ядра. Если на вашей системе работает X, вы можете запустить make xconfig. Войдите в меню: System and processor type и выберите систему в соответствии с инструментами, которые вы создаёте.

5.Построение зависимостей (этот шаг необходим только для ядер версии 2.4). Выйдите из программы настройки, сохранив изменения, а затем выполните команду:
 
make dep
 
Эта команда на самом деле сделает ссылки (свяжет /usr/local/mips/linux/include/asm/ с /usr/local/mips/linux/include/asmarm и так далее) и убедится, что ваши заголовки ядра находятся в пригодном состоянии.

 

 

Сборка минимального GCC

 

Минимальный GCC - это компилятор, который имеет базовую поддержку языка Си. После сборки минимального GCC для целевой платформы может быть собрана glibc. Затем glibc используется для сборки полнофункционального GCC с поддержкой C++. Теперь после настройки заголовков ядра мы можем собрать минимальный GCC. Для этого выполним следующие действия:

 

1.Загрузка и распаковка: загрузите последнюю версию GCC с сайта http://gcc.gnu.org. Распакуйте загруженный GCC. Затем можно решить, применять патчи или нет, если они существуют.

2.Конфигурирование: это может быть сделано так же, как делалось для binutils.
 
./configure --target=$TARGET --prefix=$PREFIX
-–with-headers=$KERNEL_SOURCE_DIR/include --enable-languages=c
 
Например,
 
./configure --target=mips-linux --prefix=/usr/local/mips/
--with-headers=/usr/local/mips/linux/include --enable-languages=c
 
Последний параметр данной настройки -enable-languages=c необходим потому, что минимальный GCC может поддерживать другие языки, помимо Си, а на данный момент нам необходима поддержка именно языка Си.

3.Сборка: для компиляции минимального GCC необходимо просто вызвать команду make. Если компиляция выполняется первый раз, это может привести к следующей ошибке:
 
./libgcc2.c:41: stdlib.h: No such file or directory
./libgcc2.c:42: unistd.h: No such file or directory
make[3]: *** [libgcc2.a] Error 1
 
Эта ошибка может быть исправлена с помощью приёма, называемого inhibit-libc. Процедура следующая:

a.Отредактируйте файл конфигурации, добавив к TARGET_LIBGCC2_CFLAGS строку -Dinhibit_libc и -D__gthr_posix_h. После этого измените строку TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer –fPIC на TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC -Dinhibit_libc -D__gthr_posix_h.

b.Перезапустите конфигурацию.

4.Установка: Предположим, что создание кросс-компилятор прошло успешно, и теперь новый кросс-компилятор можно установить:
 
make install

 

Сборка glibc

 

Как упоминалось ранее, с каждым приложением компонуется glibc. Ядро, однако, не использует glibc (у него есть собственная  собранная внутри него минимальная библиотека языка Си). Глава 4 рассматривает альтернативы glibc, в основном из-за того, что glibc является тяжеловесной для встраиваемых систем. Независимо от того, используется ли glibc на целевой платформе, glibc имеет важное значение для сборки компилятора языка Си.

 

1.Загрузка и распаковка: из-за некоторых ограничений на экспорт программного обеспечения и зависимостей от внешнего исходного кода, glibc разделена на ядро glibc и набор пакетов. Эти пакеты называются дополнениями (add-ons). Наряду с исходным кодом glibс, дополнения должны быть распакованы и во время настройки дополнение должно быть включено. Встроенные системы в основном требуют дополнение потоков Linux. Следовательно, загрузка и распаковка выполняется для ядра и потоков Linux. Выберите на ftp.gnu.org/gnu/glibc свежий архив glibc и соответствующий архив потоков Linux. Распакуйте главный архив glibc куда удобно, например, в $PREFIX/src/glibc. Потом распакуйте архив дополнения в каталог, созданный, когда вы распаковывали основной архив glibc.

2.Конфигурирование: самое главное - это установить системную переменную CC, которая запрашивает у системы сборки компилятор, который будет использоваться. Так происходит потому, что вы хотите выполнить кросс-компиляцию glibc используя собранный недавно кросс-компилятор. Для этого установите значение переменной CC в оболочке, используя команду:
 
export CC=$TARGET-linux-gcc
 
Например, если целевой платформой является MIPS,
 
export CC= mips-linux-gcc
 
Выполните команду конфигурирования с соответствующими параметрами:
 
./configure $TARGET --build=$NATIVE-$TARGET
--prefix=$PREFIX --enable-add-ons=linux threads, crypt
 
Например, если целевой платформой является MIPS,
 
configure mips-linux --build=i686-linux --prefix=/usr/local/mips/ --enable-add-ons=linux threads, crypt

 

3.Сборка: чтобы собрать glibc, вызовите make в каталоге glibc.

4.Установка: чтобы установить glibc, вызовите make install в каталоге glibc.

 

Пересборка полнофункционального GCC

 

Повторите эти шаги сборки GCC для добавления дополнительной языковой поддержки. Вы должны также удалить уловку для сборки Dinhibit_libc, если вам пришлось ранее её применить. Также не забудьте убрать установку переменной окружения CC, сделанную для кросс-компиляции, чтобы для окончательной сборки вашего набора инструментов использовался родной компилятор.

После этого на вашей системе должны быть доступны все средства компиляции. Как с помощью данного инструментария собирать ядро и приложения объясняет Глава 8.

 

Предыдущая  Содержание  Следующая