交叉编译概念详解以及工具链的安装

原创首发于CSDN,转载请注明出处,谢谢!https://blog.csdn.net/weixin_46959681/article/details/116591804



前言

笔者的上一篇博文 《基于3代树莓派内核编译、覆盖以及运行》 基于参考资料和学习教程视频经过三日打磨而成。在那篇博文的结尾处笔者有清晰的阐述到 树莓派内核的源码配置引导以及编译覆盖 才是重点,故而隐去了些许旁枝末节,包括 交叉编译 环节。现在笔者就以这篇博文作为补全并从现实需求的角度谈一谈我们为什么需要交叉编译,外加引用树莓派的 WiringPi库 作为演练实例。


本地编译(Local compile)

在讨论交叉编译之前,我们必须要清晰一个与之对应的概念 本 地 编 译 \color{red}本地编译 。 一般的软件开发,如 在windows、macbook等x86架构CPU环境下编译出来的程序直接触发操作系统,在当前环境中立即运行的整个环节,我们称之为本地编译。经由本地编译出来的程序特点是只能在当前目标平台运行。


交叉编译(Cross compile)

对应上文自然引出交叉编译的定义:

程序代码在一个平台上编译,但却放在另一个架构平台上运行,如在x86 CPU 的乌班图系统上编译,在Arm CPU 的树莓派上运行。两者编译、运行环境各不相同,彼此交叉(Cross)。 前者是宿主机(host),后者是目标机(target)。

|交叉编译的现实原因

  • 嵌入式平台的可用资源太少。 在已经安装了Linux操作系统的嵌入式开发板中,不论是CPU的算力、内存、硬盘等资源都极为有限,绝大部分资源都被用于自身的操作系统运行。用于本地编译、开发的资源完全不够;
  • 产品研发的成本考虑。 基于产品研发以及后期的销售使用角度考虑,必须将资源最大化利用,将所花费的成本降到最低节省开支;
  • 树莓派也需要交叉编译。 若树莓派自身的目的操作系统都没有搭建,根本说不上运行什么编译器。整个操作系统也是代码,它也需要编译;
  • 平台上不允许或者无法安装工作开发所需要的编译软件,如C51,stm32。 平台自身的运行至少需要 操作系统核心和启动引导代码ootloader。

对树莓派交叉编译工具链的安装

|单片机

在安装树莓派的交叉编译工具链之前,笔者先引出一个类似但容易忽略的操作 —— 单片机程序的开发。在开发集成环境 k e i l keil keil 中我们根据目标芯片选取不同的开发类型,这一步骤实际上就是在选择不同的交叉编译开发工具。之所以说一段代码的可移植性很强,实际上是一段代码经过不同的编译工具编译之后可以运行在不同的平台上,不需要经过太多的修改

|GitHub里下载树莓派源代码

树莓派的github主页:https://github.com/raspberrypi,里面包含了linux源码、交叉编译工具链等内容请自行下载并解压 unzip 。笔者因之前在对树莓派进行内核编译,故而全部下载了。笔者的电脑是x86 CPU 64位的操作系统,故而选择最后一个工具目录。

编译工具软连接

编译工具硬链接 编 译 工 具 软 连 接 . j p e g 编译工具软连接.jpeg .jpeg

链 接 方 式 : 链接方式: :

  • 对于软链接和硬链接,笔者早在4月2日就发布过一篇博文 指令 ln -s 创建软链接、硬链接,里面对软链接和硬连接做出了详细的分析,感兴趣的朋友可以点击阅读。

|交叉编译工具链的安装

交叉编译工具链的安装一共有两种方式:临时有效、永久有效。

  • 临时有效 —— 仅在当前窗口有效。 输入 echo $PATH 显示当前的环境变量,再在交叉编译工具所在文件夹下输入 pwd 获取路径,截取 game 之前的字符再以 export 进行临时配置(回车);
    在这里插入图片描述

  • 永久有效 —— . b a s h r c .bashrc .bashrc Linux终端的工作目录底下有个隐藏文件 . b a s h r c .bashrc .bashrc,该文件专门用来配置命令终端。直接在终端输入指令 vi /home/xxx/.bashrc 进入配置文件,将之前敲过的命令拷贝到最后一行。退出后输入 source /home/xxx/.bashrc 进行更新生效。以后系统启动每次运行终端,系统都会运行该指令。
    .bashrc


带 wiringPi库 的交叉编译

原来笔者跳着教学视频写博客已经把这方面来的工作给提前做了……同上文中所述,请点击那篇 软链接与硬链接 的博文。(中间居然隔了一个月,虽然说生活上有变动,但我个人确实有点疏懒了……写博客眼睛也好酸……)


参考资料


更新时间记录

  • 文章基本框架搭好。 「2021.5.10 11:56」
  • “前言”、“本地编译”、“交叉编译”三节完成。 「2021.5.11 11:16」
  • “交叉编译工具链的安装” 一节完成。 「2021.5.12 13:49」

P.S.1 这篇博文在结构上破碎了些。对于重心在交叉编译的读者,阅读前四节即可。 「2021.5.12 21:04」

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值