嵌入式培训
达内IT学院
400-996-5531
这篇文章讲为何借助PC来开发ARM端的程序,以及开发环境如何搭建。
ARM开发板接一个显示器和键盘、鼠标是可以直接写程序的。所以为什么要写这篇文章呢?【注1】我们先观察ARM处理器板子上做开发的编程过程,看看会遇到什么困难。
首先是写代码,这里没什么问题。在linux下最常用的编辑器还是vim,vim的配置还是有一定工作量的,这里不作为重点,自己看尾注【注2】。
然后代码写完需要编译,处理器性能越差,编译速度就很慢。第一个问题出现了,当程序很大时,在ARM上直接编译用时太久,等不了啊,所以人们就想在PC上先编译好,然后把程序拷贝到开发板上。接着第二个问题出现了,PC上的处理器和ARM上的处理器是不同的,所以PC上编译的helloworld在ARM上是不能跑的。这个时候我们需要借助一个工具,称为交叉编译器,用于在PC上编译出能在ARM端运行的程序。重复一遍,使用交叉编译的原因是ARM上的程序编译速度远低于PC。如果写点代码量不大的程序,直接在ARM端开发也无妨。
最后代码需要DEBUG,我们写好的程序一定不可能是完美的,所以需要进行调试。问题2出现了,程序在ARM上跑,改代码却是在在PC上,一次次来回复制编译好的程序效率就太低了,所以我们需要一个复制文件的工具。有很多种办法,用U盘拷肯定是太慢啦,在【1】局域网内的【2】两台linux系统电脑之间传文件的最简洁方式是使用scp命令,从PC上到ARM上;如果是windows系统,可以使用samba服务。
我们希望在PC端打完编程的全套动作,所以第三个问题就是我们如何在PC上对ARM端程序debug,这个问题用远程调试来实现,我们在ARM端上使用GDBserver,然后在PC上使用交叉编译的gdb工具来实现远程调试。
如果主机上用的是VMware虚拟机,那么可能会遇到虚拟机内外文件传递的问题,不作为重点,自己看尾注【注3】。
综上,为了在PC上写ARM端的代码我们要用哪些工具呢?【注4】
交叉编译工具arm-none-linux-gnueabi-gcc、向开发板拷贝程序的scp命令、远程调试工具GDBserver。
我们一一来说一下:
1.1交叉编译工具的安装(在PC上):
#解压交叉编译工具arm-none-linux-gnueabi-gcc安装包:
tar xxxxx/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C ./
#将解压好的编译器路径添加到环境变量中,先打开配置文件:
sudo vim /etc/profile
#给profile最后加一行export PATH=$PATH:/home/xxxxx/arm-2009q1/bin,将路径插进去
#让电脑使用改写后的profile文件
source /etc/profile
#重启之后就安装好了,可以用arm-none-linux-gnueabi-gcc -v查看版本
1.2交叉编译工具的使用(在PC上):
arm-none-linux-gnueabi-gcc helloworld.c -o helloworld
2.scp命令的使用(在PC上):
scp helloworld username@192.168.1.102:/home/username/
然后在ARM端进入路径,输入./helloworld运行就可以了。
3.1gdbserver的安装(在PC上):
#首先找到gdbserver所在位置
cd xxxxx/arm-none-linux-gnueabi/usr/bin/
ls gdbserver
#拷贝到开发板上
scp gdbserver root@192.168.1.102:/home/root
#拷贝gdbserver所需的libthread_db库文件
cd xxxxx/arm-none-linux-gnueabi/usr/bin/lib
scp libthread_db.so root@192.168.1.102:/usr/lib
特别地,有的时候开发板程序用的是libthread_db.so.1,这时候我们用ln做个定向到libthread_db.so就行了(在ARM上)
cd /usr/lib
ln -s libthread_db.so ./libthread_db.so.1
此外,将 gdbserver 可执行文件拷贝到/usr/sbin 下面,这样就不会只能在 gdbserver 可执行文件夹下才能运行 gdbserver 程序。(在ARM上)
3.2gdbserver的使用:
(在PC上)
#交叉编译时加-g
arm-none-linux-gnueabi-gcc test.c -o test -g
#复制程序
scp test root@192.168.1.102:/home/root
(在ARM上)
#格式gdbserver <Host_IP>:<Ports><Program><Arguments...>
./gdbserver 192.168.1.101:1111 ./test
#192.168.1.101 为虚拟机的 IP 地址;1111 为连接的端口号(自行设置);./test 为将要调试的程序,如果是 Qt 程序需要跑界面则需要在后面增加-qws,-qws 是调试运行的参数。
(在PC上)
#格式<.../arm-none-linux-gnueabi-gdb> <.../test>,交叉编译gdb路径和程序路径
/home/xxxxx/arm-none-linux-gnueabi-gdb /home/xxxxx/test
#连接ARM端
target remote 192.168.1.102:1111
#192.168.1.102 是ARM端的 IP 地址
3.3gdb调试命令
完成3.2后,可以采用以下命令进行调试。
命令:l,参看代码;
命令:b main,在 main 处设置断点;
命令:b 5,在第五行设置断点;
命令:c,继续执行;
命令:help target,查询其他命令。
尾注:
【注1】首先说一说为什么要用ARM处理器呢?因为ARM处理器第一功耗小,能用在移动设备上,第二成本低,在家电、工厂的控制中就用的比较多,第三arm处理器可以用linux操作系统,是个小电脑。
一般的开发,从硬件的复杂程度可以分为三层,第一层是单片机开发,at89s51、stm32和arduino板就在这一层,无人机上用的就是stm32哟;第二层是嵌入式开发,ARM、DSP、FPGA和树莓派就在这一层;第三层就是我们的PC机,INTEL的各种cpu就在这里啦。
【注2】 要把vim配置的稍微好用一点还是需要下功夫的,我一般就做以下三个工作:
1.改写.vimrc文件的内容,.vimrc是vim的配置文件,在使用前配置vim中的插件、高亮等等的,所谓改写也就是从网上下载一个配置比较完整的vimrc文件把原来的替换掉;
2.添加YouCompleteMe和Nerdtree这两个vim插件,自动补全和文件浏览器;
https://github.com/Valloric/YouCompleteMe
https://github.com/Xuyuanp/nerdtree-git-plugin
3.在使用vim的时候用好:vsplit命令,也就是分屏。
【注3】虚拟机共享目录的设置:
使用VMware时,会需要将windows底下的文件传到虚拟机的linux中,这时候利用VMware Tools可以设置shared folder(共享目录),利用这个目录来简化虚拟机内外的文件传递。
1.VMware Tools的安装(在PC上):
这个工具对我们有两个作用,一个是刚才说的共享目录,第二个是可以虚拟机的图形界面可以变大到足够用。
首先,点击VMware菜单栏上的VM-Install VMware Tools…
然后,进入命令行执行以下操作:
cd /media/VMware\ Tools #此处务必使用 Tab 键补全,不能手动输入”VMware\ Tools"
tar zxvf VMwareTools-9.6.2-1688356.tar.gz -C /home/xxxxx #解压安装包
cd ~/vmware-tools-distrib/
sudo ./vmware-install.pl #进行安装
2.共享目录的设置
先要停止虚拟机,之后点击VM->Setting...,进入窗口后Options->Shared Folders->Always enabled,然后添加目录,打开虚拟机在目录/mnt/hgfs下就可以找到共享目录。
【注4】本文中默认PC和ARM上都是Linux系统,用路由器或网线连成一个局域网。
本文内容转载自网络,本着传播与分享的原则,来源/作者信息已在文章顶部表明,版权归原作者所有,如有侵权请联系我们进行删除!
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved