Embedded 对裸机使用pthreads的交叉编译程序

Embedded 对裸机使用pthreads的交叉编译程序,embedded,arm,xilinx,bare-metal,Embedded,Arm,Xilinx,Bare Metal,好的,这可能是一个非常笼统的问题,但我不太熟悉这个话题,很高兴得到任何提示 我有一个来自SoucereyCodeBench for ARM(ARM xilinx linux gnueabi-)的交叉编译工具链。我交叉编译了一个使用编译器选项的库:-DSC\u INCLUDE\u FX-DSC\u USE\u PTHREADS-PTHREADS-fPIC-DPIC 因此,如果我想使用裸机程序库,我想裸机编译器(arm xilinx eabi-)需要pthreads 否则我的程序一开始可能无法运行或

好的,这可能是一个非常笼统的问题,但我不太熟悉这个话题,很高兴得到任何提示

我有一个来自SoucereyCodeBench for ARM(ARM xilinx linux gnueabi-)的交叉编译工具链。我交叉编译了一个使用编译器选项的库:
-DSC\u INCLUDE\u FX-DSC\u USE\u PTHREADS-PTHREADS-fPIC-DPIC

因此,如果我想使用裸机程序库,我想裸机编译器(arm xilinx eabi-)需要pthreads


否则我的程序一开始可能无法运行或编译。那么,可以为裸机编译pthreads吗?

我认为这将是移植代码的一种方式,而不是简单地交叉编译代码。顾名思义,POSIX线程(pthreads)采用POSIXAPI

如果您需要裸机ARM目标上的线程,那么您至少需要某种类型的线程调度库,其中有。大多数RTOS不是Linux意义上的完整OSs,而是带有IPC机制的简单调度程序,它们像其他任何单一应用程序一样作为静态库链接到您的单一应用程序——从系统直接引导到
main()的意义上讲,这可能仍然算是“裸机”
功能,您负责创建任务/线程并启动调度程序

一些RTOS支持POSIX API,因此支持pthread,但这些往往是更大、更完整的OSs,而不是简单的调度程序——无论哪种方式,它们通常都比Linux更小、更具可扩展性,因此可能满足您的“裸机”需求

当然,没有什么能阻止您围绕任何RTOS库创建包装器,以提供与pthread兼容的API,从而简化代码的移植。

线程和裸机 裸机编程目标仅提供您在其上设置的内容。大多数人都熟悉的pthread实现是LinuxNPTL版本,因为Linux内核和GNUC库使其工作。在裸机目标上,您既得不到Linux内核的好处,也得不到GNUC库的好处。您必须自带自己的裸机线程库和运行时,但在这一点上,您最好使用提供线程的RTOS

关于工具链前缀的一点注记 gcc工具链前缀,
arm xilinx linux gnueabi-
,表示目标为arm linux,而不是裸机。
arm-xilinx-linux-gnueabi-
工具链将构建支持pthread的代码(
-lpthread
),但它将假定linux目标已经安装了pthread库和其他必要的软件层


如果转而切换到gcc ARM xilinx工具链的裸机版本,则工具链前缀将为
ARM xilinx eabi-
。我上面所说的关于裸机和线程的所有内容都适用。

谁来管理裸机项目中的线程?基本上,你需要一个操作系统来完成这项工作,然后你就不再有裸机项目了。你可能对它感兴趣,但这不是pthreads。您可以通过这种方式执行一些有限的多任务或线程;通常称为用户空间线程。但是,如果您希望pthread完全成熟,那么您最好有一个操作系统。在裸机环境中,用户空间线程是一个基本的操作系统。我尝试使用ram中的8MB忙盒,但它包含一些中断我的应用程序的进程,因此它将服务器挂起2秒。我不知道用nice改变了运行优先级,并关闭了内核旁的所有进程,但运气不好。如果您有busybox(轻量级shell套件),我希望您运行的是linux,并且支持pthread。那你为什么要称之为裸机开发?或者解释一下“BusyBox”的其他含义挂起是我想切换到裸机的原因。如果我想在Zynq AMP上使用FreeRTOS这样的RTOS,我是否需要对我的程序/libs进行更改,现在它在8MB的BusyBox下可以正常工作RAM@eactor:正如我指出的,API将不一样,但这在很大程度上可以通过移植层来处理,RTOS中的调度算法也不同,这可能会影响到事情,但听起来调度已经是一个问题了——使用RTOS,您可以更好地控制这一点。除此之外,在看不到代码的情况下,我如何告诉您将遇到什么问题?@eactor:您最好使用已经支持POSIX API的RTOS。还有其他的,但大多数是商业许可的NuttX;是BSD。