首页 > 其他分享 >s3c2440 gcc交叉编译工具链制作

s3c2440 gcc交叉编译工具链制作

时间:2023-01-22 20:33:58浏览次数:53  
标签:gcc .. ng 编译 s3c2440 arm ct

前言:

因为准备学习lwip,之前在stm32上移植跟着教程走得差不多了,但是用的keil。所以想在一个新平台移植一下巩固巩固,正好有2440的板子,也学一下gcc-make这样的开发流程,配套的编译器很老,编译配套的linux2.22.6内核还是没问题的,但是当我用裸机模板创建一个包含lwip的代码的工程时,编译就会出现以下错误:
collect2: ld terminated with signal 11 [Segmentation fault], core dumped /home/streleizia/gcc-3.4.5-glibc-2.3.6/bin/../lib/gcc/arm-linux/3.4.5/../../../../arm-linux/bin/ld: Warning: gc-sections option ignored /home/streleizia/gcc-3.4.5-glibc-2.3.6/bin/../lib/gcc/arm-linux/3.4.5/../../../../arm-linux/bin/ld: BFD 2.15 assertion fail /work/tools/create_crosstools/crosstool-0.43/build/arm-linux/gcc-3.4.5-glibc-2.3.6/binutils-2.15/bfd/elf32-arm.h:3905 Makefile:176: recipe for target 'build/lwip.elf' failed
搜索了很多都没有找到解决方案,于是我又尝试自己按照教程重新制作配套的工具链,但是很不幸,以前的源码已经不能在我的ubuntu18.04lts上正常编译了,随后我又尝试了arm-none-eabi-gcc 以及 linaro 的gnueabihf(很明显s3c2440并没有fpu完全不合适,但当时乱投医了),最后都因为各种问题失败了,最后的最后决定用crosstool-ng自己为s3c2440制作一个交叉编译器

环境介绍:

VMware16 ubuntuserver18.04 crosstool-ng-1.24.0(尽量用这个版本,在我的机器上gcc7.5编译gcc6.3有bug 用ctng1.24就换成gcc6.5了,可以解决这个问题) gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)

安装ctng

下载解压cd到目录 ./configure --prefix=安装目的位置 make && make install export 安装目的位置 到path 或者修改~/.bashrc 再在自己想要的地方建一个目录用于放置最后输出的交叉编译工具
cd 到这个目录,后面menuconfig和build命令都要在这个目录下执行.

配置目标

按照官网的说法,就是:

  • ./configure --prefix=/some/place
    make
    make install
    export PATH="${PATH}:/some/place/bin"
    cd /your/development/directory
    ct-ng help
    ct-ng menuconfig
    ct-ng build

在ct-ng安装目录下 share/sample/ 里有一些config模板,拷贝到交叉编译器的输出目录下,重命名为.config然后执行ct-ng menuconfig这一部分也可以参考ctng的官网教程,没有几页很快就能看完了

在menu主页切换到Target options选项,如果已经是arm了那前面步骤就没有问题,在这页选项里,对于2440 **Architecture level**要填armv4t Emit assembly for CPU要填arm9tdmi,填完Emit assembly for CPU后architecture选项会消失,这是正常现象(其实直接填Emit assembly for CPU选项就好了,ctng会自动决定另外俩个选项的内容,这也是现代软件带来的好处). Floating point:选择soft 然后我去掉了Use the MMU毕竟只是为了编译裸机代码(后面有需要再重新编译一遍就是了)

在menu主页切换到 Paths and misc options选项在这里可以配置目标输出目录,下载包存放目录等等,根据自己喜好配置就行了下面有个Number of parallel jobs选项,就是编译时的线程数,根据自己电脑配置填就行了,比如我的笔记本是8核16线程,我就填了8

在menu主页切换到 C compiler选项,在Version of gcc选项可以选择交叉编译器的gcc版本,我选择的是6.5

在menu主页切换到 Debug facilities 勾选gdb 回车进入gdb配置,版本我选了7.12.1再勾选上Build a static cross gdb

保存退出

编译目标

执行ct-ng buildctng将会联网下载编译所需软件包,如果网络问题有些包下载不下来,就手动去下载好并放在Paths and misc options选项配置的src目录下就行了,重新build,ct-ng检测到就会跳过下载.

如果一切正常就能在输出目录下得到编译好的交叉工具了,添加到path就可以快乐编译了.在我的环境下编译原来的工程,很顺利地得到了bin文件,烧录到nand上,成功进入主函数点亮led哈哈哈哈,终于可以开始编写网卡驱动了,一切的幸苦都是值得的.

标签:gcc,..,ng,编译,s3c2440,arm,ct
From: https://www.cnblogs.com/streleizia/p/17064617.html

相关文章

  • VS2010编译jpeg.lib
    --------------------------------------------2.打开VS2010命令行,进入jpeg-9a目录----------------------------------------------------------------------------------......
  • WSL中使用vcpkg安装pcl库出现编译失败的原因
    在wsl使用vcpkginstallpcl安装时,出现了BUILD_FAILED失败提示,查看log文件出现如下的错误:compilationproblem,c++:internalcompilererror:Killed(programcc1......
  • 史上最简单 OpenCV for C++ 在 Windows 和 Ubuntu 上编译安装使用教程
    准备工作原材料Ubuntu系统(非必须,Windows也可以,主要是Ubuntu适合编译)OpenCV3.4.1压缩包OpenCVcontrib3.4.1压缩包MinGW(Windows上运行GCC)版本信息......
  • 您是否存在想在浏览器动态编译razor的组件的想法?
    不知道是否有人跟我一样想在浏览器上直接可以动态的编译blazor的一些组件库?而不是通过引用NuGet以后才能查看到效果,并且在使用别人的组件的时候可以在动态的调整组件的一些......
  • Java反编译
    Java反编译java在编译的过程中会将源代码进行一次预编译,编译成后缀名为class的字节码源文件后将.class文件转载进类装载器中从而加载到jvm中,加载到jvm中后字节码校验器会......
  • (转)Delphi编译器版本对照表及工具链
    目录Delphi编译器版本对照表及工具链1、Delphi编译器版本历史对照表2、Delphi工具链(Delphi编译器)3、Delphi条件编译3.1、预定义条件符号:3.2、对编译器版本的条件......
  • 编译链接过程
    编译链接过程分析Linux中程序的链接过程如下:#include<stdio.h>intmain(){ printf("hello\n");}预编译gcc-Emain.c-omain.i删除#define,展开宏定义处理条......
  • 编译 datax
    下载DataX首先,访问DataX官网地址https://github.com/alibaba/DataX/进行下载编译DataX下载后解压DataX,在确保已经安装了maven之后,进入DataX目录,执行mvn-Uclea......
  • 基于64QAM调制解调的LDPC编译码算法误码率matlab仿真
    1.算法描述LDPC译码从译码算法的实现角度可以将译码类型分为硬判决译码和软判决译码两种类型。其中,硬判决译码方式实现过程较为简单,其通过一个预先设置的阈值对译码信息进......
  • 基于64QAM调制解调的LDPC编译码算法误码率matlab仿真
    1.算法描述       LDPC译码从译码算法的实现角度可以将译码类型分为硬判决译码和软判决译码两种类型。其中,硬判决译码方式实现过程较为简单,其通过一个预先设置的阈......