Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

Я использую набор инструментов emdebian для компиляции материалов для моих машин 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, это, вероятно, не так полезно, но благодаря жвачка у меня это хорошо работает.

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

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

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

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

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

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

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

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

Строительный корень это инструмент, с которым мне достаточно повезло в создании пользовательской цепочки инструментов на основе 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.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top