交叉编译程序,它使用pthreads作为裸机

时间:2013-06-13 14:28:55

标签: embedded arm xilinx bare-metal

好的,这可能是一个非常普遍的问题,但我不熟悉这个主题,并对任何提示感到高兴。

我有一个来自SoucereyCodeBench for ARM的交叉编译工具链(arm-xilinx-linux-gnueabi-)。我交叉编译了一个使用编译器选项的库:-DSC_INCLUDE_FX -DSC_USE_PTHREADS -pthreads -fPIC -DPIC

所以,如果我想将这个libary用于裸机程序,那么我需要pthreads用于裸机编译器(arm-xilinx-eabi-)?

否则我的程序很可能不会首先运行或编译。那么可以为裸机编译pthreads吗?

2 个答案:

答案 0 :(得分:4)

我认为这将是一个移植代码的代理,而不是简单地交叉编译它。顾名思义 POSIX线程(pthreads)假设POSIX API。

如果您需要裸机 ARM目标上的线程,那么您至少需要某种线程调度库,其中有many。大多数RTOS都不是Linux的完整操作系统,而是具有IPC机制的简单调度程序,它们作为静态库链接到您的单片应用程序 - 在系统直接启动的意义上,它可能仍然被视为“裸机”您的main()函数,您负责创建任务/线程并启动调度程序。

有些RTOS支持POSIX API,因此支持pthread,但这些操作系统往往是更完整的操作系统,而不是简单的调度程序 - 无论哪种方式,它们通常都比Linux更小,更具可扩展性,因此可能满足您的“裸机”要求。 / p>

当然,没有什么可以阻止您在任何RTOS库周围创建包装器以提供可能使代码移植更简单的pthread兼容API。

答案 1 :(得分:4)

线程和裸金属

裸金属编程目标仅提供您所放置的内容。大多数人都熟悉的pthread实现是Linux NPTL版本,因为Linux内核和GNU C库可以使用它。在裸机目标上,您无法获得Linux内核或GNU C库的好处。你必须带上你自己的裸机线程库和运行时,但那时你可能最好使用提供线程的RTOS。

关于工具链前缀的注意事项

gcc工具链前缀arm-xilinx-linux-gnueabi-表示目标为ARM Linux,而不是裸机。 arm-xilinx-linux-gnueabi-工具链将构建pthread感知代码(-lpthread),但它会假设Linux目标已经安装了pthread库和其他必要的软件层。

如果您切换到gcc ARM xilinx工具链的裸机版本,您的工具链前缀将为arm-xilinx-eabi-。我上面提到的关于裸机和螺纹的所有内容都适用。

相关问题