Linux 之八 完整嵌入式 Linux 环境介绍及搭建过程详解 |
您所在的位置:网站首页 › 嵌入式linux和linux区别 › Linux 之八 完整嵌入式 Linux 环境介绍及搭建过程详解 |
最近,有个需求需要验证一下嵌入式 LINUX 系统在 STM32上使用效果,正好手里有一块前几年的 STM32F769I-EVAL 的评估板,如下图所示的这个: 在开始实际的移植编译工作之前,有必要先来说一下我们要搭建的完整的 Linux 运行环境是啥样的,以及包含那些部分。废话不多说,直接上图: 嵌入式环境与我们熟悉的 PC 环境还是有很大区别的。尤其是对于部分芯片,它没有 MMU,也就不能使用虚拟内存相关的所有技术。也就意味着,嵌入式中的地址都是实际的物理地址。 其次,嵌入式环境的另一个大特点就是资源非常紧张,这就导致了我们可能需要将最终的多部分的可执行程序放到不同的地方。举个例子,STM32 的 MCU 中,往往不能存放 Linux Kernel,我们需要将 Linux Kernel 放到一些外部存储器中。 对于 ARM 平台,ARM 给出了两个概念:加载域 和 执行域,加载域对应加载地址,执行域对应了一个执行地址。关于 ARM 的分散加载机制,可以参见博文 ARM 之十三 armlink(Keil) 分散加载机制详解 及 分散加载文件的编写 即可。 前面介绍了嵌入式系统的组成部分,接下来看看整个系统如何工作起来。一般 SoC 内部会有个固化的引导程序,这个固化的 BootLoader 我在博文 STM32 之十四 System Memory、Bootloader 中有过详细的介绍。这段程序的会初始化部分外设以与外部通信,具体可以参考官方手册。 构建一整套嵌入式 Linux 系统是一件很庞大的事情,需要做很多工作。因此,诞生了一些嵌入式系统构建工具,以帮助开发者简化嵌入式系统的构建过程,减少工作量。常用的嵌入式系统构建工具有如下几个: Buildroot: Linux 平台上的一个用于构建嵌入式 Linux 系统的框架。整个 Buildroot 是由 Makefile 脚本和 Kconfig 配置文件构成的。使用它可以和编译 Linux 内核一样,通过使用 Kbuild/Kconfig 系统编译出一个完整的可以直接烧写到机器上运行的 Linux 系统软件(包含boot、kernel、rootfs 以及 rootfs 中的各种库和应用程序、交叉编译工具链)。 官方网站:https://buildroot.org/,提供了非常详细的文档。Yocto: Yocto Project 推出的一个开源的协作软件,提供模板、工具和方法帮你创建定制的 Linux 系统和嵌入式产品,而无需关心硬件体系。适合嵌入式Linux开发人员使用,极大地简化你的开发过程。Yocto 推荐使用 OpenEmbedded 构建系统。 Yocto Project 是 Linux 基金会的一个协作开源项目,其目标是生成工具和流程,以便为嵌入式和物联网软件创建独立于嵌入式硬件底层架构的 Linux 发行版。官方网站:https://www.yoctoproject.org/,提供了非常详细的文档。OpenEmbedded: 一个开源的嵌入式 Linux 系统构建环境,它允许开发人员为嵌入式系统创建一个完整的 Linux 发行版。由OpenEmbedded 社区开发,该社区于 2003 年正式成立。OpenEmbedded 的构建系统基于 BitBake 构建工具,其操作行为与 Gentoo Linux ebuilds 相似。 官方网站:http://www.openembedded.org/wiki/Main_Page,提供了非常详细的文档。PTXdist: Pengutronix 在 2001 年开发的一个构建系统,用于生成固件镜像。采用了 Linux 内核中的配置系统 Kconfig 来选择和配置每个包。 官方网站:https://www.ptxdist.org/,提供了非常详细的文档。当然,我们也可以选择自己动手,根据上面嵌入式 Linux 环境,一点一点来构建其中的各个部分。后续,我就以手里的 STM32F769I-EVAL 的评估板为载体,尽量不使用已有的嵌入式构建工具,来一步一步搭建这个嵌入式 Linux 环境。 搭建过程工欲善其事,必先利其器。第一步就是搭建 LINUX 系统开发环境,为此特地在笔记本上安装了 Ubuntu,具体使用的桌面开发环境是 Ubuntu 20.04.3 LTS。至于为啥选择 Linux 系统,而不是直接使用 Windows 系统想必大家都清楚为啥。 接下来准备好一个目录,后续所有的操作均在此目录中进行。我的操作是新建 /home/zcshou/STM32LINUX 这个目录,用于存放整个要为 STM32 嵌入式 Linux 环境编译的源代码,后续都在这个目录中进行。如下图所示: |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |