将软件/固件从一种架构移植到另一种困惑

时间:2018-12-13 10:17:31

标签: compilation arm embedded u-boot powerpc

当提到将软件/固件从另一个体系结构移植到某个体系结构时,我仍然对这个概念感到困惑。

例如,如果软件已移植到ARM体系结构,如果是C / C ++代码,则我的理解是不需要更改源代码,我们仅使用ARM特定的编译器将代码编译为指令被ARM芯片理解吗?

如果源代码需要根据体系结构(无论是ARM,PowerPC,X86等)进行更改,您可以举个例子说明为什么吗?

我一直在阅读有关U-Boot的信息,它指出它最初是作为嵌入式PowerPC芯片的引导程序,从那时起便被移植到ARM和其他体系结构。 再次,移植将意味着它只是使用其他编译器进行了编译吗?我几乎可以肯定,它并不是那么简单,所以请解释一下为适应特定体系结构而需要对源代码等进行的更改。

1 个答案:

答案 0 :(得分:1)

由于您要求提供一些示例,因此在C中有两个相对简单的非便携式示例,仅供参考。

(请注意,这些是不可移植的 code 的示例。移植活动还可能包括与现有代码无关的任务,例如为自定义目标/编写接口或新的硬件抽象层/处理器)

  1. sizeof(uint32_t)
    容易期望它的值为4,但是在类似TI C2000的体系结构上,它的值为2。假设4(当然首先是越野车)的算法 对于C2000可以很好地编译,并且可以运行,但是,是否会产生预期的结果还是很值得怀疑的

  2. Typecasts

    typedef struct _M {
      uint32_t a;
      uint32_t b;
    } M;
    
    uint8_t *p = (uint8_t *)malloc(100);
    
    M *m = (M *)p;
    
    printf("%d", m->b); //may cause hard fault at m->b on Cortex-M0
    

    最后一行将始终在Cortex-M4上运行,但是可能取决于p与32位的对齐方式,导致Cortex-M0出现硬故障。边界。参见this