3.2 软件架构 3.2.1 总体构架浅析 在前文中介绍的利用 Arduino IDE 给 Intel Galileo 编程完全只能看到 Galileo 软件系统的冰山一角。Intel Galileo 并不像其他单片机开发板那样,它并不是简单的运行用户所编写的程序那么简单。 它的软件构架环境基本与一台标准PC一致:含有 UEFI(与传统的 BIOS 等价)、Grub 引导、运行 Linux 操作系统。而用户编写的 Arduino Sketch 程序,在实现上只是运行在 Linux 系统中的一个 App 而已: 图:Intel Galileo 的简易软件构架,图片来源[12] 在 Intel Gaileo 主板的 SPI Flash 芯片内,保存了开机需要的 UEFI 初始化固件,以及一个微型的 Linux 操作系统。在编写 Arduino 程序时,Arduino IDE 将编写好的 Arduino 程序编译成为了一个标准的 Linux ELF 可执行文件,并下载进入 Galileo 上运行的 Linux 系统中执行。 通过直接基于 Galileo 上 Linux 系统进行开发,我们可以发挥出 Galileo 更大的潜力。并且借助 Intel 提供的各种开发资料和开源的 UEFI 实现,我们也可以让 Galileo 运行更多的操作系统,比如 Windows。 在 Intel Quark SoC 的介绍文档[11]中,Intel 给出了目前基于 Quark SoC 的软件栈的支持情况: 图:Intel Quark SoC X1000 Software Stack, 图片来源[11] 手上的 Intel Galileo 并不运行 Wind River Linux 或者 Vxwork。它采用了基于 Yocto 项目的定制版本的 Linux 系统,并分为运行在 SPI Flash 上的微型系统以及运行在 SD 卡的完整版本系统: 图:用于 Intel Galileo 的软件平台构架 由于 Intel Gaileo 主板上的 SPI Flash 8Mbyte 空间限制,Intel 将一个微型版本的 Linux 系统集成在该芯片当中。在 Galileo 启动后将默认启动该版本的 Linux,它带有 Galileo 主板上基本的外设驱动,并保证 Arduino Sketch 能正常运作。但如果用户需要更多功能,就需要采用外接 SD 卡,使用 Intel 提供的完整版本 Linux。该 Linux 还额外包括了 Wifi 网卡驱动,以及 OpenCV 等库: 在设计上,通过 Arduino IDE 编写的 Sketch 程序可以永久保存在 SPI Flash 芯片内或者 SD 卡中。当然,如果要保存在主板上的 SPI Flash 芯片内,编写的 Sketch 程序的大小就要有限制。 3.2.2 Intel Galileo 启动过程简介 在通电后,Intel Galileo 将会首先执行位于 SPI Flash 上的 UEFI 初始化程序,并逐渐进入 Linux 系统随后开始运行用户的 Sketch 程序。其大致启动过程如下图所示: 图:Intel Galileo 的启动过程 从上图可以看出,Galileo 的启动过程与传统 PC 一致。除了支持从 SD 卡引导,Intel Galileo 也同样支持引导 U 盘、从网络(可能需要修改 UEFI)等方式的启动。不过与 PC 不同的是 Galileo 并不是基于主引导记录(MBR)来判断是否需要进行引导的,毕竟 Galileo 并不含有传统的老式 BIOS,它的引导是通过 Grub 进行的,因此需要引导的介质需要有可以被 Galileo 自带 Grub 识别的文件系统以及对应的 Grub 引导配置。 图:从调试串口看到的 Intel Galileo 启动输出信息 此外,在 UEFI 阶段,用户也可以要求运行其他的EFI程序,比如 EFI Shell。这使得引导过程更加的灵活。对于目前 Intel 已经提供的软件使用来说,引导过程最终都将启动 Linux 操作系统。并在 Linux 启动完毕后,从目录/sketch 下加载 sketch.elf 程序(如果有),运行用户保存在 Arduino 程序。 |