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



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

975   7  

7 ответов:

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

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

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

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

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

Я использую 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 это хорошо работает для меня.

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

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

1) на мой взгляд, создание собственной цепочки инструментов работает лучше всего. В конечном итоге вы получаете жесткий контроль над всем, плюс если вы новичок во встроенном linux, это отличный опыт обучения.

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

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

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

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

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

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

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

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

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

Где ARCH - это arm или armeb, поставщик-это unknown или softfloat, OS является linux, а LIBC является gnu или uclibc.

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

Это Евротек использует для их дистрибутив АРМ Дебиан. Вы заметите, что они не рекомендуют использовать кросс-компилятор, если этого можно избежать. Компиляция на самой цели, как правило, является более надежным способом получения выходных данных, которые, как вы знаете, будут выполняться.

Comments

    Ничего не найдено.