From: http://blog.chinaunix.net/uid-25119314-id-226230.html

1. 交叉编译器

1.1 交叉编译器介绍

在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码,而这种工具就是交叉编译器(cross compiler)。

1.2 搭建交叉编译环境

1.2.1 实验环境

交叉编译工具:arm-linux- 4.2.2

编译平台:ubuntu10.10

开发板类型:UT-S3C6410

1.2.2 搭建步骤

1) 在/usr/local/下建立交叉编译器的安装目录arm:

sudo  mkdir /usr/local/arm

2)将下载的交叉编译器包解压到/usr/local/arm目录下:

sudo tar jxvf cross-4.2.2-eabi.tar.bz2 -C /usr/local/arm/

3)解压成功后,修改PATH环境变量:

sudo vim  /etc/profile

在文件为加入交叉编译器arm-linux-所在的路径:

export PATH=$PATH:/usr/local/arm/4.2.2-eabi/usr/bin

然后退出vim。

4) 更新一下配置文件/etc/profile:

source /etc/profile

5)检测是否安装成功:

现在就可以使用交叉编译器了,写一个测试程序helloworld,交叉编译下,看是否能在开发板上运行。

i. 交叉编译测试程序

arm-linux-gcc helloworld.c -o helloworld

ii.把生成的可执行文件helloworld复制到NFS的挂载目录下:

sudo  cp ./helloworld   /nfsboot

注意:本实验中开发板使用NFS挂载rootfs,nfsboot是NFS的挂载目录。

iii.在超级终端上运行:

./helloworld

执行结果:

2. 交叉调试GDB的介绍和使用

2.1 GDB是什么?

GDB(GNU symbolic debugger) 简单的说是UNIX和LINUX下的一个调试工具。

2.2 GDB的主要特性

像所有的调试器一样,GDB可以让你调试一个程序,包括让程序在你希望的地方停下,此时你可以查看变量,寄存器,内存及堆栈。更进一步你可以修改变量及内存值。GDB是一个功能很强大的调试器,它可以调试多种语言。在此我们仅涉及C和C++的调试,而不包括其它语言。还有一点要说明的是,GDB是一个调试器,而不像VC一样是一集成环境。你可以使用一些前端工具如XXGDB,DDD等。他们都有图形化界面,因此用更方便,但它们仅是GDB的一层外壳。因此,你仍应熟悉GDB命令。事实上,当你使用这些图形化界面时间较长时,你才会发现熟悉GDB命令的重要性。

2.3 GDB的安装

1)下载源码:

可以从http://www.gnu.org/software/gdb/download/获取到最新的GDB版本。

2)先做一些准备工作:

a)Sudo mkdir –p /usr/local/arm-gdb

b)Sudo chown –R cjok /usr/local/arm-gdb

c)cd Download

3)然后开始编译arm-linux-gdb

a)解压gdb包:

tar zxvf gdb-7.2.tar.gz

b) 配置configure文件:

cd gdb-7.2/

./configure --target=arm-linux  --prefix=/usr/local/arm-gdb

c)编译和安装

make

sudo make install

d)cd到/usr/local/arm-gdb/目录下会看到

cd  /usr/local/arm-gdb

ls

e)然后把arm-linux-gdb所在的路径添加到PATH环境变量中:

sudo vim /etc/profile

在文件为加入export PATH=$PATH:/usr/local/arm-gdb/bin

source /etc/profile

查看一下:

4)编译gdbserver

a)配置configure文件

cd  gdb-7.2/gdb/gdbserver/

./configure --target=arm-linux --host=arm-linux

b)编译

make CC=arm-linux-gcc

c)把刚刚生成的gdbserver拷贝到NFS共享目录下,因为gdbserver最终是在目标机上运行:

sudo cp gdbserver /nfsboot/

5) 测试gdbserver

a)编译一个简单的程序helloworld.c

arm-linux-gcc –g helloworld.c –o helloworld

cp helloworld /nfsboot

*记得编译时,加-g选项

b)库问题

需要注意的是运行gdbserver还需要libthread_db库,如果你做的文件系统里没有相应的库,需要从交叉编译器内拷贝一个过去。

cp –avf /usr/local/arm/4.2.2-eabi/lib/libthread_db*   /nfsboot/lib

注意:若不知道少了什么库,可以根据运行时错误提示拷贝。

c)到超级终端上启动gdbserver

./gdbserver 192.168.1.10:2345 helloworld

注意:我用的HOST IP是192.168.1.10,2345是监听端口,可以随便设定

然后会出现:

d)然后在主机上启动gdb:

cd /nfsboot

arm-linux-gdb helloworld

会出现:

链接到开发板上:

target remote 192.168.1.128:2345

注意:192.168.1.128是开发板的IP,2345是监听端口,要与上面设置的相同

这是超级终端会出现:

e)设置一下gdb环境变量

show solib-absolute-prefix

set solib-absolute-prefix /usr/local/arm/4.2.2-eabi/lib/

usr/local/arm/4.2.2-eabi/lib/ 是交叉编译器的库路径

show solib-search-path

set solib-search-path /nfsboot/lib/

/nfsboot/lib是文件系统的库路径

注:红色部分为执行的指令。

到此环境已经搭建好,现在可以像在Linux下用GDB调试程序了。

2.4 GDB的使用

OK,现在就可以开始交叉调试了。

a) 把之前的helloworld修改一下:

  1. 1 #include <stdio.h>
  2. 2
  3. 3 int main(void)
  4. 4 {
  5. 5 int a, b, i;
  6. 6 a = 3;
  7. 7 b = 4;
  8. 8 i = a + b;
  9. 9 printf("i = %d\n", i);
  10. 10 return 0;
  11. 11 }

b)交叉编译生成可执行文件之后,放到NFS的挂载目录下

i.在超级终端上执行:

./gdbserver 192.168.1.10:2345 helloworld      

ii.在HOST上执行:

arm-linux-gdb helloworld

target remote 192.168.1.128:2345

开始对程序进行调试:

2.5 GDB的常用指令

load:装入一个程序;

symbol-file:装入符号库文件,可以是用-g参数编译的可执行文件;

f(ile):指定一个可执行文件进行调试,gdb将读取些文件的调试讯息,如f a.exe;

l(ist):列程序出源文件;

r(un) :装载完要调试的可执行文件后,可以用run命令运行可执行文件;

b(reak):设置断点(break point),如b 25,则在源程序的第25行设置一个断点,当程序执行到第25行时,就会产生中断;也可以使用b funcname,funcname为函数的名称;

当程序运行到断点停下来时:

c(ontinue):c命令可以另中断的程序继续执行,直到下一个中断点或程序结束;

p(rint):输入某个变量的值,如程序定义了一个int a的就是,p a就会输出aa的当前值;

n(ext):程序执行到断点时中断执行,可以用n指令进行单步执行;

s(tep):程序执行到断点时中断执行,可以用s指令进行单步执行进某一函数;

q(uit):退出GDB

交叉编译和交叉调试环境搭建及使用相关推荐

  1. 交叉编译和交叉调试环境的搭建及使用

    1. 交叉编译器 1.1 交叉编译器介绍 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译.这个编译过程就叫交叉编译.简单地说,就是在一个平台上生成 ...

  2. 路由器逆向分析------路由器固件分析和动态调试环境搭建简述

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/70140865 01.路由器固件分析和动态调试环境搭建简述的原文 <Emula ...

  3. 嵌入式系统开发与应用——嵌入式 Linux 调试环境搭建

    附录:UBoot常用命令手册 一. 实验目的 1.掌握VMware中设置共享文件夹的方法,为后续实验做准备: 2.熟悉 Linux TFTP 配置,为后续 Linux 底层开发做准备(后面会用 tft ...

  4. auto.js id为参数滑动_【Autojs教程】02Autojs PC端开发调试环境搭建

    [Autojs教程]02-Autojs PC端开发调试环境搭建 写在前面 本篇教程算是保姆级教程了,希望以此能吸引更多感兴趣的同学学习Autojs,也希望大家能因此碰撞出更多的奇思妙想 关注微信公众号 ...

  5. mac 内核调试环境搭建

    操作系统安装 先从 app store 下载 下载完后安装程序在应用里 打开 vm 新建 双击从光盘或映像安装 安装 安装失败 用其它工具安装 还可以先在 windows 上的 VM 下先安装好再拷贝 ...

  6. uni-app 模拟机调试环境搭建

    前言 最近接手了一份使用 uni-app 进行开发的工作,今天才有时间正式开始,在这里记录一下使用 HBuilderX 进行 uni-app 开发的调试环境搭建过程. 下载安装 HBuilderX 进 ...

  7. Mikrotik路由器(routerOS)调试环境搭建

    routerOS 调试环境搭建 1 安装routerOS 1.1 下载routerOS镜像文件 略 1.2 安装 需要注意的是:选择硬盘类型为IDE,因为routerOS默认情况下未包含SCSI或SA ...

  8. eas java配置_EAS客户端调试环境搭建

    客户端调试环境搭建说明 适用场景:在现场跟踪问题或者在研发内部跟踪定位测试环境的问题时,开发人员需要快速搭建一个可供调试的环境以供分析问题,以下说明可供开发人员在需要时使用,注意该方式只支持客户端调试 ...

  9. Nacos 简介与 本地调试环境搭建

    目录 1.简介 2.Nacos架构 3.本地调试环境搭建 3.1 源码下载 3.3 单机启动 Nacos 3.4 集群方式启动:基于文件方式 4.Nacos源码模块介绍 5. 约定说明 1.简介 Na ...

最新文章

  1. 一文掌握机器学习必备数学知识(附学习资源)
  2. 图解.Net Telerik 控件教程
  3. xa协议 mysql_分布式事务XA实现数据一致性的协议与原理
  4. 机器学习解决什么问题_机器学习帮助解决水危机
  5. 【英文写作日知录 第1期】句式汇总 Sun, 05 July 2020
  6. nutwk的maven中央仓库及配置
  7. linux 格式化u盘_使用Universal USB Installer,打造你的U盘版Linux系统
  8. 递归 dfs 记忆化搜索 动态规划
  9. C小项目 简易英汉词典
  10. StarUML 3 中文文档 构件图
  11. 微信小程序开发者工具详解
  12. 电脑控制安卓手机的工具神器Scrcpy GUI
  13. 多元相关与回归分析及R使用
  14. WinForm大型企业ERP系统
  15. hive之full outer join(全连接)使用方法
  16. 公共 DNS 服务器 IP 地址
  17. 计算机usb端口没反应,电脑usb接口没反应是什么原因?电脑usb接口没反应解决方法...
  18. Wulihub设计文档类在线托管分享平台
  19. .Net中DLL冲突解决(真假美猴王)
  20. 计算机基础之流水线(七)

热门文章

  1. git 配置图形比较工具
  2. established关键字
  3. 戴尔看好Ubuntu超越Windows的十个优势
  4. 动量策略 python_在Python中使用动量通道进行交易
  5. 分析citibike数据eda
  6. 在Java里重写equals和hashCode要注意什么问题
  7. 重学TCP协议(3) 端口号及MTU、MSS
  8. leetcode 766. 托普利茨矩阵
  9. leetcode 480. 滑动窗口中位数(堆+滑动窗口)
  10. 我如何使用React和Typescript在freeCodeCamp中构建天气应用