嵌入式交叉编译环境搭建
一. 交叉编译的概念
交叉编译(cross-compilation)是指在某个主机平台上(比如PC上)用交叉编译器编译出可在其他平台上(比如ARM上)运行的代码的过程。
交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如 C代码)编译(compile)成计算机可以识别和执行的二进制代码。
比如,我们在 Windows 平台上,可使用 Visual C++开发环境,编写程序并编译成可执行程序。这种方式下,我们使用 PC 平台上的 Windows 工具开发针对 Windows 本身的可执行程序,这种编译过程称为 native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,则不能直接编译。原因有俩:一、运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的 ARM 平台,其一般的静态存储空间大概是 16 到 32 MB,而 CPU 的主频大概在 100MHz 到 500MHz 之间。这种情况下,在 ARM 平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的 CPU 运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在 CPU 能力很强、存储空间足够的主机平台上(比如 PC 上)编译出针对其他平台的可执行程序。二、宿主机与目标机的运行环境并不相同,所以必须要提供不同的类库,使得宿主机上开发的代码能在目标机上运行。
二. 安装Linux虚拟机步骤
① 安装VirtualBox,VirtualBox-5. 1.26-117224-Win.exe,双击安装包,设置待安装路径,一直点击下一步即可,过程中可能提示安装几个设备软件,同意安装即可。
② 新建虚拟电脑,下载选择镜像,ubuntu-14.04.5-desktop-i386.iso,点击新建,填写虚拟机名称,版本32/64位要和下载的系统版本32/64位保持一致,这儿我选择的32位,与下载镜像保持一致即可;设置虚拟机内存大小,1G或者2G,甚至更大;
接下来三个步骤按照默认选项下一步即可;
修改虚拟电脑的位置,默认是在C盘下,不建议安装在C盘,一般都不建议安装在系统盘下,修改安装位置,修改虚拟电脑的硬盘大小,建议40G以上。
接下来选择下载好的系统镜像,选择好之后,点击启动即可;
选择安装语言,选择之后点击安装;
选择默认分区即可;选择时区,上海或者北京;键盘布局默认选择;
接下来填写用户名和密码,建议名称以短为主,不然命令窗口上面全是你的名字啦;
接下来等待安装完成;看到下面这个提示Installation Complate,表示安装成功。
为了方便在Windows和你的虚拟电脑之间拷贝文件、共享粘贴板,需要做如下设置,共享粘贴板双向,拖放双向,这个如果要试验的话需要先重启下你的虚拟机,不然暂时是不会生效的;
安装Ubuntu的话,可能需要重新安装vim,自带的那个可能用不了,安装方式:sudo apt-get install vim
③ 主机和虚拟机共享文件
点击设备-共享文件夹,添加共享文件夹,虚拟机下df可查看挂载的文件夹(即主机与虚拟机共享的文件)。
④ 安装QT运行环境与软件
1)安装QT4.8.6-sdk.tar.gz,解压到/opt下,命令如下,tar –xf QT4.8.6-sdk.tar.gz –C /opt
这是QT软件编程所需的一些类库文件;
2)安装qt-creator-linux-x86-opensource-2.8.0.run,命令如下,sudo ./ qt-creator-linux-x86-opensource-2.8.0.run
这是QT开发的工具,和在windows上跑的软件是一个性质的。可在/opt下看到安装好的软件。
3)安装arm-cortex_a8-linux-gnueabi-4.7.3,解压到指定目录下,这是需要使用到的交叉编译器。sudo tar –xf arm-cortex_a8-linux-gnueabi-4.7.3.tar.bz2 –C /usr/local/arm
这个文件夹是自己新建的,新建文件夹命令mkdir arm
4)tslib.tar.gz,把此文件解压缩到arm交叉编译器的同目录下,否则会出问题,cannot find –lts,可能会报这个错误。就是上图的tslib文件夹。
5)配置QT开发工具,即配置qtcreator,先打开qtcreator,命令:/opt/qtcreator-2.8.0/bin/qtcreator& 打开qtcreator,点击Tools-Options,打开如下界面,选择Qt Versions,选择刚才安装的QT类库;选择编译器,打开Compliers,选择路径等信息;添加Kits(构建套件),用于项目生成的环境,选择编译环境,选择QT类库。注意:打开时候选择为普通用户命令,不能为root,否则用root的是建立在root用户之上的。
6)安装nfs, 用于虚拟机与单板之间的文件共享,
安装nfs:sudo apt-get install nfs-kernel-server
建立nfs共享文件夹:sudo mkdir /home/username/nfs
配置nfs需要挂载的nfs目录,在配置文件中进行配置,配置完成后需要重启下nfs-kernel-server。
三、虚拟机与单板的共享文件
① 保证虚拟机与单板在同一个网段下,可以进行网络通信,一般配置虚拟机为桥接网卡。
② 登录单板,一般就是telnet 单板的IP,输入用户名密码;
③ Linux nfs配置,查看配置文件vi /etc/exports,最后一行添加需要共享的文件,即需要挂载的虚拟机的nfs目录,图中加了三个,/nfs *(rw,sync),/nfs为本机配置的目录,*任意IP地址可访问,rw读写权限,sync同步。修改完这些设置之后,应重启下nfs服务,命令: /etc/init.d/nfs-kernel-server restart
④ 使用nfs挂载虚拟机的nfs目录,IP为你虚拟机的IP,/mnt/shared/是你单板的共享文件夹,
挂载命令:mount -t nfs 192.168.0.240:/nfs /mnt/shared/ -o nolock
这个每次只能挂载一个nfs文件夹,多个会报错误,挂载不上。
取消挂载:umont /mnt/shared/
⑤ df命令查看是否挂载成功,成功如下图所示,IP为你虚拟机的IP,
以上完成交叉编译环境基本上就结束啦,之后就可以愉快的搬砖啦。