更多课程 选择中心

嵌入式培训
美国上市教育机构

400-111-8989

嵌入式培训

建立ARM嵌入式编程环境教程

  • 发布:党小阳
  • 来源:党小阳
  • 时间:2018-01-15 15:19

这篇文章讲为何借助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系统,用路由器或网线连成一个局域网。

本文内容转载自网络,本着传播与分享的原则,来源/作者信息已在文章顶部表明,版权归原作者所有,如有侵权请联系我们进行删除!

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:嵌入式机器学习处理器的技术挑战和机会
下一篇:零基础接触Qt嵌入式开发

嵌入式和单片机的区别在哪?

嵌入式Linux底层系统怎么学?

ARM常用概念有哪些?

优化嵌入式软件的七个技巧

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省