交叉工具链

安装:
将arm-linux-gcc-4.3.2.tgz文件解压到linux根目录/下,可以发现解压后的文件在/usr/local/arm/4.3.2/文件下。

然后修改环境变量:执行命令vim /root/.bashrc
再添加最后一行代码:

三个命令:
arm-linux-gcc -g -c -o led.o led.S
arm-linux-ld -Tled.lds -o led.elf led.o
arm-linux-objcopy -O binary led.elf led.bin

可以使用file命令来查看文件的可以运行的平台。 如果希望对烧写到开发板中的程序进行编译,就需要采用针对开发板的交叉编译器。


交叉开发:
在嵌入式开发过程中有宿主机和目标机的角色之分:宿主机是执行编译、链接嵌入式软件的计算机;目标机是运行嵌入式软件的硬件平台。

1、交叉编译器
命令:arm-linux-gcc
举例:arm-linux-gcc -g -c -o led.o led.S
-c:只编译不连接
-print-search-dirs:显示头文件的位置,与gcc不同

2、交叉链接器
命令:arm-linux-ld
举例:arm-linux-ld -Tled.lds -o led.elf led.o
led.lds为链接器脚本文件。

3、交叉转换器
命令:arm-linux-objcopy
举例:arm-linux-objcopy -O binary led.elf led.bin
将elf格式文件转换为bin格式的文件。bin是二进制格式文件。

4、交叉ELF文件工具
命令:arm-linux-readelf
举例:arm-linux-readelf -a led.elf
链接之后得到elf文件。
注意图中的两点:

如果一个程序拷到开发板中无法运行,可能的原因:运行平台不对,用file查看;可能大小端不对,用arm-linux-readelf -a 查看;也可能是库没有包含,可以采用arm-linux-readelf -d 来查看,查看的是动态链接库。

5、交叉反汇编器
命令:arm-linux-objdump
举例:arm-linux-objdump -D -S hello >dump
将编译后的可执行文件反汇编为汇编文件。hello是gcc编译之后的文件,是elf可执行文件,将汇编代码写入dump文件中。

在arm-linux-gcc编译时,加上-g参数,然后对可执行文件进行arm-linux-objdump反汇编,会发现dump中的汇编代码多了与之对应的C语言代码,方便观察。

makefile文件的编写

使用GNU Make工具来管理程序是每个Linux工程师必须掌握的技能。
Make能够使整个程序的编译、链接只需要一个命令(make)就可以完成。因此非常快捷方便。

Make的工作主要依赖于一个叫为Makefile的文件。Makefile文件描述了整个程序的编译,连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译,如何最后产生我们想要得可执行文件。

makefile由规则和变量两部分组成。

规则:

如果用户没有指定执行某一条规则,make会默认执行makefile中的第1条规则,而这条规则中的目标称之为:最终目标

变量:

makefile编写举例:

all:led.Sarm-linux-gcc -g -c led.S -o led.oarm-linux-ld -Tled.lds -o led.elf led.oarm-linux-objcopy -O binary led.elf led.bin.PHONY: clean
clean:rm -f *.bin *.elf *.o *.bak

当一个makefile中有许多类似的规则时,可将这些规则合并为一条通用规则
采用百分号%

%.o : %.Sarm-linux-gcc -g -c $^ -o $@

取消回显可以节约时间。

make命令默认在当前目录下寻找名字为makefile或者Makefile的工程文件,当名字不为这两者之一时,可以使用如下方法指定:
make –f 文件名 目标

链接器脚本 lds文件

一个可执行程序通常是由:代码段,数据段,bss段构成的。同样,在用于链接这个程序的链接器脚本中,就会反应出这几个段的信息。

链接器脚本文件的构成:段结构、起始链接地址、对齐、变量、代码段首文件。

链接器脚本文件名以 .elf 为结尾。

lds文件中采用 /* …… */星号和斜杠来表示注释

对齐设置:. = ALIGN(4); 每个段前加入,4字节对齐,使得段首地址可以整除4。为了提高访问内存的效率。

设置代码段的首文件需要注意每个程序文件的顺序,第一名开始运行的文件的位置很重要。

lds文件编写举例:

SECTIONS {. = 0x0;           /* .点表示当前地址,设置链接首地址为首地址 *//* 在6410开发板,此处地址为0x50008000 */. = ALIGN(4);      /* 4字节对齐,调整段首地址对4整除 */.text :            /* 冒号前面一定要加空格 */{led.o (.text)  /* 设置代码首文件 */*(.text)       /* 星号表示所有文件的代码 */}. = ALIGN(4);      /* 4字节对齐 */.data :            /* 数据段 */{*(.data)       /* 星号表示所有文件的数据段 */}bss_start = .;     /* 定义变量 */. = ALIGN(4);      /* 4字节对齐 */.bss :{*(.bss)        /* bss段未初始化数据 */}
}

Eclipse调试

实现编译在线调试的功能。

需要在linux虚拟机上安装eclipse软件,安装GDB server 调试工具,安装JLink驱动。

将gdb压缩文件解压到根目录下,与gcc的解压相同。

安装GDB server之后需要修改环境变量,如本文第一幅图所示,倒数第二行。gdb的环境变量要添加在gcc之前,因为交叉工具链中也有gdb工具。

首先要从SD卡启动,先格式化nand flash ,然后从nand flash 启动。

一定一定注意注意:
启动 Eclipse 之前,一定要先启动 JLink GDB Server。 在arm-tools文件夹中。

还需要拷贝 cp -d libjlinkarm.so* /usr/lib -f,
和 cp 45-jlink.rules /etc/udev/rules.d/ 。

安装eclipse的插件:
保证可以上网,help->instal new software
安装一个插件:

建立工程目录,在workspace文件夹新建一个工程目录。把代码、lds文件、makefile拷进去。
创建一个已有代码的工程,选择工程目录文件夹的位置,就可以了。

eclipse是根据makefile进行编译和调试的,调试的是elf文件。

调试配置: 工具栏中的“虫子“按钮在下拉菜单中选择debug configuration
一定注意:在配置之前,一定要先选中工程名字。

注意:选择的是 elf 格式的文件,调试的是elf格式的文件。

此处继续修改选项卡debugger中的两个内容

然后在commands选项卡中填入初始化命令:

# tiny6410_config
# connect to the J-Link gdb server
target remote localhost:2331
# Set JTAG speed to 30 kHz
monitor endian little
monitor speed 30
# Reset the target
monitor reset
monitor sleep 10
#
# CPU core initialization (to be done by user)
#
# Set the processor mode
monitor reg cpsr = 0xd3
#config MMU
#flush v3/v4 cache
monitor cp15 7, 7, 0, 0 = 0x0
#/* flush v4 TLB */
monitor cp15 8, 7, 0, 0 = 0x0
#disable MMU stuff and caches
monitor cp15 1, 0, 0, 0 =0x1002
#Peri port setup
monitor cp15 15, 2, 0, 4 = 0x70000013
#disable watchdog
monitor MemU32 0x7e004000  =  0x00000000
monitor sleep 10
#disable interrupt
monitor MemU32 0x71200014  =  0x00000000
monitor MemU32 0x71300014  =  0x00000000
monitor MemU32 0x7120000C  =  0x00000000
monitor MemU32 0x7130000C  =  0x00000000
monitor MemU32 0x71200F00  =  0x00000000
monitor MemU32 0x71300F00  =  0x00000000
#set clock
monitor MemU32 0x7e00f900  =  0x0000801e
monitor MemU32 0x7e00f000  =  0x0000ffff
monitor MemU32 0x7e00f004  =  0x0000ffff
monitor MemU32 0x7e00f020  =  0x01043310
monitor MemU32 0x7e00f00C  =  0xc2150601
monitor MemU32 0x7e00f010  =  0xc2150601
monitor MemU32 0x7e00f024  =  0x00000003
monitor MemU32 0x7e00f014  =  0x00200102
monitor MemU32 0x7e00f018  =  0x00000000
monitor MemU32 0x7e00f01C  =  0x14000007
#config sdram
monitor MemU32 0x7e00f120  =  0x00000008
monitor MemU32 0x7e001004  =  0x00000004
monitor MemU32 0x7e001010  =  0x0000040f
monitor MemU32 0x7e001014  =  0x00000006
monitor MemU32 0x7e001018  =  0x00000001
monitor MemU32 0x7e00101c  =  0x00000002
monitor MemU32 0x7e001020  =  0x00000006
monitor MemU32 0x7e001024  =  0x0000000a
monitor MemU32 0x7e001028  =  0x0000000c
monitor MemU32 0x7e00102c  =  0x0000018f
monitor MemU32 0x7e001030  =  0x0000000c
monitor MemU32 0x7e001034  =  0x00000002
monitor MemU32 0x7e001038  =  0x00000002
monitor MemU32 0x7e00103c  =  0x00000002
monitor MemU32 0x7e001040  =  0x00000002
monitor MemU32 0x7e001044  =  0x00000013
monitor MemU32 0x7e001048  =  0x00000013
monitor MemU32 0x7e00100C  =  0x00010012
monitor MemU32 0x7e00104C  =  0x00000b45
monitor MemU32 0x7e001200  =  0x000150f8
monitor MemU32 0x7e001304  =  0x00000000
monitor MemU32 0x7e001008  =  0x000c0000
monitor MemU32 0x7e001008  =  0x00000000
monitor MemU32 0x7e001008  =  0x00040000
monitor MemU32 0x7e001008  =  0x00040000
monitor MemU32 0x7e001008  =  0x000a0000
monitor MemU32 0x7e001008  =  0x00080032
monitor MemU32 0x7e001004  =  0x00000000
# Setup GDB for faster downloads
#set remote memory-write-packet-size 1024
set remote memory-write-packet-size 4096
set remote memory-write-packet-size fixed
monitor speed 12000
break _start
load

先用smb将初始化脚本拷入linux,然后可以在linux中执行gedit命令,用编辑器打开初始化脚本,将代码进行复制到eclipse中。

如下图所示:

然后就可以启动调试了。

开发环境搭建---交叉工具链、makefile编写、连接器脚本、Eclipse调试相关推荐

  1. 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705 参考博客 : [嵌入式开发]嵌入式 开发环境 (远程 ...

  2. java环境搭好 软件无法运城_Javaweb开发环境搭建常用工具类型

    随着互联网的不断发展,无论是前端开发还是后端开发都越发垂直细分化,而今天我们就通过案例分析来了解一下,Javaweb开发环境搭建常用工具类型. 一:Web相关概念 Web程序也就是一般所说的网站,由服 ...

  3. 好文分享:Javaweb开发环境搭建常用工具类型

    随着互联网的不断发展,无论是前端开发还是后端开发都越发垂直细分化,而今天我们就通过案例分析来了解一下,Javaweb开发环境搭建常用工具类型. 一:Web相关概念 Web程序也就是一般所说的网站,由服 ...

  4. 传智播客C/C++各种开发环境搭建视频工具文档免费教程

    传智播客作为中国IT培训的领军品牌,一直把握技术趋势,给大家带来最新的技术分享!传智播客C/C++主流开发环境免费分享视频文档中,就有写一个helloworld程序的示范.火速前来下载吧 所谓&quo ...

  5. 前端开发环境搭建(工具使用)

    迅雷 用于之后下载一些安装包,速度较快 命令行工具 shift + 鼠标右键:在此处打开powershell node + 文件名: 在node中执行文件 输入部分文件名 + Tab: 自动补全文件名 ...

  6. PHP开发环境搭建与工具

    PHP是跨平台的,所以我们可以在Mac OS,Windows,Linux等主流操作系统中进行开发,最为经典的也是最被认可的是Lamp/Lnmp结构,它们是(Linux apache/nginx MyS ...

  7. eclipse 关闭时progress information弹框_Spring开发环境搭建(Eclipse)

    开发环境搭建,主要包含2部分: Java安装 Eclipse安装 为易于学习,我们只安装这2个部分,对于一般开发学习也足够了.如果你有其他要安装的,酌情添加. Java安装 我们使用Java8: 下载 ...

  8. 嵌入式Linux开发环境搭建-(4)安装交叉编译工具链

    在ubuntu16.04.2中,安装交叉编译工具链 在ubuntu中进行嵌入式应用程序开发,安装交叉编译工具链是不可缺少的一个环节. PC操作系统:ubuntu16.04.2 LTS 开发板:天嵌科技 ...

  9. arm-linux-gcc 裸机程序,Linux下ARM裸机开发-交叉工具链

    初识linux下ARM的裸机开发全过程.现在总结如下: 首先说明为什么要学习裸机开发,一方面bootloader的编写要用到裸机开发的知识,另一方面就是驱动的开发.一般情况下我们进行的系统上的开发. ...

最新文章

  1. 项目管理过程中应注意的问题
  2. Ubuntu Server 14.04 下root无法ssh登陆
  3. _ZNote_Qt_定时器的总结
  4. LDA入门级学习笔记
  5. 简单示例立马搞懂Java日期格式中yyyy-MM-dd HH:mm:ss和YYYY-MM-dd hh:mm:ss的区别
  6. 关于table边框,设置了border-collapse:collapse之后,设置border-radius没效果
  7. [Java基础]类和接口的关系
  8. C语言和数据结构_1
  9. 使 JavaScript 更加简洁的小技巧
  10. 对比了解Grafana与Kibana的关键差异
  11. 如何创建强命名程序集
  12. C# 给Word每一页设置不同图片水印
  13. ROS的几个重要概念:节点、消息、主题、服务
  14. 电机控制方案用哪家芯片比较好?
  15. 如何用python请求接口
  16. Admiral UVA - 1658
  17. 寒冬已至!视频聊聊四面楚歌的Android工程师该何去何从?
  18. 主题:Django资源大全
  19. (填坑)tarjan
  20. 焱融 YRCloudFile 连获两项重量级认证,展现强劲存储实力

热门文章

  1. Mac九大修图神器你值得拥有,分分钟打造时尚设计大片!
  2. MybatisPlus-注解
  3. 蚂蚁金服内推四面:PDF超过6000页
  4. 2 开源Math.NET基础数学类库使用矩阵向量计算
  5. 前沿视频教室,学习网页和动画的设计开发制作技巧http://learning.artech.cn/
  6. win7右下角音量控制图标、电池图标消失
  7. 青蛙爬井c语言,一道国考题的“青蛙爬井”解法
  8. 拳头公布新的五年计划,继MOBA之后下一款热门是什么?
  9. js:fetch在浏览器中发送 HTTP 请求
  10. 魔兽世界盗贼开锁技能哪练_百度知道