|
|
51CTO旗下网站
|
|
挪动端

【理论】怎样定制嵌入式通博8888官网刊行版

廉价的物联网板的遍及意味着它不只会控制使用顺序,还会控制整个软件平台。 那么,怎样构建一个针对特定用处的穿插编译使用顺序的自界说刊行版呢? 正如 Michael J. Hammel 在这里表明的那样,它并不像你想象的那么难。

作者:Michael J.hammel泉源:通博8888官网中国|2018-02-09 10:20

定制嵌入式通博8888官网刊行版

廉价的物联网板的遍及意味着它不只会控制使用顺序,还会控制整个软件平台。 那么,怎样构建一个针对特定用处的穿插编译使用顺序的自界说刊行版呢? 正如 Michael J. Hammel 在这里表明的那样,它并不像你想象的那么难。

为什么要定制?

曩昔,很多嵌入式项目都运用现成的刊行版,然后出于种种缘由,再将它们剥离到只剩下根本的必须的工具。起首,移除不需求的包以增加占用的存储空间。在启动时,嵌入式零碎普通不需求少量的存储空间以及可用存储空间。在嵌入式零碎运转时,能够从非易失性内存中拷贝少量的操纵零碎文件到内存中。第二,移除用不到的包可以低落能够的打击面。假如你不需求它们就没有须要把这些能够有破绽的包挂在下面。最初,移除用不到包可以低落刊行版办理的开支。假如在包之间有依赖干系,意味着任何一个包恳求从下游更新,那么它们都必需坚持同步。那样能够就会呈现验证噩梦。

但是,从一个现有的刊行版中去移除包并不像说的那样容易。移除一个包能够会冲破与别的包坚持的种种依赖干系,以及能够在下游的刊行版办理中改动依赖。别的,由于一些包原生集成在引导或许运转时历程中,它们并不克不及随便地复杂地移除。一切这些都是项目之外的平台的办理,而且有能够会招致不测的开辟耽误。

一个盛行的选择是运用下游刊行版供给商提供的构建东西去构建一个定制的刊行版。无论是 Gentoo 照旧 Debian 都提供这种自下而上的构建方法。这些构建东西中最为盛行的能够是 Debian 的 debootstrap 适用顺序。它取出预构建的中心组件并容许用户去精选出它们感兴味的包来构建用户本人的平台。但是,debootstrap 最后仅在 x86 平台上可用,固然,如今有了 ARM(也有能够会有别的的平台)选项。debootstrap 和 Gentoo 的 catalyst 依然需求从当地项目中将依赖办理移除。

一些人以为让他人去办理平台软件(像 Android 一样)要比本人亲身办理容易的多。但是,那些刊行版都是多用处的,当你在一个轻量级的、资源无限的物联网设置装备摆设上运用它时,你能够会再三思索从你手中被拿走的任何资源。

零碎引导的基石

一个定制的 通博8888官网 刊行版要求很多软件组件。此中第一个便是东西链toolchain。东西链是用于编译软件的一套东西集。包罗(但不限于)一个编译器、链接器、二进制操纵东西以及规范的 C 库。东西链是为一个特定的目的硬件设置装备摆设专门构建的。假如一个构建在 x86 零碎上的东西链想要用于树莓派,那么这个东西链就被称为穿插编译东西链。当在内存和存储都非常无限的小型嵌入式设置装备摆设上任务时,最好是运用一个穿插编译东西链。需求留意的是,即使是运用像 JavaScript 如许的需求运转在特定平台的剧本言语为特定用处编写的使用顺序,也需求运用穿插编译东西链编译。

图 1. 编译依赖和引导次序

图 1. 编译依赖和引导次序

穿插编译东西链用于为目的硬件构建软件组件。需求的第一个组件是引导加载顺序bootloader。当盘算机主板加电之后,处置器(能够有差别,取决于设计)实验去跳转到一个特定的内存地位去开端运转软件。谁人内存地位便是保管引导加载顺序的中央。硬件能够有内置的引导加载顺序,它能够间接从它的存储地位或许能够在它运转前起首拷贝到内存中。也能够会有多个引导加载顺序。比方,第一阶段的引导加载顺序能够位于硬件的 NAND 或许 NOR 闪存中。它独一的功用是设置硬件以便于实行第二阶段的引导加载顺序——比方,存储在 SD 卡中的可以被加载并运转的引导加载顺序。

引导加载顺序可以从硬件中获得充足的信息,将 通博8888官网 加载到内存中并跳转到准确的地位,将控制权无效地移交到 通博8888官网。通博8888官网 是一个操纵零碎。这意味着,在这种设计中,它除了监控硬件和向下层软件(也便是使用顺序)提供效劳外,它实践上什么都不做。通博8888官网 内核 中通常是林林总总的固件块。那些预编译的软件工具,通常包括硬件平台运用的设置装备摆设的公用 IP(知识资产)。当构建一个定制刊行版时,在开端编译内核之前,它能够会要求取得一些 通博8888官网 内核源代码树没有提供的必须的固件块。

使用顺序保管在根文件零碎中,这个根文件零碎是经过编译构建的,它聚集了种种软件库、东西、剧本以及设置装备摆设文件。总的来说,它们都提供种种效劳,比方,网络设置装备摆设和 USB 设置装备摆设挂载,这些都是将要运转的项目使用顺序所需求的。

总的来说,一个完好的零碎构建要求下列的组件:

  1. 一个穿插编译东西链
  2. 一个或多个引导加载顺序
  3. 通博8888官网 内核和相干的固件块
  4. 一个包括库、东西以及适用顺序的根文件零碎
  5. 定制的使用顺序

运用得当的东西开端构建

穿插编译东西链的组件可以手工构建,但这是一个很庞大的进程。侥幸的是,现有的东西可以很容易地完成这一进程。构建穿插编译东西链的最好东西能够是 Crosstool-NG,这个东西运用了与 通博8888官网 内核相反的 kconfig 菜单零碎来构建东西链的每个细节和方面。运用这个东西的要害是,为目的平台找到准确的设置装备摆设项。设置装备摆设项通常包括下列内容:

  1. 目的架构,比方,是 ARM 照旧 x86。
  2. 字节次序:小端字节次序(普通状况下,Intel 接纳这种次序)照旧大端字节次序(普通状况下,ARM 或许别的的平台接纳这种次序)。
  3. 编译器已知的 CPU 范例,比方,GCC 可以运用 -mcpu--with-cpu
  4. 支持的浮点范例,假如有的话,比方,GCC 可以运用 -mfpu--with-fpu
  5. 二进制适用东西binutils、C 库以及 C 编译器的特定版本信息。

图 2. Crosstool-NG 设置装备摆设菜单

图 2. Crosstool-NG 设置装备摆设菜单

前四个普通状况下可以从处置器制造商的文档中取得。关于较新的处置器,它们能够不容易找到,但是,像树莓派或许 BeagleBoards(以及它们的子女和分支),你可以在像 嵌入式 通博8888官网 Wiki 如许的中央找到相干信息。

二进制适用东西、C 库、以及 C 编译器的版本,将与任何第三方提供的别的东西链离开。起首,它们中的每一个都有多个提供者。Linaro 为最新的处置器范例提供了开始进的版本,同时努力于将该支持兼并到像 GNU C 库如许的下游项目中。虽然你可以运用种种提供者的东西,你能够仍然想去运用现成的 GNU 东西链或许相反的 Linaro 版本。

在 Crosstool-NG 中的别的的紧张选择是 通博8888官网 内核的版本。这个选择将失掉用于种种东西链组件的头文件headers,但是它没有须要肯定与你在目的硬件大将要引导的 通博8888官网 内核相反。选择一个不比目的硬件的内核更新的 通博8888官网 内核是很紧张的。假如能够的话,只管即便选择一个比目的硬件运用的内核更老的长周期支持(LTS)的内核。

关于大少数不熟习构建定制刊行版的开辟者来说,东西链的构建是最为庞大的进程。侥幸的是,大少数硬件平台的二进制东西链都可以想方法失掉。假如构建一个定制的东西链有题目,可以在线搜刮像 嵌入式 通博8888官网 Wiki 如许的中央去查找预构建东西链。

引导选项

在构建竣工具链之后,接上去的任务是引导加载顺序。引导加载顺序用于设置硬件,以便于越来越庞大的软件可以运用这些硬件。第一阶段的引导加载顺序通常由目的平台制造商提供,它通常被烧录到相似于 EEPROM 或许 NOR 闪存这类的在硬件上的存储中。第一阶段的引导加载顺序将使设置装备摆设从这里(比方,一个 SD 存储卡)开端引导。树莓派的引导加载顺序便是如许的,它样做也就没有须要再去创立一个定制引导加载顺序。

虽然云云,很多项目照旧添加了第二阶段的引导加载顺序,以便于去实行一个多样化的义务。在无需运用 通博8888官网 内核或许像 plymouth 如许的用户空间东西的状况下提供一个启动动画,便是此中一个如许的义务。一个更罕见的第二阶段引导加载顺序的义务是去提供基于网络的引导或许使衔接到 PCI 上的磁盘可用。在那种状况下,一个第三阶段的引导加载顺序,比方 GRUB,能够才是让零碎运转起来所必须的。

最紧张的是,引导加载顺序加载 通博8888官网 内核并使它开端运转。假如第一阶段引导加载顺序没有提供一个在启动时通报内核参数的机制,那么,在第二阶段的引导加载顺序中就必需要提供。

有很多的开源引导加载顺序可以运用。U-Boot 项目 通常用于像树莓派如许的 ARM 平台。CoreBoot 普通是用于像 Chromebook 如许的 x86 平台。引导加载顺序是特定于目的硬件公用的。引导加载顺序的选择总体上取决于项目标需求以及目的硬件(可以去网络上在线搜刮开源引导加载顺序的列表)。

如今到了 通博8888官网 退场的时分

引导加载顺序将加载 通博8888官网 内核到内存中,然后去运转它。通博8888官网 就像一个扩展的引导加载顺序:它停止停止硬件设置以及预备加载初级软件。内核的中心将设置和提供在使用顺序和硬件之间共享运用的内存;提供义务办理器以容许多个使用顺序同时运转;初始化没有被引导加载顺序设置装备摆设的或许是曾经设置装备摆设了但是没有完成的硬件组件;以及开启人机交互界面。内核大概不会设置装备摆设为在本身完成这些任务,但是,它可以包括一个嵌入的、轻量级的文件零碎,这类文件零碎各人熟知的有 initramfs 或许 initrd,它们可以独立于内核而创立,用于去辅佐设置硬件。

内核操纵的别的的事变是去下载二进制块(通常称为固件)到硬件设置装备摆设。固件是用特定款式预编译的工具文件,用于在引导加载顺序或许内核不克不及拜访的中央去初始化特定硬件。很多这种固件工具可以从 通博8888官网 内核源堆栈中获取,但是,另有许多别的的固件只能从特定的硬件供给商处取得。比方,常常由它们本人提供固件的设置装备摆设无数字电视调谐器或许 WiFi 网卡等。

固件可以从 initramfs 中加载,也或许是在内核从根文件零碎中启动 init 历程之后加载。但是,当你去创立一个定制的 通博8888官网 刊行版时,创立内核的进程经常便是获取种种固件的进程。

轻量级中心平台

通博8888官网 内核做的最初一件事变是实验去运转一个被称为 init 历程的公用顺序。这个公用顺序的名字能够是 init 或许 linuxrc 或许是由加载顺序通报给内核的名字。init 历程保管在一个可以被内核拜访的文件零碎中。在 initramfs 这种状况下,这个文件零碎保管在内存中(它能够是被内核本人安排到那边,也能够是被引导加载顺序安排在那边)。但是,关于运转更庞大的使用顺序,initramfs 通常并不敷完好。因而需求别的一个文件零碎,这便是众所周知的根文件零碎。

图 3. 构建 root 设置装备摆设菜单

图 3. 构建 root 设置装备摆设菜单

initramfs 文件零碎可以运用 通博8888官网 内核本身构建,但是更常用的作法是,运用一个被称为 BusyBox 的项目去创立。BusyBox 组合很多 GNU 适用顺序(比方,grep 或许 awk)到一个单个的二进制文件中,以便于减小文件零碎本身的巨细。BusyBox 通常用于去启动根文件零碎的创立进程。

但是,BusyBox 是特地轻量化设计的。它并不计划提供目的平台所需求的一切东西,乃至提供的东西也是颠末功用简化的。BusyBox 有一个“姊妹”项目叫做 Buildroot,它可以用于去失掉一个完好的根文件零碎,提供了种种库、适用顺序,以及剧本言语。像 Crosstool-NG 和 通博8888官网 内核一样,BusyBox 和 Buildroot 也都容许运用 kconfig 菜单零碎去定制设置装备摆设。更紧张的是,Buildroot 零碎主动处置依赖干系,因而,选定的适用顺序将会包管该顺序所需求的软件也会被构建并装置到 root 文件零碎。

Buildroot 可以用多种款式去天生一个根文件零碎包。但是,需求重点留意的是,这个文件零碎是被归档的。单个的适用顺序和库并不因此 Debian 或许 RPM 款式打包出来的。运用 Buildroot 将天生一个根文件零碎镜像,但是它的内容不是独自的包。即便云云,Buildroot 照旧提供了对 opkg 和 rpm 保证理器的支持的。这意味着,固然根文件零碎本身并不支持保证理,但是,装置在根文件零碎上的定制使用顺序可以停止保证理。

穿插编译和剧本化

Buildroot 的此中一个特性是可以天生一个暂时树。这个目次包括库和适用顺序,它可以被用于去穿插编译别的使用顺序。运用暂时树和穿插编译东西链,使得在主机零碎上而不是目的平台上对 Buildroot 之外的别的使用顺序编译成为能够。运用 rpm 或许 opkg 保证理软件之后,这些使用顺序可以在运转时运用保证理软件装置在目的平台的根文件零碎上。

大少数定制零碎的构定都是围绕着用剧本言语构建使用顺序的想法去构建的。假如需求在目的平台上运转剧本,在 Buildroot 上有多种可用的选择,包罗 Python、PHP、Lua 以及基于 Node.js 的 JavaScript。关于需求运用 OpenSSL 加密的使用顺序也提供支持。

接上去做什么

通博8888官网 内核和引导加载顺序的编译进程与大少数使用顺序是一样的。它们的构建零碎被设计为去构建一个公用的软件位。Crosstool-NG 和 Buildroot 是元构建metabuild。元构建是将一系列有本人构建零碎的软件聚集封装为一个构建零碎。牢靠的元构建包罗 YoctoOpenEmbedded。Buildroot 的益处是可以将更初级另外元构建停止轻松的封装,以便于将定制 通博8888官网 刊行版的构建进程主动化。如许做之后,将会翻开 Buildroot 指向到项目公用的缓存堆栈的选项。运用缓存堆栈可以减速开辟进程,而且可以在无需担忧下游堆栈变革的状况下提供构建快照。

一个完成初级构建零碎的示例是 PiBox。PiBox 便是封装了在本文中讨论的种种东西的一个元构建。它的目标是围绕一切东西去添加一个通用的 GNU Make 目的架构,以天生一个中心平台,这个平台可以构建或分发别的软件。PiBox 媒体中央和 kiosk 项目是装置在中心平台之上的使用层软件的完成,目标是用于去发生一个构建平台。Iron Man 项目 是为了家庭主动化的目标而扩展了这种使用顺序,它集成了语音办理和物联网设置装备摆设的办理。

但是,PiBox 假如没有这些中心的软件东西,它什么也做不了。而且,假如不去深化理解一个完好的定制刊行版的构建进程,那么你将无法准确运转 PiBox。并且,假如没有 PiBox 开辟团队对这个项目标临时贡献,也就没有 PiBox 项目,它完成了定制刊行版构建中的少量义务。

【编辑引荐】

  1. 八种帮你在通博8888官网上天生随秘密码的办法
  2. 通博8888官网 touch下令实例图文详解
  3. 通博8888官网终端下的多媒体使用
  4. 2018最佳通博8888官网刊行版排行榜
  5. 通博8888官网与Unix之差别在哪?
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
各人都在看
猜你喜好

读 书 +更多

超等网管员——网络设置装备摆设

本书深化过细地引见了用于构建网络的最紧张的硬件设置装备摆设——交流机、路由器、平安设置装备摆设和无线设置装备摆设,涵盖了原理、参数、分类、实用、计划、接口...

订阅51CTO邮刊

点击这里检查样刊

订阅51CTO邮刊