linux下mips裸机编译,裸机交叉编译器输入

裸机交叉编译器的输入限制是什么…因为它不编译带有指针或mallocs的程序…或任何需要比底层硬件更多的东西….还有1如何找到这些局限性..

我还想问一下…我为目标mips构建了交叉编译器..我需要使用此交叉编译器创建mips可执行文件…但是我无法找到可执行文件的位置…我找到了mipsel-linux-cpp的1个可执行文件,应该对它进行编译,组装和链接,然后生成a.out,但它没有这样做…

但是./cc1提供了mips程序集…….

有一个安装文件夹,其中包含一个使用i386程序集的gcc可执行文件,然后给出一个exe …我不明白当我将目标指定为mips时,gcc exe如何给i386而不提供mips程序集.

请帮助我真的无法理解什么是幸福…

我遵循了以下步骤.

1.安装了binutils 2.19

2.为gip配置了gcc.(g,核心)

解决方法:

我建议您应该开始两个单独的问题.

GNU工具链没有任何OS依赖性,但GNU库却有. GCC的大多数裸机交叉构建使用Newlib C库,该库提供了一组syscall存根,您必须自己映射到目标.这些存根包括实现流I / O和堆管理所必需的低级调用.根据您的需要,它们可以非常简单也可以非常复杂.如果唯一的I / O支持是到UART的stdin / stdout / stderr,那么这很简单.您不必实现所有内容,但是如果您不实现I / O存根,则将无法使用例如printf().要使malloc()工作,必须实现sbrk()/ sbrk_r()syscall.

GNU C库将与Newlib作为其基础库一起正常使用.如果使用C,则C运行时启动程序(通常为crt0.s)必须包括静态初始化程序循环,以调用代码可能包含的任何静态对象的构造函数.当然,运行时启动还必须初始化处理器,时钟,SDRAM控制器,计时器,MMU等.那是您的责任,而不是编译器的责任.

我没有MIPS目标的经验,但是所有处理器的原理都是相同的,有一篇非常有用的文章叫做“Building Bare Metal ARM with GNU”,您可能会发现它很有用,很多文章都将是有用的-特别是移植有关实现Newlib存根的部分.

关于另一个问题,如果您的编译器名为mipsel-linux-cpp,则它不是“裸机”构建,而是Linux构建.同样,该可执行文件并不是真正的“编译,汇编和链接”,而是单独调用预处理器,编译器,汇编器和链接器的驱动程序.必须正确配置它才能调用跨工具而不是宿主工具.我通常分别调用链接器,以执行关于链接哪个标准库(-nostdlib)的决定,并且还因为当应用程序由多个执行单元组成时,这样做更有意义.除了这里我不能提供太多帮助,因为我一直使用明显比我耐心得多的人构建的GNU-ARM工具,而且该工具托管在Windows上,在这种情况下,调用宿主工具链的可能性较小(一个为什么我也避免了那些依赖Cygwin的工具链)

标签:mips,compiler-construction,linux

来源: https://codeday.me/bug/20191107/2002889.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值