在今年(2013)罗马举办的首届欧洲MakeFaire上,Intel向对外发布了采用x86构架的Arduino开发板:IntelGalileo。这无疑是一个开源硬件领域的重磅消息。作为CPU领域的巨头Intel,为开源硬件/Maker领域这个从前相对小众的圈子推出专门的硬件,无疑说明对开源硬件领域发展的重视程度。同时,Intel也作为本届欧洲MakerFaire的主要赞助商。
图:IntelGalileo开发板,图片来自intel.com
在PC行业,Intelx86构架的强大性能一直被行业称道,自然这次推出的Arduino开发板,也给业界带来了无限的遐想。我相信很多人都会略带调侃问:这个开发板能不能运行Windows这样的问题。同时,相信也有不少人会关心IntelGalileo的功耗问题,以及开发使用上是否具有难度。
这里也先针对那个调侃问题做个回应:是的,通过软件的调整,IntelGalileo的确可以运行Windows。
图:使用RoboPeak微型USB显示屏,给Galileo增加显示屏变成标准PC
2.1开箱体验
打开包装后,就能看到Galileo电路板了,还有一些说明书等。盒子的内部是表示Intel芯片线路的装饰画。
图:简介的说明文档
图:IntelGalileo电路板用防静电袋包装着
在电路板旁边印着Intel为Galileo设计的宣传语:Whatwillyoumake?在取出电路板的时候,突然从盒子里发出了Intel那令人熟悉的“灯,等灯等灯!”的音乐,这着实令人大吃一惊。这样一个看似细小的设计,却在客户打开包装是带来了巨大的惊喜,真的很用心!而这种感受可能也只有亲身体验才能感受到。
将包装盒第二层拿开,我在这层纸板的背后发现了发出音乐的玄机:
图:包装盒背面暗藏的光敏发音盒
不过这个发音盒只是个音乐贺卡用的音乐IC,没啥可hack的部分,不然相信它会惨遭全球人民的恶搞修改命运。在打开第二层后,又发现一个小惊喜:Intel工作服的人偶:
盒子中剩余的部分是电源适配器以及兼容不同国家地区插座规格的插头以及PCB的固定柱子以及micro-usb线。
就此所有东西都取出了,我们可以感受到Intel对这款产品的重视程度。当然为实现这些细节也是要考虑成本的,而最终为此买单的自然就是消费者。不过从目前Mouser网站的预订网页看,IntelGalileo的售价为:$69,考虑到性能和BOM成本都较低的ArduinoYún同样在Mouser上售价为$76,IntelGalileo的售价绝对算是厚道了。
2.2基本使用方式
在进一步介绍IntelGalileo构造和原理前,先介绍下作为一块Arduino开发板的基本使用过程。由于采用了x86构架,因此Arduino官方IDE尚不能直接用于IntelGalileo,并且为基于传统AVR芯片设计的Arduino程序和库也可能需要做出修改。为此,Intel提供了一个修改版本的ArduinoIDE,可以从Intel的maker官网maker.intel.com下载到[1]。
图:Intel提供的配套开发工具、驱动等
对于具体的驱动安装和使用,Intel为用户提供了GettingStartedGuide文档[2],这里我也不在重复了。
图:Intel编写的快速上手手册
这里需要提醒大家的是,使用时需要先给IntelGalileo使用电源适配器供电,方可再通过USB线连接至电脑。这一点非常重要,因为Galileo有专门的DCDC电源控制,并且启动过程瞬间电流需求较大。如果只连接USB企图给电路板供电,则可能会损坏电路板或者电脑。
图:IntelGalileo需要使用特殊的驱动连接PC
在后文我会提到,IntelGalileo内部运行着Linux,与PC连接时,它需要采用Intel专门提供的驱动描述来保证PC将它识别为串口设备(仅用于Windows,MacOS和Linux请参考文档)。
图:被PC识别为串口的GalileoUSB接口
启动ArduinoIDE,此时我们就可以把IntelGalileo作为一个标准的Arduino开发板使用了:
图:与其他Arduino开发板一样,IntelGalileo也可以在ArduinoIDE中进行开发
2.2.1解决IDE闪退问题
不少已经拿到IntelGalileo的朋友都会反映Intel提供的ArduinoIDE会出现“闪退”问题,就是在启动IDE出现版本画面后,程序会默默退出。其实这并不是Intel的问题,而是新版本ArduinoIDE的bug。由于Intel定制的ArduinoIDE采用了还未发布的1.5.3版本IDE,如果当前OS的区域设置不是英文(En/US)的话,IDE就会自己退出。为此,Arduino开发团队和Intel也已经意识到了这个问题,也将在1.5.4修复[4]。
图:LocaleEmulator界面
该软件可以为特定程序虚拟出特定的语言区域配置,而不用修改整个操作系统。使用这个办法,就可以直接使用IntelGalileo的ArduinoIDE。
图:使用LocaleEmulator启动ArduinoIDE,解决闪退问题
2.3发热与功耗
功耗一直是困扰x86平台在移动嵌入式领域应用的重要问题,我对IntelGalileo做了几个简单的测试。相比其他x86平台,IntelGalileo功耗的确算小,但是与ARM/MIPS等同主频等级的平台相比,就显得大很多。
在CPU几乎空闲的工作状态下,测得的功耗水平是5V0.5A,也就是2.5W的耗电量。而在启动过程中,会出现1A以上的峰值电流。
图:IntelGalileo运行的功耗情况
不过考虑到目前Galileo中运行的LinuxKernel并没有开启动态CPU频率控制功能,因此即使在满负荷下,CPU核心的功耗水平应该相比空闲状态差距不大,因此启动过程中的峰值电流应该是在开启外设产生的瞬间电流造成的。在启动后的工作当中,即使CPU满负荷运作,整体的功耗应该会维持在0.5A附近。
从发热角度上看,IntelGalileo采用的Quark处理器芯片的maxTDP是2.2W,不需要主动散热设备。Intel也没有给Galileo的处理器配置被动散热片。但这并不表示运行过程中就不发热。在工作状态下,即使是CPU保持空闲状态,用手摸处理器表面仍旧会觉得烫手,实测的温度在65摄氏度左右。
通过前文的介绍,大家应该了解到通过Intel提供的ArduinoIDE,就可以像标准的Arduino版那样进行开发了。不过光是实现标准Arduino开发板能做的事情,这完全没法体现出IntelGalileo有何特殊之处,最多只能是一个速度更快的Arduino罢了。
如果功能上没有任何比传统Arduino过人之处,相信Intel也不会推出这样的产品了。其实IntelGalileo真正强大之处并不在于前面提到的基于ArduinoIDE的开发,而是背后基于UEFI/Linux的软件平台以及Galileo自身的硬件配置。为此,Intel提供了丰富的开发文档、软件代码支持,方便开发人员真正的发挥出Galileo的所有潜力。而要了解使用这些功能,就需要我们更加深入的去了解IntelGalileo的内部构成和更深入的软件构架。
大家可能也会有这几个问题:
这里我将为大家揭开这些谜团。
3.1硬件配置与构架分析
这里我们列出Galileo的基本配置:
IntelGalileo的系统框图如下:
图:Galileo的框图,来自GalileoDatasheet[5]
画面中最醒目的自然是名为QuarkSoCX1000的处理器,这块芯片究竟有哪些功能?这个我们稍后再具体分析,不过看起来这块处理器更加像单片机(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对外接口一览
图:IntelGalileo外部接口一览
从Galileo提供的对外接口来看,与其说是x86版本的Arduino,我更愿意认为它是一个完整的PC主板。除了连接显示器的VGA/HDMI等接口和SATA接口没有提供外,几乎PC主板该有的接口在Galileo上都提供了(也有办法连接显示器,如采用PCI-E或者USB接口的显示器/显卡)。丰富的接口给了今后基于Galileo进行扩展开发的无限可能。尤其它还带有我最中意的MiniPCI-E接口,这使得Galileo与FPGA结合运算加速成为可能,这是目前各种ARM开发板中很少能看到的接口。
除了MiniPCI-E,USB2.0高速Client/Host口也为很多应用提供便利。一方面通过USBHost可以将各种USB外设连接在Galileo上,比如将USB摄像头连接与Galileo结合OpenCV进行视觉计算,此外,也可以通过USBClient将Galileo作为外设连接至PC,就像目前Galileo实现的那样,当然,后文我们会分析到,用户是完全可以随意定义这个USBClient具体行为的,可以将Galileo作为任何希望的外设连接至PC。
不过比较怪异的是调试用的串口采用的是3.5mm音频接口,这给连接上带来了一定的麻烦,我将在后文提到这个问题。
3.1.2主要芯片
图:IntelGalileo主要芯片一览
上图给出了Galileo上主要芯片的布局以及其功能。其具体型号和说明见下表。在后文我们将挑选几个有代表性的进行说明。
这里我就不深入讨论这些芯片的具体参数、连接等问题了,对此感兴趣的朋友可以参考后文给出的IntelGalileo配套文档,参考官方提供的电路图了解具体细节。我将挑选几个代表性的芯片做分析。
3.1.3QuarkSoCX1000
Galileo上使用的这款QuarkSoCX1000的处理器芯片相信是大家最关心的。那么它到底是不是属于IntelAtom系列的处理器呢?答案是否定的。
图:QuarkSoCX1000特写
在产品定位上,Intel将Quark定位于面向物联网、可穿戴设备的x86处理器,他的内部代号为Clanton。相比Atom系列处理器,Quark差不多是Atom1/5的尺寸,功耗也只有Atom的1/10(详见[6])。这估计也是叫做Quark(夸克)的原因。当然,作为减小尺寸、功耗、降低成本($5)的代价,Quark的性能也弱很多。它比较像是改良了制程,但阉割了MMX指令集的奔腾I代处理器(参考文献[7]中猜测Quark是改良自P54C构架,P54C构架是主频在75,90,100MHz奔腾I代处理器采用的构架,当年采用0.5um制程工艺)。
表:QuarkSoCX1000部分配置,按照QuarkDatasheet[8]整理得到
从支持的指令集看,Quark并不像其他Atom芯片那样支持x64、MMX、SSE等高级的指令集,但包含了浮点指令集(x87)。虽然Intel的官方参数中提到Quark的指令集是与奔腾兼容的,但很明显,由于缺少了MMX指令这个作为奔腾处理器的重要标志,实际上很多可以在奔腾ICPU上运行的程序在Quark上可能是不能运行的。这点算是一个遗憾,缺少MMX、SSE这类SIMD的指令集加速,使得Quark在处理多媒体、图像运算、计算机视觉等算法上可能会表现的较差。
不过,除了MMX指令集外,其他奔腾指令集/构架在Quark中均有支持。因此现在的程序只要不带有MMX、SSE指令,理论上是可以在Quark上运行的很好的。这点我会在后续的软件开发部分提到注意事项。这也可以看到另一个细节,就是目前PC上的主流操作系统,Windows和Linux都有望在Quark中运行(目前IntelGalileo上运行的就是Linux)。
作为一款面向小型化设备的处理器,Quark在SoC集成上做的还是不错的,几乎是一个单片机该有的形态。即使不外接DDR内存,Quark也可以利用芯片内集成的512kbyte的SRAM工作。
图:QuarkSoCX1000的内部框图,图片来自[8]
在功耗方面,Quark将maxTDP控制在2.2W。对于采用3.3V供电而言,也就是最大需要提供660mA的电流。这样的功耗相比其他x86CPU而言已经小了很多,但是我们对比同样主频等级的其他构架的处理器,如ARM、MIPS构架的一些处理器,就会发现Quark的功耗还是相对偏高的。如果要将Quark作为低功耗应用,Intel为此还需要做更多的功课。
3.1.4GPIO/PWM/ADC接口的实现和Hack
从前面的框图可以发现,Galileo上对外的GPIO/PWM/ADC接口并不是直接从Quark芯片中直接提供的,而是采用了额外的芯片来实现,QuarkCPU与这些接口芯片再使用SPI/I2C进行连接。
这样做自然有不少的好处,比如可以做到电气隔离。Quark处理器采用3.3V电平,因此也无法直接将自身的GPIO与Arduino接口直接连接。也可以避免用户由于连线错误连接直接导致Quark芯片烧毁的可能。同时也提高了系统的灵活度。
图:用于扩展GPIO/PWM/ADC的接口芯片
通过分析这些新品的数据手册,在了解Galileo的实现细节的同时,还可以发现更多可以用来Hack的特性。比如用于实现GPIO/PWM信号扩展的CY8C9540A芯片的框图:
图:CY8C9540AIO扩展芯片框图,图片来自[9]
从芯片框图可知,该芯片除了提供了PWM/GPIO的信号扩展外,还自带了一个可以被Quark使用的EEPROM,可以存储11kbyte的数据[9],用户可以使用EEPROM库来操作他。此外,该芯片实际提供了8组PWM口,多于IntelGalileo手册中描述的6组。不过额外的PWM输出是无法通过使用ArduinoIDE来使用了,这便是今后可以hack的部分。
观察用于数模信号采集的ADC芯片AD7298,发现性能也尚可。具有12bit1Msample/s的采集能力。这样的性能虽然不算高,但比基于AVR芯片的Arduino强很多,与目前的一些32bitARMMCU(如STM32)的ADC处于同一等级。
3.1.5SD读卡器
IntelGalileo上的SD读卡器直接与Quark处理器相连接。这个读卡器比较吸引人的特点在于在Galileo启动时,将尝试引导位于SD卡上的操作系统。就像PC上的引导U盘一样。用户可以将自定义的操作系统放置于SD卡,使得Galileo运行其他的系统成为可能。关于这点,我将在后续软件构架和可能性探讨部分具体涉及。
图:IntelGalileo支持从SD卡加载自定义操作系统
3.1.6调试串口
IntelGalileo提供了一个调试串口供开发人员通过终端连接Galileo调试底层的软件系统。不过比较怪异的是,Galileo将该串口接口做成了3.5mm的耳机插口。这不但令人容易疑惑,此外要找到这样的串口接口也不容易,为此我专门DIY了一个音频插口转RS232插座的转接线:
图:看似音频输出,实则为调试串口插座
通过使用Putty等软件,可以观测到IntelGalileo启动过程以及进入内部的Linux进行操作。我将在软件开发部分讨论这个问题。
图:透过调试串口,看到的IntelGalileo启动中的Grub菜单
3.1.7存放自带固件的Flash
位于IntelGaileo主板上有块8MByte大小的SPIFlash,其中保存了Galileo启动中的固件程序。类比PC主板,其实这块芯片保存的就是BIOS程序。不过在后面的软件构架中我会提到,Galileo采用了UEFI,这块Flash芯片中包含了UEFI的固件程序用于Galileo初始化引导、以及一个小型的Linux操作系统,用于运行用户通过ArduinoIDE开发的程序并和PC完成互联。
为了方便用户hack,IntelGalileo也很友善的将这块Flash芯片的SPI接口引出,用户可以不需要拆下Flash芯片,直接使用编程器对Flash芯片内的固件程序做修改和备份。这个过程将在后续的扩展开发中讨论。
图:保存固件的SPIFlash芯片和方便编程的接口排针
3.2软件架构
3.2.1总体构架浅析
在前文中介绍的利用ArduinoIDE给IntelGalileo编程完全只能看到Galileo软件系统的冰山一角。IntelGalileo并不像其他单片机开发板那样,它并不是简单的运行用户所编写的程序那么简单。
它的软件构架环境基本与一台标准PC一致:含有UEFI(与传统的BIOS等价)、Grub引导、运行Linux操作系统。而用户编写的ArduinoSketch程序,在实现上只是运行在Linux系统中的一个App而已:
在IntelGaileo主板的SPIFlash芯片内,保存了开机需要的UEFI初始化固件,以及一个微型的Linux操作系统。在编写Arduino程序时,ArduinoIDE将编写好的Arduino程序编译成为了一个标准的LinuxELF可执行文件,并下载进入Galileo上运行的Linux系统中执行。
通过直接基于Galileo上Linux系统进行开发,我们可以发挥出Galileo更大的潜力。并且借助Intel提供的各种开发资料和开源的UEFI实现,我们也可以让Galileo运行更多的操作系统,比如Windows。
在IntelQuarkSoC的介绍文档[11]中,Intel给出了目前基于QuarkSoC的软件栈的支持情况:
手上的IntelGalileo并不运行WindRiverLinux或者Vxwork。它采用了基于Yocto项目的定制版本的Linux系统,并分为运行在SPIFlash上的微型系统以及运行在SD卡的完整版本系统:
图:用于IntelGalileo的软件平台构架
由于IntelGaileo主板上的SPIFlash8Mbyte空间限制,Intel将一个微型版本的Linux系统集成在该芯片当中。在Galileo启动后将默认启动该版本的Linux,它带有Galileo主板上基本的外设驱动,并保证ArduinoSketch能正常运作。但如果用户需要更多功能,就需要采用外接SD卡,使用Intel提供的完整版本Linux。该Linux还额外包括了Wifi网卡驱动,以及OpenCV等库:
在设计上,通过ArduinoIDE编写的Sketch程序可以永久保存在SPIFlash芯片内或者SD卡中。当然,如果要保存在主板上的SPIFlash芯片内,编写的Sketch程序的大小就要有限制。
3.2.2IntelGalileo启动过程简介
在通电后,IntelGalileo将会首先执行位于SPIFlash上的UEFI初始化程序,并逐渐进入Linux系统随后开始运行用户的Sketch程序。其大致启动过程如下图所示:
图:IntelGalileo的启动过程
从上图可以看出,Galileo的启动过程与传统PC一致。除了支持从SD卡引导,IntelGalileo也同样支持引导U盘、从网络(可能需要修改UEFI)等方式的启动。不过与PC不同的是Galileo并不是基于主引导记录(MBR)来判断是否需要进行引导的,毕竟Galileo并不含有传统的老式BIOS,它的引导是通过Grub进行的,因此需要引导的介质需要有可以被Galileo自带Grub识别的文件系统以及对应的Grub引导配置。
图:从调试串口看到的IntelGalileo启动输出信息
此外,在UEFI阶段,用户也可以要求运行其他的EFI程序,比如EFIShell。这使得引导过程更加的灵活。对于目前Intel已经提供的软件使用来说,引导过程最终都将启动Linux操作系统。并在Linux启动完毕后,从目录/sketch下加载sketch.elf程序(如果有),运行用户保存在Arduino程序。
3.2.3ArduinoSketch是如何运行的?
打开IntelGalileo专门的ArduinoIDE所在目录的hardware\arduino\x86\cores\arduino位置,这里存放了Intel为Galileo开发的Arduino库的源代码。可以看出Intel完全重写了原先整个基于AVR芯片的Arduino实现。
图:Intel完全重写的Arduino运行库代码
这里我们挑选fast_gpio_sc.c(实现GPIO操作)代码进行研究。该代码用于实现大家熟悉的digitalWrite,digitalRead等IO操作。从代码可知,IntelGalileo上的Linux系统已经对应的IO设备包装成了Linux设备文件,用户编写的Arduino程序只需要像标准的linux程序那样使用mmap/ioctl等系统调用即可操作具体的硬件外设。
图:Galileo上对GPIO操作的代码实现片段
上述代码使用open()系统调用开始访问GPIO外设,其Linux设备路径为/dev/uio0。对于其他诸如I2C、ADC、SPI等设备,基本的实现都是一样的。
同时,在Galileo版的ArduinoIDE目录下也可以找到专门为Quark处理器定制的gcc编译器,这对于熟悉Linux程序开发的朋友来说,也意味着可以脱离ArduinoIDE,直接在Galileo的Linux中编写程序与外部电路进行控制。
图:ArduinoIDE中带有的Quark平台的GCC编译器和工具链
4.1直接操作Linux系统
这里聊聊如何直接操作Galileo中的Linux。我们可以使用以太网或者调试串口连接到Linux中。具体的连接操作可以查看Intel给出的文档。以串口为例,我使用自己DIY的3.5mm音频插座转串口线将Galileo的调试串口与PC互连。并使用Putty打开串口中断,设置115200波特率。
图:可以DIY一个音频转串口连接线
接下来就可以像其他Linux系统一样进行操作了。
4.2使用SD卡上的Linux系统
如果需要运行Intel提供的完整版Galileo定制的Linux系统,就需要从SD卡引导启动。在Intel的Galileo下载页面[1]提供了该Linux系统的SD卡文件。将他们复制到FAT格式的SD卡根目录下:
图:将配套的文件复制入SD卡
图:Grub显示将引导SD卡上的Linux系统
相比SPIFlash中的Linux,SD的Linux系统包含了更多的驱动,以及带有如下的库/程序:
图:在Galileo的Linux中运行python程序
4.2.1与UEFI直接打交道
除了操作Linux外,Galileo也提供了UEFIShell供我们操作更底层的固件以及在具体OS加载前,对Galileo进行一些简单的操作。UEFIShell提供了一系列的命令可以使用,可以操作文件、对内存/外设等调试或者编写脚本运行。如果需要修改SPIFlash的内容,但手头有没有硬件编程器,就可以借助EFIShell来完成。具体的命令可以参考文献[13]。
通过调试串口,并使用Putty连接至IntelGalileo。在启动过程中进入Grub菜单后按住c。并输入quit退出grub:
图:退出GrubEFI程序
此时UEFI将会提示新的启动模式,选择UEFIInternalShell:
图:UEFI输出的启动提示菜单
接下来即可进入EFIShell。后面提到的对SPIFlash进行更新的操作就是在EFIShell当中进行的。
图:EFIShell界面
5.1参考资料一览
Intel目前几乎提供了Galileo一切的资料,有了这些资料,只要能购买到QuarkSoC芯片,自己DIY一块Galileo是完全没问题的。目前在IntelGalileo官方网站[1]中已经提供的资料有:
如果你打算基于Galileo或者QuarkSoCX1000进行开发,这些都是必读的内容。他们足以解释在对Galileo进行开发、系统定制、优化过程中出现的问题。
5.2自定义Linux系统
IntelGalileo中运行的Linux系统是由YoctoBuildroot[14]系统产生的。接触过路由器定制的朋友可能会对OpenWRT的系统定制有过研究,Yocto与Openwrt的编译系统相比,显得更加的强大。它是一个高度可配置的嵌入式Linux的整合编译环境。开发人员可以比较方便的定制目标嵌入式设备所需要的Linuxkernel、各软件包。Yocto将会自动将所需要的软件包进行代码下载、编译、打包动作,直接产生可以烧录进目标系统的镜像文件。
在IntelGalileo软件下载页面[1]中提供了基于Yocto编译系统的Galileo的所有软件源代码。按照文档操作,即可自己编译出前面所提到UEFI固件、Grub、用于SPIFlash的Linux和在SD卡中运行的完整版本的Linux镜像。
那么为什么要去自己定制Linux呢?原因有很多,比如希望让Galileo支持更多的硬件设备,例如让它识别你的3G上网卡、连接Kinect等等,亦或你希望在Linux中增加更多的软件包,比如希望运行Apache服务器。这是,只需要按照Yocto的配置过程定制系统即可。
图:基于Yocto的IntelGalileoBSP代码目录结构
图:配置IntelGalileo所使用的LinuxKernel
5.3为Galileo增加显示器、键盘等外设
这里以最普遍的各类USB设备为例,由于在IntelGalileo上的USBHost是micro-usb插座,标准的USB插头没法直接连接,所以首先要准备一条micro-usbOTG线:
图:准备一条micro-usbOTG线用于连接USB外设
此外,如果需要连接多个USB设备,则可以使用USB集线器。
5.3.1外接USB显示屏用于显示画面
IntelGalileo的一个遗憾之处在于没有提供用于连接显示器的VGA、DVI、HDMI等视频输出接口。这给一些应用和调试带来不便,似乎这样就没法运行Windows的系统了。
不过我们还有别的办法来实现让Galileo显示画面,这里我使用的是RoboPeak迷你USB显示器[15],通过修改Galileo的内核增加对应的驱动支持,可以让Linux的命令行和X图形界面在USB显示器中显示:
图:使用USB显示屏为IntelGalileo增加视频输出能力
5.3.2外接鼠标键盘
在增加了视频输出后,很自然的就是尝试给Galileo配置鼠标和键盘等输入设备了。在Intel提供的Linuxkernel配置中,并没有加入对鼠标键盘等HID设备的支持,这需要我们在menuconfig中增加。
图:在LinuxKernel的Menuconfig加入对USBHID设备的支持
在加入了对应配置后,就可以把IntelGalileo变成一台真正意义上的PC,当然没中不足的是它暂时还没有运行Windows,这将是下一步的工作。
图:给Galileo配置鼠标键盘,变成完整的PC
5.3.3使用USB摄像头
对于希望使用IntelGalileo进行计算机视觉处理的应用,则需要增加对应的USB摄像头驱动。一般目前市面的USB摄像头多为采用UVC协议规范的芯片,而一些老式的摄像头或者特殊摄像头在Linux下则采用GPSCA驱动框架。同样在,在Kernel的menuconfig中增加对应的驱动即可:
图:增加对USB摄像头的支持
5.4其他可能性讨论
5.4.1增加运算性能
由于IntelGalileo的主频只有400Mhz,这的确给很多应用造成了不变。对于视觉运算而言,400Mhz的主频对于很多应用都显得捉襟见肘。
不过Galileo提供了高速的PCI-E接口,我们可以利用该接口与外部更加强劲的运算系统建立高速互联。最具代表的就是通过PCI-E与FPGA进行连接,通过FPGA实现视觉计算、密码学处理、人工神经网络等需要高速并行性的算法,并使用Galileo的Quark芯片实现高层的控制逻辑来协调运算。
在传统的PC中,使用PCI-E接口的FPGA加速卡与CPU进行协同加速运算是比较常见的做法,借助同样是x86平台的优势,使用IntelGalileo可以将以往需要采用传统PC的FPGA加速项目移植到更加小、低功耗的环境下。这可以在移动机器人、飞行器等领域具有很大的应用前景。
5.4.2运行其他的操作系统
目前的IntelGalileo只能运行Linux,并且由于自身并没有视频输出接口,Intel默认的Linux配置是没有X图形系统的。不过作为一个x86平台,大家自然会希望Galileo运行其他的操作系统,如Windows。
在前面的分析中,我们已经看到Galileo的构架和软件支持完全允许让Windows运行在其中。这或许最终没有什么实际价值,但也是值得尝试的事情。至少作为geek来说,这样做可以加强“我可以”的信条。此外,运行Windows也可以让Galileo驱动一些尚只有Windows驱动支持的外设,比如一些打印机设备、银行U盾等。