树莓派Linux操作系统移植
上QQ阅读APP看书,第一时间看更新

1.2.1 编译工具

由于树莓派4B的处理器采用的是Cortex-A架构,使用Arm指令集,与PC的x86处理器使用的指令集完全不同。因此PC的编译工具不能直接用于开发树莓派的软件,需要另外安装一套针对Arm的编译工具。在PC上安装的这组工具被称为“交叉编译工具链”,或简称“交叉编译器”。Arm交叉编译器可以在PC上用源码编译生成,也可以通过软件仓库直接安装二进制程序。源码编译安装过程比较烦琐,如无特殊要求,可以通过包管理器安装二进制程序。Debian或Ubuntu系统可以通过下面的命令安装交叉编译工具:

# apt-get  install  g++-arm-linux-gnueabihf

在命令行操作中,提示符“#”表示超级用户权限,“$”表示普通用户权限。在本书中,PC端的命令用这两个不同的提示符来严格区分这两类用户。获取超级用户的权限可以通过sudo命令,也可以用su命令直接切换到超级用户。在PC上,各人有自己的使用习惯,本书对此也不再区分,仅以提示符“#”表示。而在树莓派个人应用系统上,为了提高效率,在没有特别要求的情况下,一般都以超级用户的身份操作。

依照依赖关系,包管理器会安装所有Arm架构的g++的基础包,包括Arm版本的binutils和glibc。为了简化以后的命令操作,安装后,建议到安装路径下(一般是/usr/bin)将所有带有arm-linux-gnueabihf-前缀的命令进行arm-linux-前缀的链接,命令操作如下:

# for f   in $(ls arm-linux-gnueabihf-*);       \
       do  ln -s  $f $(echo   $f|sed  "s/gnueabihf-//");  \
       done

之后在交叉编译时不需要用arm-linux-gnueabihf-gcc这么长的命令,只需输入arm-linuxgcc即可。

如果按64位Arm指令集Armv8-A编译,则需要安装aarch64-linux-gnu编译工具链:

# apt-get  install  g++-aarch64-linux-gnu

按类似的方法,进行一组aarch64-linux-前缀的链接。

本书以树莓派4B为研究对象。由于树莓派4B的处理器同时支持32位和64位指令集,为了更大限度地发挥系统性能,采用64位指令集,交叉编译器也使用aarch64-linux-前缀。

理论上说,也可以将编译器直接安装在树莓派系统上。构建针对目标系统的编译环境将在第5章介绍。但由于树莓派资源有限,性能也不及PC,不适宜大批量的软件编译,而且最初阶段的移植也必须在PC上编译。对于有明确应用背景的嵌入式系统来说,在目标系统上安装开发环境的意义也不大。