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

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

В общем, я бы порекомендовал паттерн решателя Spring здесь. Код выглядит примерно так, где KeyType обычно является перечислением или строкой. Общая идея заключается в том, что каждая реализация сообщает вам, с какими вещами (этапами, типами, параметрами и т. Д.) Она может справиться, и затем вы ищите соответствие. (Вариант, в котором нет прямого поиска по отображению, - это иметь boolean canHandle(something) и повторяться до тех пор, пока вы его не найдете.)

interface StageProcessor {
    OutputType process(Stage stage);
    KeyType stageKey();
}

@Service
class StageProcessors {
    Map stageProcessors;

    StageProcessors(Collection processors) {
        stageProcessors = processors.stream().collect(groupingBy(StageProcessor::stageKey));
        assert stageProcessors.size() == expectedNumberOfProcessors;
    }

    StageProcessor getProcessor(KeyType stage) {
        // although usually your service would take care of dispatching directly
        return stageProcessors.get(stage);
    }
}

(И в качестве примечания: Избегать внедрения поля. )

21
задан 17.04.2020, 11:44

7 ответов

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

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

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

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

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

30
ответ дан 17.04.2020, 11:44
  • 1
    Другой довод "против" для crosstool-ng - то, что необходимо узнать для себя, какие комбинации gcc/glibc/target версий архитектуры работают и которые не делают. (Хорошо, можно искать их в " known-to-work" список на crosstool-ng домашней странице, но если Ваша предпочтительная комбинация не находится в списке, который это до себя, чтобы узнать, работает ли это. – mmmmmmmm 17.04.2020, 11:45
  • 2
    Это верно, но запускающийся с одной из рабочих конфигураций делает вещи легче. Если необходимо сделать канадские перекрестные инструменты для Windows и/или другой ОС, то предварительно созданные никогда не могут соответствовать. Определенно требуется несколько недель, немало минут для использования ct-ng. Однако генерация кода обычно лучше, чем pre-builts, и можно получить последние функции при желании (LTO, C++ 0x, C++ 11, и т.д.). – artless noise 17.04.2020, 11:45

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

7
ответ дан 17.04.2020, 11:45
  • 1
    LYRICSBOY, спасибо за Ваш ответ. Вы могли бы, слышал об игре Кота Разговора в андроиде и других также. Я хочу точно то же самое в своем приложении. У меня есть кадры размера 320x480 пикселей, как я сказал ранее, таким образом, я ищу о спрайтах на Google и нашел, что спрайты полезны для небольшого размера изображений не для большого pngs. И для Растровой Фабрики i don' t знают, что, как я могу загрузиться, все это структурирует в одном Растровом объекте или как выполнить мою анимацию с помощью Растровых классов вместо AnimationDrawable. – Scorpion 19.12.2019, 12:50

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

6
ответ дан 17.04.2020, 11:45

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

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

, где ARCH arm или armeb, ПОСТАВЩИК unknown или softfloat, OS linux, и LIBC gnu или uclibc.

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

3
ответ дан 17.04.2020, 11:46

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

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

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

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

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

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

я надеюсь, что это помогает.

6
ответ дан 17.04.2020, 11:46
  • 1
    Однако коммерческие наборы инструментальных средств являются not' t все настолько плохо - я раньше работал на MontaVista и I' m уверенный, что было много значения - добавляют во всем портировании и отладке работы, которую мы сделали. Несомненно, Вы можете самокрутка минимальный набор инструментальных средств достаточно легко, но получение полного встроенного дистрибутива является намного большим количеством работы. – Charles Duffy 17.04.2020, 11:46
  • 2
    Современные версии qemu имеют поддержку gdbclient, так, пока Ваша цель ARM является той, что qemu покрывает, использование этого для виртуальной тестовой среды работает прилично, и doesn' t требуют, чтобы Вы отладили на различной архитектуре. Но да, there' s никакая замена для реальных аппаратных средств с портом JTAG. – Charles Duffy 17.04.2020, 11:47
  • 3
    Лаутербах действительно хорош, но они действительно идут с тегом высокой цены...! – Johan 17.04.2020, 11:47
  • 4
    Очень верный, но по всем, если Вы думаете о engineer' s почасовая ставка и сумма printk отладка VS стоимость инструмента. It' s определенно стоящий того. – Steve Lazaridis 17.04.2020, 11:47

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

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

5
ответ дан 17.04.2020, 11:47
  • 1
    builtroot в настоящее время использует crosstool-ng (2014); как делает Ubuntu и Linaro. Это зависит, если Вы хотите, чтобы они использовали crosstool-ng, или Вы хотите занять время сами. Много проектов отказываются от uClibc к eglibc, так как этот ответ был записан. Для многих пакетов нужны маленькие тонкие настройки, если Вы используете uClibc, поскольку API не на 100% совместим с glibc. – artless noise 17.04.2020, 11:47

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

0
ответ дан 17.04.2020, 11:47
  • 1
    Это действительно зависит от того, как маленький, который система! Большая часть системы руки can' t делают это. – Johan 17.04.2020, 11:48

Теги

Похожие вопросы