Программа кросс-компиляции, которая использует 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-
, Все, что я сказал выше о голом металле и нитях, будет применяться