s3c2440 gcc交叉编译工具链制作

发布时间:2024-08-01  

前言:

因为准备学习lwip,之前在stm32上移植跟着教程走得差不多了,但是用的keil。所以想在一个新平台移植一下巩固巩固,正好有2440的板子,也学一下gcc-make这样的开发流程,配套的编译器很老,编译配套的linux2.6.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哈哈哈哈,终于可以开始编写网卡驱动了,一切的幸苦都是值得的.

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>