交叉编译

交叉编译是相对于本地编译来说的,最开始学习 C/C++时,在PC上写程序,编译生成可执行文件,最后在PC上运行。程序的编辑、编译、运行,都在一台PC电脑上。

嵌入式系统使用的芯片性能都比较弱,不能像X86一样运行Windows/Ubuntu系统,无法提供一个在开发板上写代码、编译代码的环境。
当接触嵌入式开发后,在PC上写程序,编译出可执行文件,最后可执行文件需要下载到开发板上运行。程序运行环境变了,如开发板是基于ARM。程序在X86上编辑,编译,最终运行在另一个和X86完全不同的架构的ARM芯片上。

X86、ARM、MIPS、RISC-V 等芯片的指令集是由不同的组织或者公司设计的,彼此并不兼容。要在 X86 的PC上编译出能够在 ARM上运行的程序,须明确告诉编译器,编译生成的可执行文件需要以ARM指令集的标准编码。为了流程变得简单,开发者们为不同的芯片开发了不同的编译器,如针对 ARM平台的 arm-linux-gcc,针对mips平台的 mips-linux-gnu-gcc。

gdbserver
gdb与gdbserver 的使用。可以像在本地调试一样,对远程机器上的程序进行调试。
嵌入式Linux的gdb调试环境由Host和Target两部分组成。Host端使用gdb,Target端使用gdbserver。
应用程序在嵌入式目标系统上运行,调试时,gdb调试在Host端。gdb向开发板上的gdbserver发出命令,而开发板上的gdbserver就会向应用程序发出信号,使应用程序停下来。
Linux发行版中有一个可以运行的gdb,但不能直接用来做远程调试,需要获取gdb的源代码包,针对arm平台作一个简单配置,重新编译得到相应gdb。

Target端:
远程调试时,需要在远程使用 gdbserver 打开要调试的程序。
有两种方式:
1.直接用 gdbserver 打开
gdbserver :1234 a.out
使用 gdbserver 运行程序 a.out, gdbserver 的监听地址为 192.168.1.230:1234

2.attach 到已经在执行的进程上
gdbserver --attach localhost:1234 16924
用 attach 的方式打开 gdbserver,调试进程号为 16924 的程序

Host端:
(gdb) target remote 192.168.1.230:1234
Remote debugging using 192.168.1.230:1234
0x400007c0 in ?? ()
(gdb) file a.out
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春夏与冬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值