tar -xvzf arm-linux-gcc-4.4.3-20100728.tar.gz -C /home/tanglg/arm-linux
解压完成后,可以在/home/tanglg/my_tmp_file/opt/FriendlyARM/toolschain/4.4.3目录下看到一个bin目录,里面包含了各种编译工具文。
我们习惯把工具链安装在/usr/local目录下,故我们在/usr/local/目录下创建一个目录存放交叉工具链的文件:
sudo mkdir /usr/local/arm
将/home/tanglg/my_tmp_file/opt/FriendlyARM/toolschain/目录下的4.4.3目录拷贝到刚新建的/usr/local/arm目录下:
sudo cp ./4.4.3/ /usr/local/arm/ -r
设置环境变量PATH,使其可以在任意的目录下都可以访问到交叉工具链。
vim /etc/profile
export PATH=$PATH:/usr/local/arm/4.4.3/bin //将其加在文件末尾处
输入如下命令立即使新的环境变量生效。
source /etc/profile
输入如下命令,如果显示内容含有/usr/local/arm/4.4.3/bin则表示已经添加成功。
echo $PATH
输入命令测试检查arm-linux-gcc -v 是否安装完成。显示了版本号即表示安装成功。
如果arm-linux-gcc -v命令后没有输出工具链的版本号,反而是输出No such file or directory 的错误提示,则说明你下载的工具链是32位的,而你的Linux系统是64位的。
如果需要让其32位的应用程序兼容到64位的系统中,则只需要依次安装如下两个依赖库即可:
基础依赖库:
sudo yum install glibc.i686 -y
libstdc++依赖库:
sudo yum install libstdc++.i686 -y
至此,交叉工具链安装结束咯,下面就可以大展伸手去安装gdb和gdbserver啦!!!
2、GDB源码包下载
对于嵌入式软件开发调试工具没有现成的,且嵌入式系统比较繁杂,gdbserver需要根据目标系统单独编译。gdb的源码包下载地址为:Index of /gnu/gdb
3、安装arm-linux-gdb
一般Linux发行版中都有一个可以运行的GDB,但不能直接使用该发行版中的GDB来做远程调试,而需要获取GDB的源代码包,针对arm平台作一个简单配置,重新编译得到相应GDB。
(1)解压源码包
tar -zxvf gdb-7.12.tar.gz
(2)生成Makefile
cd gdb-7.12/ //进入源码目录
mkdir /usr/local/arm-gdb //创建一个安装目录
./configure --target=arm-linux --prefix=/usr/local/arm-gdb //执行配置文件
注意:
–target: 指定编译环境,一般设置为交叉编译器前缀。
–prefix:指定安装路径,可自己任意指定合法路径
(3)编译与安装
make //编译
make install //安装
安装结束后会在你指定的安装目录下生成三个文件夹,里面包含可执行文件、头文件、动态库文件等,如下图所示:
(4)填加到环境变量
将生成的bin文件添加到环境变量中:
vim /etc/profile
export PATH=$PATH:/usr/local/arm-gdb/bin //添加在文件末尾
source /etc/profile //生效环境变量
echo $PATH //检查环境变量
注意:
(1)你也可以放在其它环境变量下,例如:/usr/local/bin、/usr/bin等
(2)生成的文件可删除不需要用到的,比如,此处只需要使用arm-linu-gdb可执行文件,则你可只需将此文件添加到环境变量即可,其他文件可直接删除。
4、安装gdbserver
(1)生成Makefile
cd gdb-7.12/gdb/gdbserver/ //进入源码目录
./configure --target=arm-linux-gnueabi --host=arm-linux //执行配置文件
注意:
–target:指定目标平台,博主的目标平台为ARM。
–host: 指定宿主机运行的是arm-linux-gdb
(2)编译与安装
make
编译gdbserver不需要执行make install
命令,因为make
之后在当前目录下会生成可执行程序gdbserver。
(3)拷贝到目标平台
拷贝之前先更改gdbserver读写权限:chmod 777 gdbserver
将可执行文件gdbserver拷贝到目标平台的**/usr/local/bin/**目录下。
至此,远程调试环境已经搭建完成。
5、gdb+gdbserver调试流程
(1)检查网络是否正常
打开MobaXterm登入虚拟机和开发板的Linux系统,执行如下操作:
开发板ping主机
开发板ping虚拟机
主机ping开发板
虚拟机ping开发板
保证相互之间均可以ping通。
注意:主机ip、开发板ip和虚拟机ip地址设置在同一个网段内。
(2)编辑和编译测试代码
1)测试代码
#include
#includeusing namespace std;
void fun(int &a, int &b)
{
a = b = 10;
}void my_fun(int &a, int &b)
{a > b ? (a += b) : (b -= a);
fun(a, b);
}
int main()
{int a = 13, b = 16;
my_fun(a,b);
cout<< "a = " << a << endl;
cout<< "b = " << b << endl;return(0);
}
2)编译代码
-g : 设置带调试信息的程序
3)设置读写权限
修改可执行二进制文件test读写权限:chmod 777 test
4)下载文件到开发板
下载可执行二进制文件到开发板的工作目录下。(自己指定一个合法的工作目录)
文件下载方法:在Linux系统编译好的可执行文件先下载到window,然后再从window下载到开发板。(下载操作方式众多,选择自己习惯的就行)
(3)启动调试环境
宿主机IP:192.168.xxx.xxx
开发板IP:192.168.xxx.xxx
1)开发板上运行gdbserver
gdbserver 192.168.xxx.xxx:2001 test
其中 192.168.xxx.xxx 是宿主机的地址,2001是调试端口(该值建议设在2000以上),test是需要调试的可执行程序。gdbserver启动之后打印出下面内容:
2)执行gdbserver脚本
以上操作也可以通过自己编写一个shell脚本去执行,如下:
该脚本执行时需要输入一个参数,即需要调试的可执行文件名。执行时如果没有输入参数会有一个提示信息打印。执行命令如下:
./gdbserver test //这样就不需要每次都输入宿主机IP和端口号等信息了,直接执行脚本就搞定。
3)宿主机上运行arm-linux-gdb
arm-linux-gdb test
启动之后会打印如下信息:
最后一行(gdb) 表示arm-linux-gdb
在等待输入指令,现在需要输入指令来连接gdbserver,如下所示:
(gdb) target remote 192.168.xxx.xxx:2001
其中 192.168.xxx.xxx 是开发板的IP地址,2001是调试端口(必须与gdbserver端保持一致)
4).gdbinit脚本
每次启动gdb时都要在gdb命令行上手动输入指令,去连接目标机,操作上显得及其麻烦。而使用.gdbinit脚本则可以轻松解决此事。
gdb在启动的时候,会在你的当前工作目录下查找 ".gdbinit"
这个文件,并把它的内容作为gdb命令进行解释,所以如果我把脚本命名为".gdbinit",这样在启动的时候就会处理一些你常用的命令。
**第一步:**在”~"目录下添加一个.gdbinit
, 默认gdb初始化时会调用这个文件。
**第二步:**编辑该.gdbinit
, 在文件中加上 set auto-load safe-path xxx
set auto-load safe-path /home/tanglg/workspace_tlg/
指定了/home/tanglg/workspace_tlg/路径为gdb的安全加载路径,即后续你可在该路径下的任何子路径下均可加载.gdbinit文件并解释文件内容。
如果不在“~”目录下指定一个安全路径的话,会在使用.gdbinit时,报如下错误:
File “/home/tanglg/workspace_tlg/myapp/test/.gdbinit” auto-loading has been declined by your `auto-load safe-path’ set to “ d e b u g d i r : debugdir: debugdir:datadir/auto-load”.
**第三步:**在/home/tanglg/workspace_tlg/myapp/test/(即你要Debug的目录)下,同样添加一个.gdbinit
**第四步:
**编辑该.gdbinit
,添加你需要的一些指令,例如:
当然在.gdbinit文件中你还可以添加别的指令。
.gdbinit编写好并保存
后,你就可以直接输入arm-linux-gdb test 开始gdb调试了,中途就不用再次主动去连接目标机的gdbserver了。如果你需要更改目标机的IP和端口号,只需修改.gdbinit文件。
至此开发板和虚拟机(宿主机)远程连接起来了。
(4)开始调试
建立链接后,就可以进行调试了。调试在宿主机端,跟gdb调试方法相同。注意的是要用“c”来执行命令,不能用“r”。因为程序已经在Target Board上面由gdbserver启动了,结果输出是在Target Board端,用SSH(或超级终端)查看。
按”c“全速运行后,在目标端查看运行结果:
至此,远程调试环境和调试步骤结束。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)
![img](https://img-blog.csdnimg.cn/img_convert/3a5eef8a0a2cf7ccfdc7ace00b5e76eb.jpeg)
最后
资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!
存中…(img-5MyrIw3w-1712245387779)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
[外链图片转存中…(img-F7tW1CdI-1712245387779)]
[外链图片转存中…(img-jJ53zxWJ-1712245387780)]
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)
![img](https://img-blog.csdnimg.cn/img_convert/3a5eef8a0a2cf7ccfdc7ace00b5e76eb.jpeg)
最后
资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!