2.5.1 Сборка набора инструментов |
Предыдущая Содержание Следующая |
Сборка кросс-платформенного инструментария немного сложна и может очень раздражать, когда процесс создания не получается. Поэтому целесообразно просто скачать готовые кросс-платформенные инструменты для вашей целевой платформы. Отметим, что хотя 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/. Распакуйте архив с помощью команд: 2.Конфигурирование: конфигурационный скрипт настраивает множество параметров компиляции, устанавливаемые двоичные файлы и конфигурацию компьютера. Командами для кросс-компилятора на рабочем компьютере для другой целевой платформы являются:
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 в каталоге верхнего уровня исходных текстов ядра: 5.Построение зависимостей (этот шаг необходим только для ядер версии 2.4). Выйдите из программы настройки, сохранив изменения, а затем выполните команду:
Сборка минимального GCC
Минимальный GCC - это компилятор, который имеет базовую поддержку языка Си. После сборки минимального GCC для целевой платформы может быть собрана glibc. Затем glibc используется для сборки полнофункционального GCC с поддержкой C++. Теперь после настройки заголовков ядра мы можем собрать минимальный GCC. Для этого выполним следующие действия:
Сборка 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 в оболочке, используя команду:
3.Сборка: чтобы собрать glibc, вызовите make в каталоге glibc. 4.Установка: чтобы установить glibc, вызовите make install в каталоге glibc.
Пересборка полнофункционального GCC
Повторите эти шаги сборки GCC для добавления дополнительной языковой поддержки. Вы должны также удалить уловку для сборки Dinhibit_libc, если вам пришлось ранее её применить. Также не забудьте убрать установку переменной окружения CC, сделанную для кросс-компиляции, чтобы для окончательной сборки вашего набора инструментов использовался родной компилятор. После этого на вашей системе должны быть доступны все средства компиляции. Как с помощью данного инструментария собирать ядро и приложения объясняет Глава 8.
| |
Предыдущая Содержание Следующая |