【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | e

发布者:DazzlingSmile最新更新时间:2024-10-18 来源: cnblogs关键字:裸板调试  交叉工具链  Makefile  链接器脚本  eclipse  JLink  调试环境 手机看文章 扫描二维码
随时随地手机看文章

-- bss 段 : .bss 表示 bss 段, * 表示所有文件, *(.bss) 表示所有文件的 bss 段;


SECTIONS{
	.text :
	{
	*(.text)
	}

	.data :
	{
	*(.data)
	}

	.bss :
	{
	*(.bss)
	}
}






2. 设置起始链接器地址




设置链接器起始地址 : 

-- 语法 : '. = 地址';

-- lds 脚本示例 : 


SECTIONS{
	. =0x0;

	.text :
	{
	*(.text)
	}

	.data :
	{
	*(.data)
	}

	.bss :
	{
	*(.bss)
	}
}

-- 反编译编译后的 elf 文件 : '00000000 <_start>:' 表示从 0 地址开始;

[root@localhost 01_led]# arm-linux-objdump -D -S led.elf 

led.elf:     file format elf32-littlearm

Disassembly of section .text:

00000000 <_start>:
.text
.globl _start
#define VIC0_INT	0x71200000
#define VIC1_INT	0x71300000

-- 修改首地址后的脚本 : 将起始地址修改为 0x30008000;



SECTIONS{
	. =0x30008000;

	.text :
	{
	*(.text)
	}

	.data :
	{
	*(.data)
	}

	.bss :
	{
	*(.bss)
	}
}


-- 反编译elf : 执行 arm-linux-objdump -D -S led.elf 命令, '30008000 <_start>:' 起始地址是 0x30008000;


[root@localhost 01_led]# arm-linux-objdump -D -S led.elf

led.elf:     file format elf32-littlearm

Disassembly of section .text:

30008000 <_start>:
.text
.globl _start
#define VIC0_INT	0x71200000
#define VIC1_INT	0x71300000 ... ...



地址对比 : 


-- 链接器起始地址 0x000000 : 


-- 链接器起始地址 0x30008000 : 





3. 对齐设置



对齐范例 : . = ALIGN(4); 表示从当前开始 4 字节对齐;


SECTIONS{
	. =0x30008000;
	. = ALIGN(4);
	.text :
	{
	*(.text)
	}
	
	. = ALIGN(4);
	.data :
	{
	*(.data)
	}

	. = ALIGN(4);
	.bss :
	{
	*(.bss)
	}
}






4. 变量



变量示例 : 变量保存之后, 可以再程序中用到变量;

-- 示例 : 


SECTIONS{
	. =0x30008000;
	. = ALIGN(4);
	.text :
	{
	*(.text)
	}
	
	. = ALIGN(4);
	.data :
	{
	*(.data)
	}

	. = ALIGN(4);
	bss_start = . ;
	.bss :
	{
	*(.bss)
	}
	bss_end = . ;
}






5. 设置代码段首文件



设置首文件 : 

-- 语法 : start.o(.text);

-- 示例 : 


SECTIONS{
	. =0x30008000;
	. = ALIGN(4);
	.text :
	{
	start.o(.text)
	*(.text)
	}
	
	. = ALIGN(4);
	.data :
	{
	*(.data)
	}

	. = ALIGN(4);
	bss_start = . ;
	.bss :
	{
	*(.bss)
	}
	bss_end = . ;
}






五. eclipse 在线调试





1. eclipse 集成开发环境示意图



eclipse 集成开发环境示意图 : 

-- 硬件 : 开发板, JLink;

-- 软件 : eclipse, GDB Server, JLink 软件;






2. 准备工作





(1) 格式化 nand flash



格式化 nand flash :  注意必须格式化 NandFlash 否则会出现不可预知错误;




(2) 硬件连接



硬件连接 :  JLink 连接, 串口连接, 电源连接, 开发板 nand flash 启动; 



(3) 安装 JLink Windows 驱动



JLink Windows 驱动安装 : 买 JLink 时会带着这个安装盘, 安装 JLink Windows 驱动 才可以调试成功, 否则会在 Windows 这一关被挡下 导致连接不成功;




(3) 安装 gdb server



安装 arm-linux-gdb-7.5.tar.gz : 

-- 解压 : tar -xvzf arm-linux-gdb-7.5.tar.gz 命令;


-- 查看 build-all 脚本 : 可以看到脚本执行流程是 解压 gdb-7.5.tar.gz, 然后生成 Makefile文件, 之后进编译安装到 /opt/arm-linux-gdb 目录下;


[root@localhost arm-linux-gdb-7.5]# cat build-all 
#/bin/sh

rm -fr gdb-7.5
rm -r /opt/arm-linux-gdb/

tar xvzf gdb-7.5.tar.gz
cd gdb-7.5

./configure --target=arm-linux --prefix=/opt/arm-linux-gdb/ -v

make && make install

cd /opt/arm-linux-gdb/

-- 进入 ddb 安装目录, 查看路径 : 



-- 配置环境变量 : 将 /etc/profile 中的环境变量删除, 只在 ~/.bashrc 中配置;


export PATH=$PATH:/opt/arm-linux-gdb/bin/
export PATH=$PATH:/usr/local/arm/4.3.2/bin/

-- 环境变量顺序 : 注意前面的环境变量覆盖后面的, 交叉工具链中也有 arm-linu-gdb, 但是 /opt 下面的先配置, 因此事这个先生效;


-- 默认的 arm-linu-gdb : 是 7.5 版本的;


-- 交叉工具链中的 gdb : 6.8版本的, 无法进行 在线调试;






(4) 安装 JLink



安装流程 : 

-- 解压文件 : JLink_Linux_V434a.tgz;

-- 进入cd JLink_Linux_V434a 目录, 拷贝文件 : 拷贝 libjlinkarm.so.4 和 libjlinkarm.so.4.34.1 到 /usr/lib 目录下 命令 cp -d libjlinkarm.so* /usr/lib -f, 拷贝 45-jlink.rules 到 /etc/udev/rules.d/ 下 命令 cp 45-jlink.rules /etc/udev/rules.d/;


[root@localhost ARM-tools]# tar -xvzf JLink_Linux_V434a.tgz 
JLink_Linux_V434a/
JLink_Linux_V434a/JLinkExe
JLink_Linux_V434a/libjlinkarm.so.4
JLink_Linux_V434a/start
JLink_Linux_V434a/JLinkGDBServer
JLink_Linux_V434a/libjlinkarm.so.4.34.1
JLink_Linux_V434a/README
JLink_Linux_V434a/45-jlink.rules
[root@localhost ARM-tools]# ls
arm-linux-gcc-4.3.2.tgz   dnw_usb.ko
arm-linux-gdb-7.5         eclipse-cpp-helios-SR2-linux-gtk.tar.gz
arm-linux-gdb-7.5.tar.gz  JLink_Linux_V434a
dnw                       JLink_Linux_V434a.tgz
[root@localhost ARM-tools]# cd JLink_Linux_V434a
[root@localhost JLink_Linux_V434a]# ls
45-jlink.rules  JLinkGDBServer    libjlinkarm.so.4.34.1  start
JLinkExe        libjlinkarm.so.4  README
[root@localhost JLink_Linux_V434a]# cp -d libjlinkarm.so* /usr/lib -f
[root@localhost JLink_Linux_V434a]# cp 45-jlink.rules /etc/udev/rules.d/



执行 JLinkGDBServer :

[root@localhost JLink_Linux_V434a]# ./JLinkGDBServer 
SEGGER J-Link GDB Server V4.34a

JLinkARM.dll V4.34a (DLL compiled Aug 31 2011 11:51:40)

Listening on TCP/IP port 2331

J-Link connected
Firmware: J-Link ARM V8 compiled Aug 24 2011 17:23:32
Hardware: V8.00
S/N: 17935099
Feature(s): RDI,FlashDL,FlashBP,JFlash

J-Link found 2 JTAG devices, Total IRLen = 5
JTAG ID: 0x07B76F0F (ARM11)








(5) 安装 eclipse




安装流程 : 

-- 取消 默认 eclipse : 红帽6.3中默认安装了eclipse, 进入 /usr/bin 目录, 将 eclipse 快捷方式改为 eclipse.bak, 如果需要使用这个 eclipse, 执行 eclipse.bak即可;


[root@localhost ~]# cd /usr/bin/
[root@localhost bin]# mv eclipse eclipse.bak

-- 开始启动时会出错 : 不用管, 在此启动 eclipse 就会启动成功;


[root@localhost eclipse]# ./eclipse 

#

# A fatal error has been detected by the Java Runtime Environment:

#

#  SIGSEGV (0xb) at pc=0x00b8f8c1, pid=11165, tid=3077863104

#

# JRE version: 6.0_24-b24

# Java VM: OpenJDK Client VM (20.0-b12 mixed mode linux-x86 )

# Derivative: IcedTea6 1.11.1

# Distribution: Red Hat Enterprise Linux Server release 6.2 (Santiago), package rhel-1.45.1.11.1.el6-i386

# Problematic frame:

# C  [UTF-16.so+0x8c1]  gconv+0x3c1

#

# An error report file with more information is saved as:

# /root/arm/ARM-tools/eclipse/hs_err_pid11165.log

#

# If you would like to submit a bug report, please include

# instructions how to reproduce the bug and visit:

#   http://icedtea.classpath.org/bugzilla

# The crash happened outside the Java Virtual Machine in native code.

# See problematic frame for where to report the bug.

#

已放弃 (core dumped)


-- 安装 CDT 插件 : 地址 http://opensource.zylin.com/zylincdt , 注意 三个都选择;






(6) 工程配置



配置工程 : 

-- 导入工程 : 选择 菜单 'File' --> 'New' --> 'Makefile Project with Existing Code'


-- 取消自动编译 : 菜单 'Project' --> 'Build Automatically' 选项;

-- 清除编译文件 : 选择 'Project' --> 'Clean ...', 就会清除 .o .elf .bin 文件;

-- 编译文件 : 'Project' --> 'Build All' 选项, 同时 Console 中会有命令行输出;






(7) Debug配置



Debug 配置 : 

-- 设置Main 选项卡 : 双击 Zylin Embedded debug (Native), 创建 Degug, 设置工程名, 设置调试程序, 注意选择 elf 格式的文件;


-- 设置 Debugger 选项卡 : 取消 Stop on startup at : main 选项, GDB debugger 程序选择为 arm-linux-gdb;


-- 设置初始化脚本 : 在 Commands 选项卡中设置 初始化脚本 , 注意下面的脚本是 ok6410 开发板的脚本, 其它开发板无法使用;

# 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


[1] [2] [3] [4] [5]
关键字:裸板调试  交叉工具链  Makefile  链接器脚本  eclipse  JLink  调试环境 引用地址:【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | e

上一篇:【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)
下一篇:Linux驱动——LED闪烁

推荐阅读最新更新时间:2026-03-03 03:49

Eclipse IDE环境下使用TRACE32调试工具
MCU/SoC系统开发 调试 工具厂商劳特巴赫技术有限公司(Lauterbach)提供的 TRACE32 调试和 跟踪 工具已经被广泛的应用在通信/家用电子, 汽车电子 , 医疗器械 及 工业控制 等高端市场的程序调试和跟踪领域,为无数的行业领导企业带来了巨大的便利和效益。而Eclips作为开放式的集成 开发环境 ( IDE ),因其可以集成许多免费或者廉价的插件资源而有效的完成研发任务,也日益被许多知名企业和工程师作为首选的开发环境。通过整合Lauterbach TRACE32开发工具(图1)和Eclips IDE,使得TRACE32调试工具的强大的功能与Eclips的易用性/完整性相结合,将给企业和工程师带来更大的便利和更高的效
[嵌入式]
[国嵌笔记][016][交叉工具]
交叉工具链 1.交叉工具是编译在arm平台上运行程序的工具,交叉工具链是交叉工具的集合 2.file filename 通过file命令可以查看程序运行的平台等相关信息 3.交叉开发 1.在x86平台上产生其他平台上运行程序的模式叫做交叉开发 2.宿主机是产生嵌入式软件的平台,目标机是运行嵌入式软件的平台 常用的交叉工具 1.交叉编译器 arm-linux-gcc 相同之处 arm-linux-gcc file.c -o file 与gcc用法上一样 不同之处 gcc从 /usr/include/ 下寻找头文件 arm-linux-gcc从 /usr/loacl/arm/.../lib 下寻找头文件
[单片机]
【ARM裸机s5pv210 】旧版本交叉编译工具配置
旧版本交叉编译工具链的安装 1.cd /usr/local/ mkdir arm tar -jxvf arm-2009q3.tar.bz2 cd /usr/local/arm/arm-2009q3/bin bash mk-arm-linux-.sh sudo gedit ~/.bashrc 添加 export PATH=/usr/local/arm/arm-2009q3/bin:$PATH source ~/.bashrc 2.安装32位库 sudo apt-get update apt-get update sudo apt-get install lib32ncurses5-dev 3./usr/local/arm/arm
[单片机]
ARM-LINUX-GCC交叉编译工具必知必会
一、一些需要知道的概念 在正式谈论交叉编译工具ARM-LINUX-GCC前,我想有必要明确两个非常基本的概念。 1、什么是交叉编译,什么是交叉编译工具链:https://www.crifan.com/files/doc/docbook/cross_compile/release/html/cross_compile.html#what_is_crosscompile,只需要关注此文章的第一章与第二章。2、GCC与ARM-LINUX-GCC的关系:GCC是一套编译工具链,一般来说,其用于将代码编译成在X86架构电脑上运行的可执行文件,而ARM-LINUX-GCC可以看成经过特殊配置的GCC,其编译出的程序并不是跑在X86架构电脑
[单片机]
ARM-LINUX-GCC<font color='red'>交叉</font>编译<font color='red'>工具</font><font color='red'>链</font>必知必会
S3C2440-裸机篇-02 | 安装和使用arm-linux-gcc交叉编译工具
1.为什么需要交叉编译工具 宿主机运行的是标准Linux操作系统,编译出的程序却需要在目标机的Linux上跑,这就叫交叉编译,编译器叫做交叉编译器。 之前我们已经使用过gcc编译Linux本地主机的程序(Linux C语言编程(上篇) | gcc的使用),而我们现在需要的这个编译器的目标系统是ARM,不运行操作系统,仅运行裸机程序,需要在Linux主机上编译出可以运行在S3C2440@ARM920T芯片上跑的程序,所以不能使用这个编译器,需要使用arm-linux-gcc交叉编译器。 2.arm-linux-gcc的安装 arm-linux-gcc是ARM官方基于Linux平台的arm编译器,其特点有: 开源免费 支持
[单片机]
S3C2440-裸机篇-02 | 安装和使用arm-linux-gcc<font color='red'>交叉</font>编译<font color='red'>工具</font><font color='red'>链</font>
详细介绍构建ARM Linux的交叉编译工具
学习目标: ● 了解交叉编译工具链 ● 理解分步构建交叉编译工具链的方法 ● 学会使用Crosstool工具构建交叉编译工具链 2.1 交叉编译工具链介绍 读者可能会有疑问,为什么要用交叉编译器?交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程式,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程式,编译得到的程式在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统。这种方法在异平台移植和嵌入式研发时非常有用。相对和交叉编译,平常做的编译叫本地编译,也就是在当前平台编译,编译得到的程式也是在本地执行。用来编译这种跨
[单片机]
使用Qt ARM交叉编译提示“此qt版本具有一个未知的工具
在工具- 选项- Qt4(高版本的Qt是“工具- 选项- 编译和运行- Qt4”)中,添加ARM版本的qmake时,提示“此qt版本具有一个未知的工具链” 我遇到了两个情况都提示这个。 第一种是由于QtCreator没有权限访问mkspecs路径导致的,qt-arm使用的默认路径/usr/local/Trolltech/QtEmbedded-4.7.3-arm ,默认用户没有访问mkspecs文件夹里的文件的权限。两种办法: 1.给当前用户访问权限 sudo chmod 775 mkspecs -R 注意,只给mkspecs/qws文件夹权限是不行的,因为里面的配置文件写了,还要访问common等文件夹,干脆都给了权限算了。
[单片机]
arm gcc交叉编译工具建立
1.1. Arm交叉编译工具链 下载地址Gnu.org binutils-2.21.1.tar.bz2 gcc-4.4.4.tar.bz2 glibc-2.11.2.tar.bz2 Glibc-ports-2.11.tar.bz2 Gmp-4.2.tar.bz2 Mpfr-2.4.0.tar.bz2 1.1.1. 建立工作目录 创建工具链文件夹: # mkdirembedded-toolchains 在建立了顶层文件夹embedded-toolchains,下面在此文件夹下建立如下几个目录: setup-dir,存放下载的压缩包; src-dir,存放binutils、gc
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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