s3c2440 gcc交叉编译工具链制作

发布者:SparklingStar22最新更新时间:2024-08-01 来源: cnblogs关键字:s3c2440  gcc  交叉编译 手机看文章 扫描二维码
随时随地手机看文章

前言:

因为准备学习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哈哈哈哈,终于可以开始编写网卡驱动了,一切的幸苦都是值得的.

关键字:s3c2440  gcc  交叉编译 引用地址:s3c2440 gcc交叉编译工具链制作

上一篇:mini2440的SDRAM分析
下一篇:在S3C2440上移植FreeRTOS

推荐阅读最新更新时间:2024-11-12 16:07

S3C2440-IIC
[单片机]
s3c2440液晶屏驱动 (内核自带) linux-4.1.24
自带有一部分驱动的配置信息,只要修改这部分就能支援 不同的液晶屏 - /arch/arm/mach-s3c24xx/mach-smdk2440.c 另一部分在 /drivers/video/fbdev/s3c2410fb.c 先打开调试功能,这样内核在启动的时候,就可以输出这些信息,或者使用 dmesg 查看到这些信息。当然,你配置内核 make menuconfig 也可以打开,但是太麻烦了,不如这样。 1 #define CONFIG_FB_S3C2410_DEBUG 2 #define dprintk(msg...) 3 do { 4 if (debug) 5 printk(msg);
[单片机]
<font color='red'>s3c2440</font>液晶屏驱动 (内核自带) linux-4.1.24
S3C2440 2440init.s分析第二篇(一)
S3C2440 2440init.s分析第二篇(一) ;========================================= ; NAME: 2440INIT.S ; DESC: C start up codes ; Configure memory, ISR ,stacks ; Initialize C-variables ; HISTORY: ; 2002.02.25:kwtark: ver 0.0 ; 2002.03.20:purnnamu: Add some functions for testing STOP,Sleep mode ; 2003.03.14:D
[单片机]
s3c2440内存控制器与SDRAM基本测试
前面我们实验的LED和串口程序,是cpu发送地址给特定的寄存器,在寄存器中写相应的位,达到控制要求。 第一类是GPIO门电路如LED,第二类是协议类如串口,这些都不是cpu直接给地址信息,而是通过寄存器来控制的。 第三类是内存接口,cpu发出的地址可以直接传递给这种设备如nor flash,sdram,网卡。注意nand flash不属于这种类型。 关于SDRAM,可以参考这篇文章,这对于了解sdram很重要,非常有必要阅读一波。 《高手进阶,终极内存技术指南(完整/进阶版)》 这篇文章能够让你了解sdram这个内存介质。 然后,查看2440的芯片资料: 2440已经有针对sdram的控制器,2440可
[单片机]
<font color='red'>s3c2440</font>内存控制器与SDRAM基本测试
s3c2440裸机-电阻触摸屏编程(7.触摸屏校准测试 及优化)
1,防止点击一个点,显示出5个点 Isr_Adc中同理也许要上报数据。 这里在touchscreen.c中还补充了上报压力值,当isr_adc上报data时,同时上报了压力值, 这样在ts_read_raw时能够读到压力值讯息。 分析下面这个函数: 当用户点击校准点A时,进入isr_Tc(), 检测到按下,启动adc,adc转换结束产生adc中断,进入isr_adc。然后adc上报坐标和压力值数据。 补充了rs_read_raw时,只有当松开时,也就是read raw读出来的压力值=0的时候才会返回数据。最上面的do while (pressure == 0)是为了过滤掉上一次松开后,下一次还没来得及点击就进入了get_
[单片机]
<font color='red'>s3c2440</font>裸机-电阻触摸屏编程(7.触摸屏校准测试 及优化)
交叉编译Python-2.7.13到ARM(aarch64)平台
方法跟交叉编译Python-2.7.13到ARM(aarch32)平台基本一样, 不同的地方只是把工具链换成编译aarch64的工具链,这里可以参考用qemu搭建aarch64学习环境. 创建目录: mkdir python2_7_13_for_aarch64 下面是配置、编译和安装的脚本: 1、配置: mk1_conf.sh 1 #!/bin/bash 2 3 export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH 4 5 ../Python-2.7.13
[单片机]
s3c2440裸板_中断体系结构
S3C2440一共有60个中断源,其中有15个子中断源,它们与SUBSRCPND寄存器中的每一位相对应,其他45个中断源与SRCPND中的每一位相对应。要注意的是EINT4~7对应的是同一位SRCPND ,而EINT8~23对应的也是SRCPND 一位 1 S3C2440的中断寄存器 中断分两大类:外部中断和内部中断。 1.1 外部中断寄存器 24个外部中断占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用这些脚做中断输入,则必须配置引脚为中断,并且不要上拉。具体可参考datesheet数据手册。 寄存器: EXTINT0-EXT
[单片机]
<font color='red'>s3c2440</font>裸板_中断体系结构
s3c2410与s3c2440的全方位对比
1. 最高主频不相同:2410为200M,2440为400M。 我们在用这两款处理器时,一般使用的主频是不相同的,而这个不相同,不仅影响是的运行的速度,最主要的是会影响一些外设(如串口)的时钟,这些外设的时钟如果不正确,就会出现问题。 又比如内存总线设置,2410 和 2440 主频不一样,总线定时所要求的时钟数也会不一样。 ---------------------------------------------------------------------------- 2. MPLL和UPLL的计算公式不相同:2440的MPLL是2410的两倍;2440的MPLL计算与UPLL的计算不相同。 2
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved