Подтвердить что ты не робот

Перекрестная компиляция Linux для архитектуры ARM

Мне интересна кросс-компиляция ядра Linux для цели ARM на хосте x86. Есть ли какая-то хорошая практика, которую вы рекомендуете? На ваш взгляд, какой из лучших кросс-компиляторов? Вы создали настраиваемую среду кросс-компиляции? Если да, какие советы у вас есть? Это хорошая идея?

4b9b3361

Ответ 1

Есть два подхода, которые я использовал для инструментов ARM/Linux. Самый простой способ - загрузить непосредственно встроенную цепочку инструментов.
Pro: он просто работает, и вы можете заняться интересной частью вашего проекта
Кон: вы застряли в любой версии gcc/binutils/libc, которую они выбрали

Если вам понадобится более поздняя версия, выберите crosstool-ng. Этот проект представляет собой инструмент настройки, аналогичный приложению конфигурации ядра Linux. Задайте, какие версии gcc, binutils, libc (GNU или uCLibc), потоковой передачи и ядра Linux для сборки и crosstool-ng делают все остальное (т.е. Загружает tar-шары, настраивает инструменты и создает их). Pro: вы получаете именно то, что вы выбрали во время настройки

Кон: вы получаете именно то, что вы выбрали во время конфигурации

означает, что вы берете на себя полную ответственность за выбор компилятора /binutil/libc и связанных с ними функций/недостатков/ошибок. Кроме того, как упоминалось в комментариях, существует некоторая "боль", участвующая в выборе версий binutils, библиотеки C и т.д., Поскольку не все комбинации обязательно работают вместе или даже строятся.

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

Обновить. Первоначально в качестве примера готовой цепочки инструментов был использован Инструменты CodeSourcery. Инструменты CodeSourcery для ARM были бесплатны скачать из Mentor Graphics, но теперь они называются Sourcery CodeBench и должны быть приобретены в Mentor Graphics. Другие варианты теперь включают Linaro, а также специальные инструменты распространения от Android, Ubuntu и других.

Ответ 2

Я использую инструментальную цепочку emdebian для компиляции файлов для своих машин ARM, которые недовольны компиляцией изначально в доступных небольших ресурсах (/я смотрю на ядро). Основной пакет gcc-4.X-arm-linux-gnueabi (X = 1,2,3) и содержит соответствующие команды gcc/cpp/ld/etc. Я добавляю это в свой sources.list:

deb http://www.emdebian.org/debian/ unstable main

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

Ответ 3

Я использовал scratchbox, экспериментируя с созданием приложений для maemo (Nokia N810), в котором используется ARM-процессор. Предположительно, кэш-память не ограничивается разработкой maemo.

Ответ 4

Я использовал crosstool для нескольких целей. Это здорово, пока вы хотите построить свою инструментальную цепочку с нуля. Конечно, есть несколько предварительно построенных инструментов для рук, а также просто google - слишком много, чтобы упомянуть здесь.

1) По моему мнению, создание вашей собственной инструментальной цепочки работает лучше всего. В итоге у вас жесткий контроль над всем, плюс, если вы новичок в встроенном Linux, это БОЛЬШОЕ обучение.

2) Не ходите с коммерческой инструментальной цепочкой. Даже если вы не хотите тратить время на создание собственного, есть свободные альтернативы.

Если ваша компания потратит деньги, попросите их купить вам отладчик jtag.

Это сэкономит вам массу времени., и это позволяет вам легко учиться и проходить через запуск ядра и т.д. Я настоятельно рекомендую использовать Lauterbach продукты jtag... Они работают с целым числом целей, а программное обеспечение является кросс-платформенным. Их поддержка также велика.

Если вы не можете получить отладчик jtag и работаете в ядре, используйте VM для этого, usermode linux, vmware..etc.. ваш код будет отлажен на x86.. портирование его на ваш цель руки будет другой историей, но это более дешевый способ сгладить некоторые ошибки.

Если вы портируете загрузчик, используйте uboot. Конечно, если вы используете ссылочную платформу, вам, вероятно, лучше использовать то, что они предоставляют с помощью BSP.

Я надеюсь, что это поможет.

Ответ 5

Buildroot - это инструмент, с которым мне очень повезло, для создания пользовательской инструментальной привязки uClibc из царапина. Это очень настраиваемый, а не чрезмерно конкретный вопрос о том, в каком дистрибутиве вы работаете.

Кроме того, многие из существующих пользователей (т.е. встроенные маршрутизаторы) также нацелены на ARM.

Ответ 6

Если вы используете Gentoo, получение кросс-компиляции инструментальной цепочки так же просто, как

$ emerge crossdev
$ crossdev -t $ARCH-$VENDOR-$OS-$LIBC

где ARCH равно arm или armeb, VENDOR - unknown или softfloat, OS - linux, а LIBC - gnu или uclibc.

Если все, что вам нужно, это компилятор (и компоновщик) для ядра, то часть LIBC не имеет значения, и вы можете использовать -s1/--stage1, чтобы сообщить crossdev, что вам нужно только binutils и gcc.

Ответ 7

Это то, что Eurotech использует для своего распределения ARM в Debian. Вы заметите, что они не рекомендуют использовать кросс-компилятор, если вы можете его избежать. Компиляция по самой цели, как правило, является более надежным способом получения результатов, которые, как вы знаете, будут выполняться.