2013-06-13 2 views
0

Хорошо, это может быть очень общий вопрос, но я не знаком с этой темой и не хочу, чтобы кто-нибудь намекнул.Программа кросс-компиляции, которая использует pthreads для голого металла

У меня есть кросс-компиляция инструментальной цепочки из SoucereyCodeBench для ARM (arm-xilinx-linux-gnueabi-). Я перекрестно скомпилировал библиотеку, которая использует компилятор. Параметры: -DSC_INCLUDE_FX -DSC_USE_PTHREADS -pthreads -fPIC -DPIC

Так что, если я хочу использовать библиотеку для голых металлических программ, мне понадобятся pthreads для голого металлического компилятора (arm-xilinx-eabi-).

В противном случае моя программа, вероятно, не запускалась и не компилировалась в первую очередь. Так можно ли сделать компиляцию pthreads для голого металла?

+3

Кто собирается управлять * потоками * на проекте ** bare-metal **? В принципе, для этого вам нужна ОС, а затем у вас больше нет проекта ** bare-metal **. –

+1

Возможно, вас заинтересует [Threading using setjmp()/longjmp()] (http://stackoverflow.com/questions/2560792/multitasking-using-setjmp-longjmp), но это ** не ** * pthreads * ,Таким образом, вы можете выполнить ограниченную многозадачность или потоковую обработку; обычно называемый потоком пользовательского пространства. Однако, если вы ожидаете полномасштабных * pthreads *, тогда у вас также может быть ОС. В голом метафоре * context *, * user-space threading * является примитивной ОС. –

+0

Я попробовал 8-мегабайтный загрузочный ящик из барана, но он содержит некоторые процессы, прерывающие мою аппликацию, поэтому он висит на 2-х оборотах. Я не могу понять, почему и сменил приоритет запуска с красивыми и закрыл все процессы рядом с ядром без везения. – eactor

ответ

4

Я думаю, что это будет матовый перенос вашего кода, а не просто его кросс-компиляция без изменений. Как следует из его названия POSIX-потоки (pthreads) предполагает API POSIX.

Если вам нужны темы на голый металл мишень ARM, то по крайней мере нужно какой-то библиотеки планирования нить которой есть many. Большинство RTOS не являются полноценными ОС в смысле Linux, а довольно простыми планировщиками с механизмами IPC, которые связывают как статические библиотеки, как любые другие с вашим монолитным приложением, - которые, вероятно, по-прежнему считаются «голыми металлами» в том смысле, что система загружается непосредственно в ваша функция main(), где вы отвечаете за создание задач/потоков и запуск планировщика.

Некоторые RTOS поддерживают API-интерфейсы POSIX и, следовательно, pthreads, но они, как правило, являются более крупными более полными ОС, а не просто планировщиками - в любом случае они, как правило, меньше и масштабируемы, тогда Linux, тем не менее, может удовлетворить требованиям «голого металла».

Конечно, ничто не мешает вам создавать обертку вокруг любой библиотеки RTOS, чтобы предоставить совместимый с pthread API, который может упростить перенос кода.

+0

Если бы я использовал RTOS, например FreeRTOS для Zynq AMP, мне пришлось бы вносить изменения в мои программы/библиотеки, которые сейчас работают нормально под 8 MB BusyBox в оперативной памяти – eactor

+0

@eactor: Как я уже говорил, API не будет одинаковым , но в основном это можно решить с помощью слоя переноса, а также алгоритм планирования в RTOS тоже может повлиять на вещи, но похоже, что планирование уже является проблемой - у вас есть много возможностей для контроля над RTOS. Помимо этого, без взгляда на код, как я могу рассказать вам, с какими проблемами вы столкнетесь? – Clifford

+0

@eactor: вам может быть лучше с RTOS, которая уже поддерживает POSIX API, такие как [NuttX] (http://nuttx.org/). Есть и другие, но большинство из них являются лицензированными NuttX. это BSD. – Clifford

4

Нитки и Bare Metal

целей программирования Голый металл только обеспечивают то, что вы положили на них. Реализация pthread, с которой большинство людей знакомы, - это версия Linux NPTL, которая работает, потому что ядро ​​Linux и библиотека GNU C заставляют работать. На голых металлических объектах вы не получаете преимущества ни от ядра Linux, ни от библиотеки GNU C. Вам придется принести свою собственную библиотеку потоков с открытым металлом и время выполнения, но в этом случае вам может быть лучше использовать RTOS, который предоставляет потоки.

Обратите внимание на ToolChain префиксов

НКУ префикс набора инструментов, arm-xilinx-linux-gnueabi-, указывает на объект как ARM Linux, а не голым металлом. Инструментальная цепочка arm-xilinx-linux-gnueabi- построит код, поддерживающий pthread (-lpthread), но предположим, что цель Linux имеет библиотеку pthread и другие необходимые уровни программного обеспечения, которые уже установлены.

Если вместо этого вы переключитесь на голый металл инструментальной цепочки gcc ARM xilinx, ваш префикс для инструментальной цепочки будет arm-xilinx-eabi-. Все, что я сказал выше о голом металле и потоках, будет применяться.

Смежные вопросы