Linux кросс-компиляция для архитектуры ARM - PullRequest
21 голосов
/ 29 января 2009

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

Ответы [ 7 ]

30 голосов
/ 30 января 2009

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

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

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

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

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

7 голосов
/ 30 января 2009

Я использую emdebian toolchain для компиляции вещей для моих машин ARM, которые не радуются тому, что изначально скомпилированы с небольшими доступными ресурсами (/ me смотрит на ядро). Основной пакет - 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, это, вероятно, не так полезно, но gum это хорошо работает для меня.

6 голосов
/ 30 января 2009

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

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

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

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

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

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

Надеюсь, это поможет.

6 голосов
/ 29 января 2009

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

5 голосов
/ 30 января 2009

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

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

3 голосов
/ 30 января 2009

Если вы используете 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.

0 голосов
/ 29 января 2009

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

...