RobotPeak 是上海的一家硬件创业团队,团队致力于民用机器人平台系统、机器人操做系统(ROS)以及相关设备的设计研发,并尝试将突飞猛进的机器人技术融入人们的平常生活与娱乐当中。同时,RobotPeak 将尽力为机器人技术在开源硬件、开源软件社区的普及作出贡献。陈士凯是 RobotPeak 联合创始人,他给咱们带来了最新的 x86 构架的 Arduino 开发板 Intel Galileo 的深度使用报告。php
在今年(2013)罗马举办的首届欧洲 Make Faire 上,Intel 向对外发布了采用 x86 构架的 Arduino 开发板:Intel Galileo。这无疑是一个开源硬件领域的重磅消息。做为 CPU 领域的巨头 Intel,为开源硬件 /Maker 领域这个从前相对小众的圈子推出专门的硬件,无疑说明对开源硬件领域发展的重视程度。同时,Intel 也做为本届欧洲 Maker Faire 的主要赞助商。node
图:Intel Galileo 开发板,图片来自 intel.compython
在 PC 行业,Intel x86 构架的强大性能一直被行业称道,天然此次推出的 Arduino 开发板,也给业界带来了无限的遐想。我相信不少人都会略带调侃问:这个开发板能不能运行 Windows 这样的问题。同时,相信也有很多人会关心 Intel Galileo 的功耗问题,以及开发使用上是否具备难度。linux
做为曾在 Intel 工做过的做者,对老东家可以推出针对开源硬件市场的产品感到欣慰。经过朋友,我也有幸在较早时间拿到了一块 Intel Galileo。通过了一段时间的使用和体验,这里我就将咱们对 Intel Galileo 的一些使用体验向你们分享。而且做为开源硬件和机器人开发的从业人员,聊聊 Intel Galileo 到底能够给咱们带来哪些想象空间?git
这里也先针对那个调侃问题作个回应:是的,经过软件的调整,Intel Galileo 的确能够运行 Windows。github
图:使用 RoboPeak 微型 USB 显示屏,给 Galileo 增长显示屏变成标准 PC算法
2.1 开箱体验shell
因为 Intel Galileo 对外批量出货还有一段时间,因此这里先给你们介绍开箱的过程。Intel 在外包装设计上也下了很多功夫,也有一些小惊喜,做为一向的标志性色彩,Intel Galileo 的小盒子也用了与 Intel Logo 同样的蓝色,封面上的那个老人头像我想应该就是 Galileo 本人吧。编程
打开包装后,就能看到 Galileo 电路板了,还有一些说明书等。盒子的内部是表示 Intel 芯片线路的装饰画。服务器
图:简介的说明文档
图:Intel Galileo 电路板用防静电袋包装着
在电路板旁边印着 Intel 为 Galileo 设计的宣传语:What will you make? 在取出电路板的时候,忽然从盒子里发出了 Intel 那使人熟悉的“灯,等灯等灯!”的音乐,这着实使人大吃一惊。这样一个看似细小的设计,却在客户打开包装是带来了巨大的惊喜,真的很用心!而这种感觉可能也只有亲身体验才能感觉到。
将包装盒第二层拿开,我在这层纸板的背后发现了发出音乐的玄机:
图:包装盒背面暗藏的光敏发音盒
不过这个发音盒只是个音乐贺卡用的音乐 IC,没啥可 hack 的部分,否则相信它会惨遭全球人民的恶搞修改命运。在打开第二层后,又发现一个小惊喜:Intel 工做服的人偶:
盒子中剩余的部分是电源适配器以及兼容不一样国家地区插座规格的插头以及 PCB 的固定柱子以及 micro-usb 线。
就此全部东西都取出了,咱们能够感觉到 Intel 对这款产品的重视程度。固然为实现这些细节也是要考虑成本的,而最终为此买单的天然就是消费者。不过从目前 Mouser 网站的预订网页看,Intel Galileo 的售价为:$69,考虑到性能和 BOM 成本都较低的 Arduino Yún 一样在 Mouser 上售价为 $76,Intel Galileo 的售价绝对算是厚道了。
2.2 基本使用方式
在进一步介绍 Intel Galileo 构造和原理前,先介绍下做为一块 Arduino 开发板的基本使用过程。因为采用了 x86 构架,所以 Arduino 官方 IDE 尚不能直接用于 Intel Galileo,而且为基于传统 AVR 芯片设计的 Arduino 程序和库也可能须要作出修改。为此,Intel 提供了一个修改版本的 Arduino IDE,能够从 Inte l的 maker 官网 maker.intel.com 下载到[1]。
图:Intel 提供的配套开发工具、驱动等
对于具体的驱动安装和使用,Intel 为用户提供了 Getting Started Guide 文档[2],这里我也不在重复了。
图:Intel 编写的快速上手手册
这里须要提醒你们的是,使用时须要先给 Intel Galileo 使用电源适配器供电,方可再经过 USB 线链接至电脑。这一点很是重要,由于Galileo 有专门的 DCDC 电源控制,而且启动过程瞬间电流需求较大。若是只链接 USB 企图给电路板供电,则可能会损坏电路板或者电脑。
图:Intel Galileo 须要使用特殊的驱动链接 PC
在后文我会提到,Intel Galileo 内部运行着 Linux,与 PC 链接时,它须要采用 Intel 专门提供的驱动描述来保证 PC 将它识别为串口设备(仅用于 Windows,MacOS 和 Linux 请参考文档)。
图:被 PC 识别为串口的 Galileo USB 接口
启动 Arduino IDE,此时咱们就能够把 Intel Galileo 做为一个标准的 Arduino 开发板使用了:
图:与其余 Arduino 开发板同样,Intel Galileo 也能够在 Arduino IDE 中进行开发
2.2.1 解决 IDE 闪退问题
很多已经拿到 Intel Galileo 的朋友都会反映 Intel 提供的 Arduino IDE 会出现“闪退”问题,就是在启动 IDE 出现版本画面后,程序会默默退出。其实这并非 Intel 的问题,而是新版本 Arduino IDE 的 bug。因为 Intel 定制的 Arduino IDE 采用了还未发布的 1.5.3 版本 IDE,若是当前 OS 的区域设置不是英文(En/US)的话,IDE 就会本身退出。为此,Arduino 开发团队和 Intel 也已经意识到了这个问题,也将在 1.5.4 修复[4]。
目前为了解决这个问题,最直接的办法就是修改操做系统的语言设置,改成英文便可。不过这样须要重启系统,而且可能会对采用中文的应用程序形成影响。这里我给你们分享一个不用修改系统语言设置的办法,使用一个名为 Locale Emulator 的开源软件[3]:
图:Locale Emulator 界面
该软件能够为特定程序虚拟出特定的语言区域配置,而不用修改整个操做系统。使用这个办法,就能够直接使用 Intel Galileo 的 Arduino IDE。
图:使用 Locale Emulator 启动 Arduino IDE,解决闪退问题
2.3 发热与功耗
功耗一直是困扰 x86 平台在移动嵌入式领域应用的重要问题,我对 Intel Galileo 作了几个简单的测试。相比其余 x86 平台,Intel Galileo 功耗的确算小,可是与 ARM/MIPS 等同主频等级的平台相比,就显得大不少。
在 CPU 几乎空闲的工做状态下,测得的功耗水平是 5V 0.5A,也就是 2.5W 的耗电量。而在启动过程当中,会出现 1A 以上的峰值电流。
图:Intel Galileo 运行的功耗状况
不过考虑到目前 Galileo 中运行的 Linux Kernel 并无开启动态 CPU 频率控制功能,所以即便在满负荷下,CPU 核心的功耗水平应该相比空闲状态差距不大,所以启动过程当中的峰值电流应该是在开启外设产生的瞬间电流形成的。在启动后的工做当中,即便 CPU 满负荷运做,总体的功耗应该会维持在 0.5A 附近。
这样的功耗水平对于使用电池供电就显得有些压力了,若是使用 2000mAh 3.7V 的锂电池供电,Galileo 理论最长的待机时间是 2.96 小时。
从发热角度上看,Intel Galileo 采用的 Quark 处理器芯片的 max TDP 是 2.2W,不须要主动散热设备。Intel 也没有给 Galileo 的处理器配置被动散热片。但这并不表示运行过程当中就不发热。在工做状态下,即便是 CPU 保持空闲状态,用手摸处理器表面仍旧会以为烫手,实测的温度在 65 摄氏度左右。
经过前文的介绍,你们应该了解到经过 Intel 提供的 Arduino IDE,就能够像标准的 Arduino 版那样进行开发了。不过光是实现标准 Arduino 开发板能作的事情,这彻底无法体现出 Intel Galileo 有何特殊之处,最多只能是一个速度更快的 Arduino 罢了。
若是功能上没有任何比传统 Arduino 过人之处,相信 Intel 也不会推出这样的产品了。其实 Intel Galileo 真正强大之处并不在于前面提到的基于 Arduino IDE 的开发,而是背后基于 UEFI/Linux 的软件平台以及 Galileo 自身的硬件配置。为此,Intel 提供了丰富的开发文档、软件代码支持,方便开发人员真正的发挥出 Galileo 的全部潜力。而要了解使用这些功能,就须要咱们更加深刻的去了解 Intel Galileo 的内部构成和更深刻的软件构架。
你们可能也会有这几个问题:
这里我将为你们揭开这些谜团。
3.1 硬件配置与构架分析
这里咱们列出 Galileo 的基本配置:
Intel Galileo 的系统框图以下:
图:Galileo 的框图,来自 Galileo Datasheet[5]
画面中最醒目的天然是名为 Quark SoC X1000 的处理器,这块芯片究竟有哪些功能?这个咱们稍后再具体分析,不过看起来这块处理器更加像单片机(MCU),除了处理器外传统 x86 构架的南北桥芯片已经不见踪影,PCIe、USB、串口等外设信号直接是从 Quark 处理器芯片连出。Intel官方也提过,他们会像 80 年代推进嵌入式领域那样(是指 8051?)推广 Quark 处理器构架[10],从 Galileo 的构架上可见一斑。
此外还能够注意到 Galileo 配备了共计 256MB 的 DDR3 内存。如此大的内存空间,足以让 Galileo 运行目前的各主流操做系统。
不过与单片机不一样的是,做为兼容标准 Arduino 板的各类 GPIO/PWM/ADC 信号,并无与 CPU 芯片直接相连,而是采用了独立的 ADC 芯片和 IO 扩展芯片。
3.1.1 对外接口一览
图:Intel Galileo 外部接口一览
从 Galileo 提供的对外接口来看,与其说是 x86 版本的 Arduino,我更愿意认为它是一个完整的 PC 主板。除了链接显示器的 VGA/HDMI 等接口和 SATA 接口没有提供外,几乎 PC 主板该有的接口在 Galileo 上都提供了(也有办法链接显示器,如采用 PCI-E 或者 USB 接口的显示器/显卡)。丰富的接口给了从此基于 Galileo 进行扩展开发的无限可能。尤为它还带有我最中意的 Mini PCI-E 接口,这使得 Galileo 与 FPGA 结合运算加速成为可能,这是目前各类 ARM 开发板中不多能看到的接口。
除了 Mini PCI-E,USB2.0 高速 Client/Host 口也为不少应用提供便利。一方面经过 USB Host 能够将各类 USB 外设链接在 Galileo 上,好比将 USB 摄像头链接与 Galileo 结合 OpenCV 进行视觉计算,此外,也能够经过 USB Client 将 Galileo 做为外设链接至 PC,就像目前 Galileo 实现的那样,固然,后文咱们会分析到,用户是彻底能够随意定义这个 USB Client 具体行为的,能够将 Galileo 做为任何但愿的外设链接至 PC。
不过比较怪异的是调试用的串口采用的是 3.5mm 音频接口,这给链接上带来了必定的麻烦,我将在后文提到这个问题。
3.1.2 主要芯片
图:Intel Galileo 主要芯片一览
上图给出了 Galileo 上主要芯片的布局以及其功能。其具体型号和说明见下表。在后文咱们将挑选几个有表明性的进行说明。
这里我就不深刻讨论这些芯片的具体参数、链接等问题了,对此感兴趣的朋友能够参考后文给出的 Intel Galileo 配套文档,参考官方提供的电路图了解具体细节。我将挑选几个表明性的芯片作分析。
3.1.3 Quark SoC X1000
Galileo上使用的这款 Quark SoC X1000 的处理器芯片相信是你们最关心的。那么它究竟是不是属于 Intel Atom 系列的处理器呢?答案是否认的。
图:Quark SoC X1000 特写
在产品定位上,Intel 将 Quark 定位于面向物联网、可穿戴设备的 x86 处理器,他的内部代号为 Clanton。相比 Atom 系列处理器,Quark 差很少是 Atom 1/5 的尺寸,功耗也只有 Atom 的1/10 (详见[6])。这估计也是叫作 Quark(夸克)的缘由。固然,做为减少尺寸、功耗、下降成本($5)的代价,Quark 的性能也弱不少。它比较像是改良了制程,但阉割了 MMX 指令集的奔腾 I 代处理器(参考文献[7]中猜想 Quark 是改良自 P54C 构架,P54C 构架是主频在 75, 90, 100 MHz 奔腾 I 代处理器采用的构架,当年采用 0.5um 制程工艺)。
表:Quark SoC X1000 部分配置,按照 Quark Datasheet[8] 整理获得
从支持的指令集看,Quark 并不像其余 Atom 芯片那样支持 x6四、MMX、SSE 等高级的指令集,但包含了浮点指令集(x87)。虽然 Intel 的官方参数中提到 Quark 的指令集是与奔腾兼容的,但很明显,因为缺乏了 MMX 指令这个做为奔腾处理器的重要标志,实际上不少能够在奔腾 I CPU上运行的程序在 Quark 上多是不能运行的。这点算是一个遗憾,缺乏 MMX、SSE 这类 SIMD 的指令集加速,使得 Quark 在处理多媒体、图像运算、计算机视觉等算法上可能会表现的较差。
不过,除了 MMX 指令集外,其余奔腾指令集/构架在 Quark 中均有支持。所以如今的程序只要不带有 MMX、SSE 指令,理论上是能够在 Quark 上运行的很好的。这点我会在后续的软件开发部分提到注意事项。这也能够看到另外一个细节,就是目前 PC 上的主流操做系统,Windows 和 Linux 都有望在 Quark 中运行(目前 Intel Galileo 上运行的就是 Linux)。
做为一款面向小型化设备的处理器,Quark 在 SoC 集成上作的仍是不错的,几乎是一个单片机该有的形态。即便不外接 DDR 内存,Quark 也能够利用芯片内集成的 512kbyte 的 SRAM 工做。
图:Quark SoC X1000 的内部框图,图片来自[8]
在功耗方面,Quark 将 max TDP 控制在 2.2W。对于采用 3.3V 供电而言,也就是最大须要提供 660mA 的电流。这样的功耗相比其余 x86 CPU 而言已经小了不少,可是咱们对比一样主频等级的其余构架的处理器,如 ARM、MIPS 构架的一些处理器,就会发现 Quark 的功耗仍是相对偏高的。若是要将 Quark 做为低功耗应用,Intel 为此还须要作更多的功课。
3.1.4 GPIO/PWM/ADC 接口的实现和 Hack
从前面的框图能够发现,Galileo 上对外的 GPIO/PWM/ADC 接口并非直接从 Quark 芯片中直接提供的,而是采用了额外的芯片来实现,Quark CPU 与这些接口芯片再使用 SPI/I2C 进行链接。
这样作天然有很多的好处,好比能够作到电气隔离。Quark 处理器采用 3.3V 电平,所以也没法直接将自身的 GPIO 与 Arduino 接口直接链接。也能够避免用户因为连线错误链接直接致使 Quark 芯片烧毁的可能。同时也提升了系统的灵活度。
图:用于扩展 GPIO/PWM/ADC 的接口芯片
经过分析这些新品的数据手册,在了解 Galileo 的实现细节的同时,还能够发现更多能够用来 Hack 的特性。好比用于实现 GPIO/PWM 信号扩展的 CY8C9540A 芯片的框图:
图:CY8C9540A IO 扩展芯片框图,图片来自[9]
从芯片框图可知,该芯片除了提供了 PWM/GPIO 的信号扩展外,还自带了一个能够被 Quark 使用的 EEPROM,能够存储 11kbyte 的数据[9],用户可使用 EEPROM 库来操做他。此外,该芯片实际提供了 8 组 PWM 口,多于 Intel Galileo手 册中描述的 6 组。不过额外的 PWM 输出是没法经过使用 Arduino IDE 来使用了,这即是从此能够 hack 的部分。
观察用于数模信号采集的 ADC 芯片 AD7298,发现性能也尚可。具备 12bit 1Msample/s 的采集能力。这样的性能虽然不算高,但比基于 AVR 芯片的 Arduino 强不少,与目前的一些 32bit ARM MCU(如 STM32)的 ADC 处于同一等级。
3.1.5 SD 读卡器
Intel Galileo 上的 SD 读卡器直接与 Quark 处理器相链接。这个读卡器比较吸引人的特色在于在 Galileo 启动时,将尝试引导位于 SD 卡上的操做系统。就像 PC 上的引导 U 盘同样。用户能够将自定义的操做系统放置于 SD 卡,使得 Galileo 运行其余的系统成为可能。关于这点,我将在后续软件构架和可能性探讨部分具体涉及。
图:Intel Galileo 支持从 SD 卡加载自定义操做系统
3.1.6 调试串口
Intel Galileo 提供了一个调试串口供开发人员经过终端链接 Galileo 调试底层的软件系统。不过比较怪异的是,Galileo 将该串口接口作成了 3.5mm 的耳机插口。这不但使人容易疑惑,此外要找到这样的串口接口也不容易,为此我专门 DIY 了一个音频插口转 RS232 插座的转接线:
图:看似音频输出,实则为调试串口插座
经过使用 Putty 等软件,能够观测到 Intel Galileo 启动过程以及进入内部的 Linux 进行操做。我将在软件开发部分讨论这个问题。
图:透过调试串口,看到的 Intel Galileo 启动中的 Grub 菜单
3.1.7 存放自带固件的 Flash
位于 Intel Gaileo 主板上有块 8MByte 大小的 SPI Flash,其中保存了 Galileo 启动中的固件程序。类比 PC 主板,其实这块芯片保存的就是 BIOS 程序。不过在后面的软件构架中我会提到,Galileo 采用了 UEFI,这块 Flash 芯片中包含了 UEFI 的固件程序用于 Galileo 初始化引导、以及一个小型的 Linux 操做系统,用于运行用户经过 Arduino IDE 开发的程序并和 PC 完成互联。
为了方便用户 hack,Intel Galileo 也很友善的将这块 Flash 芯片的 SPI 接口引出,用户能够不须要拆下 Flash 芯片,直接使用编程器对 Flash 芯片内的固件程序作修改和备份。这个过程将在后续的扩展开发中讨论。
图:保存固件的 SPI Flash 芯片和方便编程的接口排针
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 程序。
3.2.3 Arduino Sketch 是如何运行的?
前面已经提到为 Intel Galileo 编写的 Arduino 程序实质是标准的 Linux ELF 可执行 App。那么他是如何操做 Galileo 的硬件外设呢?为此咱们就须要经过浏览相关源代码找到答案。
打开 Intel Galileo 专门的 Arduino IDE 所在目录的 hardware\arduino\x86\cores\arduino 位置,这里存放了 Intel 为 Galileo 开发的 Arduino 库的源代码。能够看出 Intel 彻底重写了原先整个基于 AVR 芯片的 Arduino 实现。
图:Intel 彻底重写的 Arduino 运行库代码
这里咱们挑选 fast_gpio_sc.c(实现 GPIO 操做)代码进行研究。该代码用于实现你们熟悉的 digitalWrite, digitalRead 等 IO 操做。从代码可知,Intel Galileo 上的 Linux 系统已经对应的 IO 设备包装成了 Linux 设备文件,用户编写的 Arduino 程序只须要像标准的 linux 程序那样使用 mmap/ioctl 等系统调用便可操做具体的硬件外设。
图:Galileo 上对 GPIO 操做的代码实现片断
上述代码使用 open() 系统调用开始访问 GPIO 外设,其 Linux 设备路径为 /dev/uio0。对于其余诸如 I2C、ADC、SPI 等设备,基本的实现都是同样的。
同时,在 Galileo 版的 Arduino IDE 目录下也能够找到专门为 Quark 处理器定制的 gcc 编译器,这对于熟悉 Linux 程序开发的朋友来讲,也意味着能够脱离 Arduino IDE,直接在 Galileo 的 Linux 中编写程序与外部电路进行控制。
图:Arduino IDE 中带有的 Quark 平台的 GCC 编译器和工具链
在分析了 Galileo 的软硬件构架后,我给你们分享一些除了使用 Arudino IDE 以外的进阶的使用方式。不过在本文中并不会涉及编程开发的话题。
4.1 直接操做 Linux 系统
这里聊聊如何直接操做 Galileo 中的 Linux。咱们可使用以太网或者调试串口链接到 Linux 中。具体的链接操做能够查看 Intel 给出的文档。
以串口为例,我使用本身 DIY 的 3.5mm 音频插座转串口线将 Galileo 的调试串口与 PC 互连。并使用 Putty 打开串口中断,设置 115200 波特率。
图:能够 DIY 一个音频转串口链接线
给 Intel Galileo 通电后,就能够看到启动过程的文本输出,最终将看到 Linux 登陆提示画面。直接使用 root 帐号登陆:
图:经过串口登陆至板载的Linux终端
接下来就能够像其余 Linux 系统同样进行操做了。
4.2 使用 SD 卡上的 Linux 系统
若是须要运行 Intel 提供的完整版 Galileo 定制的 Linux 系统,就须要从 SD 卡引导启动。在 Intel 的 Galileo 下载页面[1]提供了该 Linux 系统的 SD 卡文件。将他们复制到 FAT 格式的 SD 卡根目录下:
图:将配套的文件复制入 SD 卡
将 SD 卡插入 Galileo,并给 Galileo 通电便可,Galileo 将会引导来自 SD 卡的 Linux 系统。能够经过串口或者以太网登陆至该系统:
图:Grub 显示将引导 SD 卡上的 Linux 系统
相比 SPI Flash 中的 Linux,SD 的 Linux 系统包含了更多的驱动,以及带有以下的库/程序:
图:在 Galileo 的 Linux 中运行 python 程序
4.2.1 与 UEFI直接打交道
除了操做 Linux 外,Galileo 也提供了 UEFI Shell 供咱们操做更底层的固件以及在具体 OS 加载前,对 Galileo 进行一些简单的操做。UEFI Shell 提供了一系列的命令可使用,能够操做文件、对内存/外设等调试或者编写脚本运行。若是须要修改 SPI Flash 的内容,但手头有没有硬件编程器,就能够借助 EFI Shell 来完成。具体的命令能够参考文献[13]。
经过调试串口,并使用 Putty 链接至 Intel Galileo。在启动过程当中进入 Grub 菜单后按住 c。并输入 quit 退出 grub:
图:退出 Grub EFI 程序
此时 UEFI 将会提示新的启动模式,选择 UEFI Internal Shell:
图:UEFI 输出的启动提示菜单
接下来便可进入 EFI Shell。后面提到的对 SPI Flash 进行更新的操做就是在 EFI Shell 当中进行的。
图:EFI Shell 界面
介绍完了 Intel Galileo 的实现细节以及各类使用后,我来向你们分享下基于 Intel Galileo 进行开发的心得。这里我主要围绕操做系统层次进行介绍。
5.1 参考资料一览
Intel 目前几乎提供了 Galileo 一切的资料,有了这些资料,只要能购买到 Quark SoC 芯片,本身 DIY 一块 Galileo 是彻底没问题的。目前在 Intel Galileo 官方网站[1]中已经提供的资料有:
若是你打算基于 Galile o或者 Quark SoC X1000 进行开发,这些都是必读的内容。他们足以解释在对 Galileo 进行开发、系统定制、优化过程当中出现的问题。
5.2 自定义 Linux 系统
Intel Galileo 中运行的 Linux 系统是由 Yocto Buildroot[14] 系统产生的。接触过路由器定制的朋友可能会对 OpenWRT 的系统定制有过研究,Yocto 与 Openwrt 的编译系统相比,显得更加的强大。它是一个高度可配置的嵌入式 Linux 的整合编译环境。开发人员能够比较方便的定制目标嵌入式设备所须要的 Linux kernel、各软件包。Yocto 将会自动将所须要的软件包进行代码下载、编译、打包动做,直接产生能够烧录进目标系统的镜像文件。
图:Yocto 编译系统的构架,图片来源[14]
在 Intel Galileo 软件下载页面[1]中提供了基于 Yocto 编译系统的 Galileo 的全部软件源代码。按照文档操做,便可本身编译出前面所提到 UEFI 固件、Grub、用于 SPI Flash 的 Linux 和在 SD 卡中运行的完整版本的 Linux 镜像。
那么为何要去本身定制 Linux 呢?缘由有不少,好比但愿让 Galileo 支持更多的硬件设备,例如让它识别你的 3G 上网卡、链接 Kinect 等等,亦或你但愿在 Linux 中增长更多的软件包,好比但愿运行 Apache 服务器。这是,只须要按照 Yocto 的配置过程定制系统便可。
图:基于 Yocto 的 Intel Galileo BSP 代码目录结构
图:配置 Intel Galileo 所使用的 Linux Kernel
5.3 为Galileo增长显示器、键盘等外设
这里以最广泛的各种 USB 设备为例,因为在 Intel Galileo 上的 USB Host 是 micro-usb 插座,标准的 USB 插头无法直接链接,因此首先要准备一条 micro-usb OTG 线:
图:准备一条 micro-usb OTG 线用于链接 USB 外设
此外,若是须要链接多个 USB 设备,则可使用 USB 集线器。
5.3.1 外接 USB 显示屏用于显示画面
Intel Galileo 的一个遗憾之处在于没有提供用于链接显示器的 VGA、DVI、HDMI 等视频输出接口。这给一些应用和调试带来不便,彷佛这样就无法运行 Windows 的系统了。
不过咱们还有别的办法来实现让 Galileo 显示画面,这里我使用的是 RoboPeak 迷你 USB 显示器[15],经过修改 Galileo 的内核增长对应的驱动支持,可让 Linux 的命令行和 X 图形界面在 USB 显示器中显示:
图:使用 USB 显示屏为 Intel Galileo 增长视频输出能力
5.3.2 外接鼠标键盘
在增长了视频输出后,很天然的就是尝试给 Galileo 配置鼠标和键盘等输入设备了。在 Intel 提供的 Linux kernel 配置中,并无加入对鼠标键盘等 HID 设备的支持,这须要咱们在 menuconfig 中增长。
图:在 Linux Kernel 的 Menuconfig 加入对 USB HID 设备的支持
在加入了对应配置后,就能够把 Intel Galileo 变成一台真正意义上的 PC,固然没中不足的是它暂时尚未运行 Windows,这将是下一步的工做。
图:给 Galileo 配置鼠标键盘,变成完整的 PC
5.3.3 使用 USB 摄像头
对于但愿使用 Intel Galileo 进行计算机视觉处理的应用,则须要增长对应的 USB 摄像头驱动。通常目前市面的 USB 摄像头多为采用 UVC 协议规范的芯片,而一些老式的摄像头或者特殊摄像头在 Linux 下则采用 GPSCA 驱动框架。一样在,在 Kernel 的 menuconfig 中增长对应的驱动便可:
图:增长对 USB 摄像头的支持
5.4 其余可能性讨论
前面向你们分享了目前我使用 Intel Galileo 作的一些扩展开发。因为目前刚使用 Galileo 不久,所以有更多好玩的可能性有待于去实现。这里说说从此打算尝试的可能性。
5.4.1 增长运算性能
因为 Intel Galileo 的主频只有 400Mhz,这的确给不少应用形成了不变。对于视觉运算而言,400Mhz 的主频对于不少应用都显得捉襟见肘。
不过 Galileo 提供了高速的 PCI-E 接口,咱们能够利用该接口与外部更增强劲的运算系统创建高速互联。最具表明的就是经过 PCI-E 与 FPGA 进行链接,经过 FPGA 实现视觉计算、密码学处理、人工神经网络等须要高速并行性的算法,并使用 Galileo 的 Quark 芯片实现高层的控制逻辑来协调运算。
在传统的 PC 中,使用 PCI-E 接口的 FPGA 加速卡与 CPU 进行协同加速运算是比较常见的作法,借助一样是 x86 平台的优点,使用 Intel Galileo 能够将以往须要采用传统 PC 的 FPGA 加速项目移植到更加小、低功耗的环境下。这能够在移动机器人、飞行器等领域具备很大的应用前景。
5.4.2 运行其余的操做系统
目前的 Intel Galileo 只能运行 Linux,而且因为自身并无视频输出接口,Intel 默认的 Linux 配置是没有 X 图形系统的。不过做为一个 x86 平台,你们天然会但愿 Galileo 运行其余的操做系统,如 Windows。
在前面的分析中,咱们已经看到 Galileo 的构架和软件支持彻底容许让 Windows 运行在其中。这或许最终没有什么实际价值,但也是值得尝试的事情。至少做为 geek 来讲,这样作能够增强“我能够”的信条。此外,运行 Windows 也可让 Galileo 驱动一些尚只有 Windows 驱动支持的外设,好比一些打印机设备、银行 U 盾等。
本文是我对 Intel Galileo 的一些使用体会和经验分享,因为拿到手时间不长,所以不少 Galileo 的潜力尚未去尝试。不过经过对软硬件构架和开发过程的介绍,相信你们会了解 Intel Galileo 的巨大潜力,若是只是看成标准 Arduino 来使用,那就太惋惜了。
参考文献[1] Intel Galileo 相关软件,https://communities.intel.com/community/makers/software/drivers[2] Intel Galileo Getting Started Guide,,https://communities.intel.com/docs/DOC-21838[3] Locale Emulator github,,https://github.com/xupefei/Locale-Emulator[4] Arduino IDE crash issue on github, https://github.com/arduino/Arduino/issues/1626[5] Intel Galileo Datasheet, https://communities.intel.com/docs/DOC-21835[6] Intel’s New Chip ‘Quark’ is Designed for Wearable Tech,http://www.crunchwear.com/intels-new-chip-quark-designed-wearable-tech/[7] What happens if you shrink a P54C Pentium to 32nm and call it Quark?, http://semiaccurate.com/2013/09/11/happens-shrink-p54c-pentium-32nm-call-quark/[8] Intel Quark Soc Datasheet, https://communities.intel.com/docs/DOC-21828[9] CY8C9520A,CY8C9540A, CY8C9560A,20-, 40-, and 60-Bit I/O Expander with EEPROM datasheet, http://www.cypress.com/?docID=31413[10] 英特尔开源PC伽利略将第一时间入华, http://tech.qq.com/a/20131208/001118.htm[11] Product Brief Intel® Quark SoC X1000, https://communities.intel.com/docs/DOC-21829[12] Product Brief Intel® Galileo Board, https://communities.intel.com/docs/DOC-21836[13] EFI Shells and Scripting, http://software.intel.com/en-us/articles/efi-shells-and-scripting[14] Yocto Project, https://www.yoctoproject.org/[15] RoboPeak迷你USB显示器开源项目, http://www.robopeak.com/blog/?p=377