你觉得这篇文章怎么样? 帮助我们为您提供更好的内容。
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
你觉得这篇文章怎么样?
Intel 对开发套件市场来说并不陌生 – SD 卡大小的 Edison (833-0891) 就是最好的例子 – 但 Joule 略有不同,这次,Intel 将目标扩散到了不同的开发群体。第一条重要线索就是价格 – 在大多数网站中,Intel® Joule™ 570X (125-9541) 的价格大约都是深受大众喜爱的 Raspberry Pi 3 (896-8660) 基准开发套件的十倍。
那么,我们为什么要花这么多钱购买 Joule 呢?简单回答就是:外形紧凑,处理性能强大。其微型模块上系统 (SOM) 只有 24mm x 48mm 大小,但却囊括了众多功能,如支持 Intel® RealSense™ 技术的 4K 视频捕获和显示功能。该产品允许设备捕获景深 (DOF) 信息,让应用对环境及其中的任何对象都有一个空间感。我们很容易就能想象出它在以下领域的作用多么强大:
- 自动驾驶车辆、无人机和机器人
- 汽车行业的驾驶员辅助应用
- 增强现实和虚拟现实领域
- 工业物联网
…以及实现对当地环境的三维空间感认识会非常有用的许多其他应用。
特点
Joule 模块还有其他型号吗?是的,该模块实际上有两个型号,其功能列表如下所示:
Intel® Joule™ 570X 模块的功能:
- 高性能 64 位 1.7 GHz 四核 Intel® Atom™ T5700 处理器,突发频率可增强至 2.4 GHz
- 4GB LPDDR4 RAM 和 16GB eMMC 内存
- Intel® 高清显卡,支持 4K 视频捕获和显示
- 支持 MIMO 和蓝牙 4.1 的 802.11ac Wi-Fi
- USB 3.0、MPI* CSI 和 DSI 接口,以及多个 GPIO、I2C 和 UART 接口
- 基于 Linux 的操作系统,专为物联网和智能设备而定制
- 增强对 Intel® RealSense 摄像头和数据库的支持
Intel® Joule™ 550X 模块价格略低,其功能如下:
- 高性能 64 位 1.5 GHz 四核 Intel® Atom™ T5500 处理器
- 3GB LPDDR4 RAM 和 8GB eMMC 内存
- Intel® 高清显卡,支持 4K 视频捕获和显示
- 支持 MIMO 和蓝牙 4.1 的 802.11ac Wi-Fi
- USB 3.0、MPI CSI 和 DSI 接口,以及多个 GPIO、I2C 和 UART 接口
- 基于 Linux 的操作系统,专为物联网和智能设备而定制
- Intel® RealSense 摄像头和数据库支持
所以,可以说 Intel® Joule™ 将目标扩散到了一群寻求构建更多依赖本地自主智能的应用,而非一切都依赖云处理的应用的开发群体。
Intel® Joule™ 570X 开发人员套件
开发人员套件将 Joule 模块安装在扩展板上,让用户可以迅速访问:
- USB 3.0(1 个 A 型端口和 1 个 C 型端口)
- Micro HDMI
- Micro-SD
- 2 个 40 引脚输入/输出连接器 (3.3V)
- 板载端口,用于 USB 串行调试
- 2 根 Wi-Fi 天线
- RTC 电池连接器
- 风扇管座
…并随附散热器和安装齿轮、天线(每根 Wi-Fi 天线一根)、一张 microSD 卡和一根 USB C 型至 A 型电缆。但是,您还需要有一些其他物品才能运行新的开发套件。
您需要提供的物品如下:
- LPS 或 2 级输出额定值 12V、3A(最小)套管插孔电源
- 插入式到插入式、微型 HDMI 到标准 HDMI 电缆
- 用于开发板串行通信的 Micro USB(B 型)到 USB(A 型)电缆
- 用于连接键盘、鼠标和 U 盘的有源 USB 3.0 集线器,而开发板上只有一个 USB A 型连接器。
开发套件中不含这些物品,因此,请在订购 Joule 开发套件的同时订购您手上没有的这些的物品,这样就可以在您收到电路板后免去一些抱怨和烦恼 - 纯属个人经验,仅供参考...
操作系统
当您收集好所有套件并准备开始第一次运行开发板时,您会发现可以选择 Joule 的操作系统。
- Ubuntu 16.04 LTS 桌面版或核心板
- Windows 10 IoT 核心版
- Ostro™ Project Reference Linux for IoT
Ostro™ Project Reference Linux for IoT 采用 Yocto Project 工具构建,预安装在开发板上。
在这个例子中,我决定与自己信赖的 Raspberry Pi 3 做一些直观比较,这里有一张 Ubuntu Mate for Pi 的图片,所以使用 Ubuntu 桌面版系统看起来合情合理。
对于 Intel® Joule™ 来说,这意味着我需要刷新 BIOS 并创建可启动 U 盘或 microSD 卡(用于安装 Ubuntu 16.04)。使用可启动 microSD 卡时,我遇到一些问题——通过此设备首次启动时总是半途而废——我还没花时间进一步调查。所以,为了继续操作,我用了一个插在有源 USB 集线器中的可启动 U 盘。第二种设置如愿奏效了,我终于能顺利安装 Ubuntu 桌面版了。
基准对比
经过些许调整,让 Ubuntu 桌面版发挥出我所希望的性能后,我想是时候找出相比 Raspberry PI 3,使用 Joule 所带来的量化性能提升了。为此,我返回了 Linux 基准对比收藏夹 sysbench。
Sysbench 是一款基准套件,最初由 MySQL 开发人员创建,用于检测数据库系统性能,还能让我们迅速了解自己现用系统的性能。
要在两块开发板上都安装此套件,我们可以打开一个终端并键入:
$ sudo apt install
sysbench
由于可以执行的测试和组合非常之多,因此,我决定进行 CPU 性能测试和内存传输测试,了解基础性能。
CPU 测试
Sysbench CPU 测试通过将某个设定数字(默认为 10000)除以 2 到该数字平方根之间的所有数字,计算出小于该数字的所有质数。如果有数字得到的余数为 0(即非质数),系统将会移动至下一数字。无疑,这会重点强调相当有限的 CPU 数字,但却让您了解它处理常规数字运算的能力。
由于 Intel 和 Broadcom 都是四核处理器,因此,先后使用单线程和四线程完成两个测试非常合理,您可藉此了解工作负荷的分配如何影响每个处理器的整体性。我还测试了最大值 20000,让处理器变热一些,看看会发生什么情况。
测试 1
这是默认设置:单线程,最大值 10 000。
$ sysbench –test=cpu run
Raspberry Pi 结果
Intel® Joule™结果:
我们要看的关键数字就是“Test Execution Summary”(测试执行摘要)下的“total time”(总时间)。Joule 的完成时间为 8.23 秒,而 Pi 的时间为 158.12 秒,结果非常令人信服。
测试 2
这里,我们将使用 4 个线程完成相同工作,让 4 个核都参与测试。
$ sysbench --test=cpu --num-threads=4 run
Raspberry Pi 结果
Intel® Joule™结果
正如我们所料,两个处理器的性能都提升了 4 倍左右,Joule 的完成时间为 2.31 秒,而 Pi 的时间为 39.50 秒。
测试 3
这里,我们加大了赌注,运行高达 20 000 的质数,并延长了两个处理器的运行时间,让机器变热。
Raspberry Pi 结果
Intel® Joule™结果
我在这个实验中使用了一个温度读数脚本,记录 Pi 的发热情况。我将此脚本附在本文最后,供感兴趣的人查看。在这组测试中,我将 Raspberry Pi 散热器放在 Broadcom 处理器顶部,试图让 Pi 散热均匀一点。即便如此,由于 Pi 的性能远低于 Joule,且工作负荷时间更长,所以结果不容乐观,这导致 Pi 变得更热:在时间最短的测试中,Pi 的速度慢了 17 倍;在时间较长的测试中,速度慢了近 20 倍。
虽然这些测试只是为了让我们大致了解各个处理器的性能,但如此大的差异,让我们顺理成章地得出,在原始数字运算能力方面,Joule 的更高价格是物有所值的。
内存测试
当然,并非只有数字运算能力会影响到处理器的整体性能。在大多数应用中,系统需要不停地移动正在处理的数据,因此,内存带宽是影响性能的另一个因素。
Sysbench 内存测试分配一个缓冲区,然后继续在缓冲区中读写每个数据字位置,直至缓冲区空间用尽。然后,系统将重复此测试,直到内存空间用尽。
为了给比较对象提供相同的传输量,我们使用 1 MB 缓冲区并运行 2 GB 总内存:
$ sysbench –test=memory –memory-block-size=1M –memory-total-size=2G –num-threads=4 run
Raspberry Pi 结果
Intel® Joule™ 结果
Raspberry Pi 达到了 2.5Gb/s 的出色传输速度,但却再次失利于 Joule 11Gb/s 的高速度。
我们还可以应用其他测试,如文件传输速度,但我认为你们现在已经掌握了关键所在。结果就是,相比 Raspberry Pi,Joule 的价格真的不高 – 它们差别巨大,并且 Joule 的性能等级使其具有较高的价格竞争力。
让我们利用 Joule 来完成一些有用的工作。我将在接下来的一篇文章中讲述 Joule 的“超能力”– 图像处理 – 其中,我会详细描述 RealSense 摄像头。今天,我要看的是它在发挥偏向“通用计算”的功能时是多么轻松,因为了解自己的开发套件具有多种用途,的确不错。
无线中继站
下一次,您如果想在花园中阳光特别充足的地方发送电子邮件,请使用 Joule 作为无线中继站来扩大家用 Wi-Fi 的覆盖范围。您可以通过轻击脚本(需要设置几个必要条件),将它设置为在需要时随时运行。
在此设置中,您需要一个可与 Joule 上的内置 Wi-Fi 配合使用的 USB Wi-Fi 适配器。我用的是超便宜的 Edimax EW-7811Un USB Wi-Fi 模块(我将它放在抽屉里,已经积满灰尘),但如果您需要更快的连接,可以使用支持 802.11ac 的 USB 3.0 Wi-Fi 适配器 – 只要保证它具有官方 Linux 驱动程序,即可进行便捷操作。我还使用一个 USB-C 到 USB-A 适配器,以便能够在开发板上使用 USB-C 端口。如果您选择使用 USB 3.0 Wi-Fi 适配器来获得更高的数据速率,这会特别有用。
我们将使用几个标准 Linux 工具来驱动硬件:hostapd,可将 Wi-Fi 适配器配置为无线接入点;dnsmasq,可使用接入点在客户端上运行 DHCP 和 DNS 服务。
入门
在执行任何进一步操作之前,确保 Joule 的板载 Wi-Fi 适配器确实能够支持我们所需的这种接入点操作,可能是个好主意。要了解是否可行,我们可以打开终端并使用以下命令:
$ iw list
这将为我们列出 iw 能够找到的各个无线接口的属性列表,并且冗长输出顶部附近将如下所示:
我们希望在“Supported interface modes:”(支持的接口模式:)下看到 AP – 这里确实有 AP。在“Supported Cipherss”(支持的密码)上面,我们看到了 TKIP 和 CCMP,这意味着接入点将能够使用 WPA2 加密功能来阻止邻居登录并窃取我们的带宽。
驱动程序
Edimax USB Wi-Fi 适配器相当普遍,因此大多数 Linux 发行版中都包括一个即插即用驱动程序并不奇怪,并且这看起来效果相当好。但是,其中包含一个已报告的错误,它可使用 GitHub 上的开源驱动程序进行修复(这也是 Edimax 推荐的做法)。因此,为了确保一切顺利运行,请安装已修复的驱动程序。
首先,您需要安装 git 和 dkms,因为它们未预安装在我们的发行版本中:
$ sudo apt install git dkms
全部安装完成后,我们可以将驱动程序从 GitHub 克隆到我们的计算机上。我喜欢将此类程序放在单独目录下,确保界面整洁:
$ mkdir Projects
$ mkdir Projects/wifi
$ cd Projects/wifi
$ git clone https://github.com/pvaret/rtl8192cu-fixes.git
DKMS(动态内核模块支持)允许我们安装补充版本的内核模块。首先,我们可以将“修复程序”添加为 dkms 模块:
$ sudo dkms add ./rtl8192cu-fixes
然后,我们可以构建并安装驱动程序模块:
$ sudo dkms install 8192cu/1.10
…刷新模块列表:
$ sudo depmod –a
现在,我们可以将现有内核模块列入黑名单…
$ sudo cp ./rtl8192cu-fixes/blacklist-native-rtl8192.conf /etc/modprobe.d/
…禁用电源管理:
$ sudo cp ./rtl8192cu-fixes/8192cu-disable-power-management.conf /etc/modprobe.d/
最后,重启系统以加载新的驱动程序:
$ sudo reboot
如果之后使用ifconfig -a
, 则会看到系统已打开并运行崭新的网络接口:
准备好网络接口,实现最佳表现
虽然 hostapd 设置简单,但我们还要减少几个限制,以便简化设置过程。我们首先要考虑的是 hostapd 要求在 mac80211 框架上构建您的接口驱动程序。这让它可以使用 nl80211 用户空间实用工具,以便除工作站模式外,还能支持无线模式 – 在本例中,我们想要使用 AP 模式。我们可以输入以下命令,查看我们正在使用什么驱动程序:
$ sudo lshw –c network
我们会看到内置 Wi-Fi 接口使用 iwlwifi 驱动程序。我们可以使用驱动程序表了解 iwlwifi 驱动程序是否基于 mac80211,或者我们只需查看驱动程序的依赖关系:
$ lsmod | grep iwlwifi
这表明我们的驱动程序实际上基于 mac80211:
我们的另一个考虑因素就是,当 Ubuntu 网络管理器托管网络接口时,有一个错误会阻止 hostapd 进行初始化。要解决这个错误,需要从一开始就阻止网络管理器托管要用作 AP 的接口。幸运的是,这也很容易操作。网络管理器将会忽略网络接口文件中声明的接口。我们可以输入以下地址打开此文件:
$ sudo nano /etc/network/interfaces
您随后需要添加类似于下面的内容:
就我而言,我已经设置了接入点地址 (10.15.15.1),可以轻松将其与我的 ISP 路由器的接入点地址区分开来。我们还可以将接入点 MAC 地址(由 ifconfig 输出中的 Whaddr 值提供)声明为不需要托管,明确告知网络管理器忽略我们的接入点:
$ sudo nano /etc/NetworkManager/NetworkManager.conf
然后添加:
[keyfile]
unmanaged-devices=mac:xx:xx:xx:xx:xx:xx
将 x 替换为您设备的 MAC 地址:
如果您现在重启系统,应该会发现路由器的网络连接现在是通过您的 USB 设备而非内置 Wi-Fi 适配器完成的:
太棒了!我们的网络配置已经准备好了,可以开始安装软件,展现无线魔力了。
安装 hostapd
要创建接入点,我们可以通过以下命令安装 hostapdHuzzah! Now our networking configuration is prepared, we can get on and install the software that will do the wireless magic for us.
$ sudo apt install hostapd
安装完成后,我们需要配置接入点。首先,我们需要告知 hostapd 希望其使用的配置文件及文件存储位置:
$ sudo nano /etc/default/hostapd
在 DAEMON_CONF= 后的语言标记之间添加位置: /etc/hostapd/hostapd.conf
如果需要调试配置,也可以使用 DAEMON_OPTS 将守护程序的输出设置得更详细一点,进一步细化 config 文件:
现在,hostapd 已经知道了文件的存储位置,我们可以开始创建配置文件了:
$ sudo nano /etc/hostapd/hostapd.conf
这是最低配置。您将进一步了解接入点接受或拒绝什么内容,以及如何在 config 文件中设置加密文件。此注释详尽的 config 文件显示了所有可用选项,您应该会很好奇。
您可能会将“ssid”设置为想要的接入点名称。我已将硬件模式设置为“g”,让任何能使用 Wi-Fi 的功能都能使用此配置。我将加密设置为“WPA2”,并且只能使用 WPA2。您需要将“passphrase”(密码)设置为想要的接入点密码。
请注意,运行此配置时,hostapd 会因类似于下面的国家/地区代码而遇到麻烦:
..wlp1s0: interface state UNINITIALIZED->COUNTRY_UPDATE
这是由 CRDA - Central Regulatory Domain Agent(中央监管域代理)造成的。这不会影响 AP 的运行情况,因此,您可以像我一样忽略它.
接入点已准备就绪。现在我们需要将 IP 地址分配给连接至 AP 的设备。为此,我们需要 DHCP 并访问 DNS 服务器。
设置 dnsmasq
我们将 dnsmasq 用作 DNS 和 DHCP 服务器。要安装它,请使用以下命令
$ sudo apt install dnsmasq
安装完成后,我们需要设置另一个简单的 config 文件。我通常会先保存现有文件,然后再创建自己的文件,这样阅读时就更清晰了:
$ sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
然后创建我们自己的配置:
这也是最低配置,但对于我们来说已经足够。但是,如果您还想浏览其他选项,请查看初始 config 文件中的注释。
在此配置中:
server - 列出用于非本地查询的一个(或多个)公共 DNS 服务器。在本例中,我们使用 OpenDNS 和 Google 服务器。
no-hosts – 阻止 dnsmasq 使用 local/etc/hosts 文件查找 DNS。
dhcp-range – 是连接设备服务的服务器的 IP 地址范围。8h 表示连接主机为所提供 IP 地址提供 8 小时租赁时间。
dhcp-option 3, - 设备的新本地网络的网关地址。
dhcp-option 6, - 我们本地网络的 DNS 服务器地址。
日志便于查看各设备的运行状况。
将线程连在一起
既然我们已将软件全部设置完毕,那么我们现在只需要将流量从接入点路由至互联网即可。这可使用 iptables 防火墙规则来完成。我打算为此设置编写脚本,因为我不希望作为无线中继器启动 Joule,而是希望能够在需要时轻松将它打开:
#!/bin/bash
MONITOR_DEVICE=wlp1s0
OUTPUT_DEVICE=wlx80xxxxxxxxxx
# Catch ctrl-c for clean exit
trap ctrl_c INT
function ctrl_c(){
echo Killing AP processes...
killall dnsmasq
killall hostapd
}
echo Bringing up Access Point interface...
ifconfig $MONITOR_DEVICE 10.15.15.1/24 up
# Note that dnsmasq will already be running
echo Setting routing tables
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o $OUTPUT_DEVICE -j MASQUERADE
iptables -A FORWARD -i $MONITOR_DEVICE -o $OUTPUT_DEVICE -j ACCEPT
echo Starting Access Point...
hostapd /etc/hostapd/hostapd.conf -B
用于运行 hostapd 的 –B 选项可让它在后台运行。当它在您的终端窗口运行时,如果您希望了解它的实时状况,请忽略此选项。您需要使用 [Ctrl] [C] 来阻止该程序 – 并且我们已阻止了该程序,以便完全终止其他进程。
我们在这里做的事情就是一种叫做 IP 伪装的网络地址转换 (NAT) – 将接入点上的所有 IP 连接路由至 Joule 上的内置 Wi-Fi 适配器,从而让此适配器成为与路由器连接的唯一 IP 地址,并且传输至路由器的所有数据包均来自这一个数据源。此链接进一步诠释了 masquerade:这是旧文本,但很好阐述了当前发生的情况。
我们现在唯一要做的就是让脚本(我称之为 ap)具有可执行性并启动中继器:
$ chmod +x ap
$ sudo ./ap
您现在应该可以使用自己的接入点。如果您在 Windows 笔记本电脑上使用类似于 Wi-Fi Commander 的工具,则应该会看到接入点宣称其存在于频谱中:
我已过滤掉附近的其他(92 个)接入点,让图片变得更加清晰。我们还连接了 iPhone 等设备进行了测试:
我们现在已经连接上了,并且能够在路由器的正常覆盖范围外享受无线上网。如果您这样做,则可以使用“rk”脚本关闭一切连接。
结论
Intel® Joule™ 像市场上的许多低成本教育/开发套件板一样,趣味性很强。它还能轻松转变成许多同类应用,但不同之处在于,对于需要进行大量本地化处理以及云连接在实际应用中不可用或不受欢迎的实际应用,Joule 还可为应用提供非常强大的处理能力。
我已享受到 Joule 带来的种种优势,期望未来能够在一些其他领域见到它的身影。