2.5 Кросс-платформенные инструменты GNU |
Предыдущая Содержание Следующая |
Одним из первых шагов в переносе встраиваемого Linux является создание набора инструментов для сборки ядра и приложений. Набор инструментов (toolchain), который используется во встраиваемых системах, известен как кросс-платформенный инструментарий. Что именно значит кросс-платформенный? Обычно для генерации кода для платформы x86 используется компилятор для x86. Однако, на встроенных системах это может быть не так. Целевая платформа, на которой должны работать приложения и ядро, может не иметь достаточно памяти и дискового пространства для размещения инструментов сборки. Кроме того, в большинстве случаев целевая платформа может не иметь собственного компилятора. В таких случаях решением является кросс-компиляция. Кросс-компиляция обычно происходит на настольном компьютере (как правило, на базе x86) с помощью компилятора, который работает на Linuxx86 (HOST) и генерирует код, исполняемый на встроенной целевой (TARGET) платформе. Этот процесс компиляции на HOST для генерации кода для системы TARGET называется кросс-компиляцией, а компилятор, используемый с этой целью, называется кросс-компилятор. Любой компилятор требует большого числа вспомогательных библиотек (таких как libc) и двоичных файлов (таких как трансляторы и компоновщики). Можно было бы потребовать аналогичный набор инструментов также и для кросс-компиляции. Весь этот набор инструментов, двоичных файлов и библиотек имеет общее название кросс-платформенный инструментарий. Самым надёжным инструментом для компиляции с открытым кодом, доступным для различных платформ, является компилятор GNU, а его вспомогательные инструменты называются инструментарий GNU (GNU toolchain). Эти компиляторы поддерживаются множеством разработчиков со всего Интернета и проверены миллионами людей по всему миру на различных платформах. Кросс-платформенный инструментарий имеет перечисленные ниже компоненты:
- Утилиты (binutils): утилиты представляют собой набор программ, необходимых для компиляции/компоновки/ассемблирования и других операций отладки. - Компилятор GNU языка Си (GNU C compiler): основной компилятор языка Си, используемый для генерации объектного кода (и ядра, и приложений). - Библиотека GNU языка Си (GNU C library): эта библиотека реализует интерфейсы системных вызовов, таких как open, read, и других, а также других вспомогательных функций. Все разрабатываемые приложения должны быть скомпонованы с этой базовой библиотекой.
Помимо GCC и glibc, важной частью набора инструментов также являются binutils. Некоторыми из утилит, которые составляют binutils, являются следующие:
▪addr2line: она переводит адреса программы в имена файлов и номера строк. Зная адрес и исполняемый файл, она использует отладочную информацию в исполняемом файле, чтобы выяснить, какое имя файла и какой номер строки связаны с указанным адресом. ▪ar: программа GNU ar создаёт, модифицирует и извлекает файлы из архивов. Архив представляет собой один файл, содержащий набор других файлов в структуре, которая позволяет извлекать отдельные оригинальные файлы (так называемые члены архива). ▪as: GNU as является семейством ассемблеров. Если вы используете (или использовали) ассемблер GNU на одной архитектуре, вы должны найти аналогичной среду, когда вы используете её на другой архитектуре. Каждая версия имеет много общего с другими, включая формат объектных файлов, большинство директив ассемблера (часто называемых псевдо-операциями) и синтаксис ассемблера. ▪c++filt: программа c++filt выполняет обратное действие: декодирует низкоуровневые имена в имена пользовательского уровня, так что компоновщик может избежать конфликтов таких перегруженных функций. ▪gasp: макро-препроцессор ассемблера GNU. ▪ld: компоновщик GNU ld объединяет несколько объектных и архивных файлов, перемещает их данные и связывает символьные ссылки. Вызов ld часто является последним шагом в сборке новой скомпилированной программы для запуска. ▪nm: GNU nm выводит символы из объектных файлов. ▪objcopy: утилита GNU objcopy копирует содержимое одного объектного файла в другой. Для чтения и записи объектных файлов objcopy использует библиотеку GNU BFD. Она может записать объектный файл назначения в формате, отличном от исходного объектного файла. Точное поведение objcopy управляется параметрами командной строки. ▪objdump: утилита GNU objdump выводит информацию об одном или нескольких объектных файлах. Какую информацию отображать, указывается параметрами, например, таблицу символов, GOT, и тому подобное. ▪ranlib: ranlib генерирует список содержимого архива и сохраняет его в этом архиве. Список содержит каждый символ, определяемый членом архива, который является перемещаемым объектным файлом. ▪readelf: она интерпретирует заголовки файлов ELF. ▪size: утилита GNU size выводит размеры частей и общий размер для каждого из объектных файлов в своём списке аргументов. По умолчанию для каждого объектного файла или модуля в архиве создаётся одна строка вывода. ▪strings: GNU strings распечатывает последовательности печатных символов, которые по крайней мере являются символами и заканчиваются непечатаемым символом. По умолчанию она выводит только строки из проинициализированных и загружаемых частей объектных файлов; для других типов файлов она выводит строки из всего файла. ▪strip: GNU strip отбрасывает все символы из целевого объектного файла(ов). Список объектных файлов может включать архивы. Должен быть задан по крайней мере один объектный файл. strip изменяет файлы с именами, указанными в своём аргументе, вместо записи модифицированных копий под другими именами.
|
Предыдущая Содержание Следующая |