1.3平台
我们通常所说的平台包括硬件平台和软件平台。
处理器和它的外围电路组成在一起,就是所谓的硬件平台。如一个ARM架构处理器和外围电路组成的单板,我们称为ARM平台。
一个嵌入式系统是针对某个应用来开发的,因此不可能在搭建的ARM平台上,再去开发针对这个ARM平台的编译软件和工具等。那该怎么办?
由于x86和x64平台上的资源丰富,因此可以在x86或x64平台上进行编辑、编译代码,然后将编译后的可执行文件下载到单板上去。看起来似乎可以,但是不同架构的处理器有不同的指令系统,需要相应的编译器;这样使得在x86或x64平台编译的代码完全不能再ARM中运行。要实现从x86或x64跨平台到ARM平台,需要一个工具:交叉编译/链接器。
通常ARM平台的交叉编译器为arm-elf-gcc或arm-linux-gcc,交叉链接器为arm-elf-ld或arm-linux-ld。arm-elf-gcc和arm-linux-gcc都是基于ARM平台的交叉编译软件,区别在于它们使用的C库不同。arm-elf-gcc一般使用uClibc/uC-libc或Red Hat专门为嵌入式系统开发的C库newlib。而arm-linux-gcc使用的是GNU的Glibc。我们常使用的交叉编译/链接器是arm-linux-gcc和arm-linux-ld。
软件平台是指可以编译出对应操作系统的可执行程序。如在Linux服务器的终端可以编译出Linux系统运行的程序,那么Linux服务器的终端就可以看做Linux的软件平台;在windws下Wind River workbench可以编译出在Vxworks下运行的程序,那么Wind River workbench可以看做是Vxworks的软件平台。
看到这里,你可能脑子一团槽,到底该怎么建立开发使用的平台(或称环境)。
首先需要一台Linux服务器来编译代码,但是Linux开发人员不可能是一个人,因此需要一台windows系统的电脑来远程登录Linux服务器,建议远程登录软件选择SecureCRT。使用SecureCRT也可以登录单板的文件系统,在连接后,使用ls可以查看根目录下的内容。在Linux中使用vi或gedit来编辑代码效率慢,因此可以在windows平台下的VS来编辑代码,编辑好后再从windows上传到Linux服务器,建议文件传输工具FTP选择FileZilla或SecureFX。
当我们在windows下的VS中编辑完代码,通过FTP上传到Linux服务器;在Linux服务器的终端进行编译;编译完成后下载到单板中,执行查看结果。
将编译好的可执行文件下载到单板上有很多方法,这里介绍4种。
1.将编译好的代码通过FTP下载到windows系统中,在windows平台下使用OpenJTAG(需要烧写软件)、JLink、并口JTAG下载到单板中,方式的选择主要看你单板支持那种方式。
由于并口JTAG需要使用并口JTAG转接板,而现在大部分电脑没有并口,因此很少被使用。而使用USB转JTAG板,有2种方式,分别是OpenJTAG和JLink。
常使用OpenJTAG烧写bootloader或较小的可执行文件(裸板程序)。而JLink只支持烧写NOR FLASH。
2.在windows下使用SecureCRT登录单板后,进入bootloader中,使用串口(需要软件dnw)、tftp(需要软件tftpd32)将windows下的文件下载到单板。
前提是单板的bootloader支持USB串口下载或tftp服务(网线下载)。
3.当bootloader和Linux服务器支持NFS服务时,可以在bootloader界面直接使用NFS命令从Linux服务器将文件下载到单板,这样就不需要将文件从Linux服务器再下载到Windows中。
4.感觉这样下载太麻烦,还可以使用NFS服务在Linux服务器上设置网络文件共享目录,然后使用SecureCRT登录单板,进入单板的文件系统,使用mount来挂载目录(个人建议这种方法)。
NFS除了下载和挂载目录这2个功能外,还可以使用NFS作为根文件系统来启动单板。若Linux服务器不支持NFS,可以自己安装。
在Linux服务器上编译需要交叉编译/链接器。若自己制作交叉编译工具链,需要gcc编译器、lib库(选择Glibc)、辅助工具(可以选择crosstool、binutils)。
1.4安装Linux系统和配置开发环境
我们在学习Linux时,若只有一台windows系统的电脑,可以安装虚拟机(建议选择VMware),在虚拟机上安装Linux系统。
在虚拟机上安装Linux系统,对电脑的硬件有一定的要求:CPU是intel i5及以上;内存4G;固态硬盘;预留20G的硬盘空间存储数据。
在虚拟机上常用的Linux系统有Ubuntu、CentOS,我个人选择的是CentOS6.6。
在VMware下,选择”CentOS”,点击”开启此虚拟机”;等待一段时间后,就可以登录用户名和密码,Linux系统支持多个用户,其中有一个用户是root,即超级用户;若要关闭”CentOS”,则在CentOS内选择”系统”->”关机”,千万不要直接在VMware上直接叉掉CentOS6.6的窗口或者右击”CentOS6.6”->”电源”->”关闭客户机”,这样可能会破坏CentOS6.6的文件系统,相当于笔记本中长按5秒电源键强制关机的操作。
在CentOS中,登录后还可以注销当前用户,再登录另一个用户,而不必重新关机、开机。
VMware还支持虚拟机挂机的操作,右击”CentOS6.6”->”电源”->”挂起客户机”,这样就冻结了虚拟机CentOS6.6的当前状态,再点击”继续运行此虚拟机”,就恢复了虚拟机的状态。但是需要注意的是虚拟机恢复后,其时间也是恢复之前的状态,因此会不准确;重启后就会重新校准。
CentOS6.6安装完后,还需要设置IP,让其和主机建立网络连接,使用桥接模式或NAT模式都可以。我使用的是NAT模式,参考博客:https://blog.csdn.net/qq_37131111/article/details/54000029。
IP设置好后,以root用户登录,点击”系统”->”首选项”->”网络连接”,选择网卡,在IPV4处选择网络连接的方式,是自动模式还是手动设置静态IP模式。我选择自动DHCP模式。设置好后,左击右上角的网络图标,选择要建立网络连接的网卡,如”systerm eth0”。等待一段时间后,网络建立连接。
进入终端,使用ifconfig命令来查看网卡eth0的IP地址,再使用ping www.baidu.com,查看网络是否连通。
由于只有一台服务器,不可能每个人都来操作这台服务器,因此还需要安装SecureCRT进行远程登录。安装结束后,点击”File”->”Quick Connect”,在Hostname处填写Linux服务器中网卡的IP,在Uername处填写用户名,连接后还需要填写用户密码。
右击建立的会话,选择”Session Options”,在其中设置字体显示颜 {MOD}、缓冲行数、字体大小、编码方式UTF8等,如下所示。
最后是安装FTP工具,我选择的是SecureFX,中文乱码问题可以参考:https://jingyan.baidu.com/article/02027811624d941bcd9ce56b.html。