Программа кросс-компиляции, которая использует pthreads для голого металла

Хорошо, это может быть очень общий вопрос, но я не знаком с этой темой и не рад любой подсказке.

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

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

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

2 ответа

Решение

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

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

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

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

Нитки и голый металл

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

Замечание о префиксах Toolchain

Префикс gcc toolchain, arm-xilinx-linux-gnueabi-, указывает на цель, как ARM Linux, а не голый металл. arm-xilinx-linux-gnueabi- toolchain создаст код с поддержкой pthread (-lpthread), но предполагается, что для цели Linux уже установлена ​​библиотека pthread и другие необходимые программные уровни.

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

Другие вопросы по тегам