Linux 和物联网
我在半夜醒来,口干舌燥,视线模糊,摸索着找到我的 iPhone。我将拇指按在指纹扫描仪上,在昏暗的蓝光中,出于本能,我眯起眼睛看着屏幕,找到正确的应用程序,打开它,并查看室内环境温度和空气质量。事实证明我的鸡皮疙瘩在撒谎;温度非常舒适,并没有北极级别的寒冷,但我感觉就是那样。现在,我触摸一个虚拟开关,温暖的黄光照亮了我通往厨房的路。我慢慢地蹒跚走向水瓶,没有绊倒我的任何一只猫,喝了口水,然后安全地蹒跚回到床上。再次点击我的应用程序屏幕,灯光逐渐消失;我睡着了。
这就是我的现实,也是越来越多人的家庭中日益普遍的现实。唯一的区别?我的技术大多是自制的——当然,也有少数例外。
我们的家慢慢地但肯定地充满了小型、智能的小工具,这些小工具使我们对周围环境的控制更加强大和精确。这些工具帮助我们创建可定制、响应迅速的家庭环境,这些环境可以预测我们的需求并智能地适应我们的节奏。也许这些小工具甚至让我们有点被宠坏了,但最重要的是,它们帮助我们在环境中感到舒适并了解我们的环境。我们以前从未如此精确地以量化的单位了解我们的生活空间、工作空间和我们自己。智能家居告诉我们我们呼吸的空气、我们喝的水以及我们生活的温度和湿度,并警惕地保护我们免受陌生人或威胁。它们已成为我们自身在最佳方式上的延伸,自动化重要但平凡的任务,以便我们可以专注于更重要的事情,例如维护深夜的猫/人休战。
导致物联网的四个因素是什么情况让这种美好的现实得以实现?从我的角度来看,我认为以下四个因素是主要原因:
-
微小、廉价、节能但功能强大的处理器取代了旧的、更简单的微控制器。
-
云处理变得足够便宜,大小公司都可以访问和负担得起。
-
智能手机成为功能强大的多核计算机,几乎无处不在。
-
Linux 使启动一个可以在从烤面包机到宇宙飞船的任何设备上运行的智能应用程序变得非常容易,只需极少的努力,并且同样的 Linux 操作系统为后端云端提供动力。
让我们更详细地阐述一下。
微控制器
硅供应商已经大大改进了制造技术,以至于处理器中的每个晶体管现在都非常微小(14 纳米技术!)。他们通过他们的新型低功耗片上系统 (SOC) 系列将魔力变为现实,并将市场带到了一个芯片大小如同一张小邮票,成本为 2-7 美元,但仍然具有:
-
完整的硬件网络堆栈(即,内置的连接到互联网的功能)。
-
双核 ARM 系列处理器。
-
足够的计算能力来运行操作系统。
-
大量其他有用的功能,所有这些都由一块纽扣电池供电。
您所要做的就是将其放入一个封装中——手表、墙上的小工具、灯泡或您公司想要的任何东西——您立即“智能化”您的产品。这种奢侈(甚至在十年前都不可用)促使公司选择在其设备上使用真正的操作系统(即 Linux),并放弃使用更旧、更困难且效率更低的直接微控制器编程路径,即使用单个“永远”循环并在内部完成每个软件方面。
云
与此同时,像亚马逊这样的组织正在以合理的成本向任何人提供他们的云基础设施。这使公司能够运用难以想象的计算能力——仍然运行 Linux,请注意——而无需在购买、物理安装或维护他们可支配的数百台强大的处理机器上投入任何资金。一家只有两个人的公司可以为其客户带来需要密集计算能力的分布式服务;这在云计算时代之前将是一个完全的障碍(即使对于大型公司而言)。
智能手机
关于智能手机在我们环境“智能化”中的作用,没有什么可以补充的了。作为一个社会,我们很快适应了美观、直观的控制界面和快速的响应时间,它们已经成为我们日常生活中如此重要的一部分,以至于即使只是几个小时的分离,也会让大多数人感到赤裸。然而,许多人没有意识到的是,每部现代智能手机中都蕴藏着巨大的计算能力。仅举几个个人参考点为例:
-
1993 年:我的第一台电脑是一台 Intel 386 40MHz,配备了惊人的 8MB 内存、170MB 硬盘存储和一个 1MB 图形加速器。
-
2015 年:我的智能手机,三星 Galaxy,配备了 Qualcomm Snapdragon,具有四核 2.5GHz 处理器、2GB 内存和 32GB 快速闪存存储以及一个 32 管线 3D 硬件图形加速器。
回顾一下,仅查看 CPU 速度和内核数量,我的手机的计算能力大约是我桌面电脑的 250 倍。我甚至没有考虑到现在每部手机都包含的非常有用的附加功能——便携性、优雅的 UI、持续的连接以及精确的传感器,如 GPS、加速度计、陀螺仪、磁罗盘、环境光传感器和百万像素/高清摄像头。所有这些因素都是使我们的环境智能化和创建物联网概念的纯金。
Linux
Linux 是使物联网成为现实的最后一个组成部分——将所有事物粘合在一起的粘合剂。你问怎么做?好吧,让我们看看一个典型的产品,并尝试了解 Linux 如何贡献和影响开发的每个步骤。
让我们从端点开始——可穿戴设备或家用小工具。它通常在内部隐藏着高端或低端的基于 ARM 的 SOC。(考虑到即使是低端微控制器也能够运行小型操作系统,可以安全地假设这个也可以。)现在,作为一个公司,以下哪项听起来更容易:a) 从头开始构建一个原始的软件环境,包括任务调度、内存管理、外围设备访问,支持多种技术(例如,I2C、SPI、SDIO 等),并创建您自己的网络堆栈实现,包括各种密码学解决方案以支持安全套接字层(SSL,几乎无处不在的互联网安全通信标准);或者 b) 采用一个免费的、不断发展和改进的操作系统,经过数十亿次的测试,提供所有这些以及更多功能?显然,b 是明显的赢家。
Linux 的崛起多年来,Linux 已经成为如此完整的解决方案,以至于您需要找到一个令人难以置信的令人信服的论据来选择硬件操作系统的替代方法。Linux 内核不仅通用且易于调整和调整以完全满足项目的需求,而且它还对交叉编译友好;Linux 可以被移植到几乎任何给定的平台,并且作为操作系统,它在硬件资源方面可以非常低维护。这是一个内部构建的操作系统,旨在支持几乎任何可以想象的硬件布局或外围设备,虽然它不是完全的即插即用,并且肯定需要劳动力投入,但它已经为这样的工作做好了准备,并旨在使其尽可能容易。
让我们继续到链条的下一部分——云,Linux 的力量从不同的角度显现出来。现在,理想情况下,我们需要一个能够管理大量计算能力、一台机器上的多个处理器、高吞吐量网络堆栈的操作系统,如果您不介意,您能否为云基础设施的不同方面提供现成的强大解决方案?哦,您还能让这一切都免费吗?是的,这一切都是——您的操作系统就是同一个 Linux,但这一次,它被调整为满足您的服务器端需求,大多数公司需要的附加组件(例如消息队列、缓存、Web 服务器、数据库等)都免费提供,这要归功于开源社区。这真是令人难以置信的奇妙。
最后一部分是智能手机。在这里,它变得有点棘手——Android 或 iOS 手机、物联网解决方案和 Linux 如何连接在一起?的确,链接不太明显。(作为一个题外话,让我们快速指出 Android 实际上是 Linux!它是同一个旧的 Linux,顶部稍微抛光了一下,称为 Android 服务层。)
最主要的是,Linux 已经发展了一个广泛的开源社区,该社区创建和维护各种基础设施解决方案(如上面提到的那些),并且这些相同的解决方案也经过调整和移植以在移动环境中工作。为此,即使 Linux 本身不一定在移动电话上运行,但它的衍生产品和副产品通常也存在,从而简化了将智能手机集成到物联网生态系统中的过程。
Linux 的内在优势到目前为止,我已经讨论了处理器发展对 Linux 采用的直接影响,以及 Linux 作为在前端和后端/云端选择操作系统的因素的多功能性。然而,使用 Linux 还有其他方面可以使公司受益,并进一步促进物联网生态系统的普及。
首先,现成的解决方案可以帮助公司开发和部署解决方案,而无需重新发明轮子,这些解决方案在云端可用,并且适用于使用 Linux 的所有点。这意味着您的数百台云服务器和微小的智能灯泡可能都在为相同的目的使用完全相同的代码库——例如,消息解析或排队——从而节省资金、时间和人力。
其次,人力和技能组合也可以在不同的组件之间转移,前提是两者都运行 Linux。烤面包机的启动脚本和云数据库服务器的启动脚本需要完全相同的 Linux 系统管理技能,这意味着您的员工可以更有效率,并为系统的更多部分做出贡献。这使得不同团队之间的转移更容易,从而使工程师更快乐。虽然这听起来像是一个软性福利,但对于构建在 Linux 上的公司来说,这是一个非常严肃的优势。
最后,值得注意的是社区开发的优势。Linux 及其组件正在由一个庞大的社区开发、使用和维护。这是“大数定律”的一个典型例子,这意味着大多数错误最终将被检测到,并且(通常比预期更早)由作为天生免疫系统的社区修复。因此,开发的产品获得了更强大、更少错误的优势。
实际应用最近让我工作繁忙的事情之一是将不同的传感器集成到我们的产品中。传感器是棘手的小家伙;有些很简单明了,只不过是一个电阻器,它根据环境因素而变化。(想想受温度影响的热敏电阻或根据吸收的光量而变化的光敏电阻。)有些比较棘手,在使用之前需要特殊的机制基础,例如 I2C 或 SPI 总线连接的传感器。
虽然第一种传感器可以很容易地集成到任何地方,通常从内置的模数转换器读取值——这是大多数现代 SOC 上都存在的功能——但第二种传感器会让你抓狂,然后你才能强迫它与你对话——或者会,除非你的操作系统已经支持它。
举例说明:让我们看看其中一个更棘手的传感器的集成——Sensirion 的基于 I2C 的温湿度传感器。
该传感器的从设备地址为 0x70,我们将使用单个“给我们数据”命令字 0x5C24 来表示“给我们一个湿度样本,然后是一个温度样本”。
首先,让我们假设我们没有使用 Linux 并且“裸机”工作。有问题的 SOC 具有内置的 I2C 控制器——实际上,它有两个——并且该控制器由映射到物理内存的寄存器集合表示。通过它进行通信意味着及时更改这些值以使通信成为可能。但是,有一些曲折;在两个控制器之间复用了三个 I2C 总线,因为第二个控制器处理两个总线,并且每个总线上有多个设备。
以下是用于写入字节以从传感器请求温度的“简单代码”
mov r0, #CONTROLLER_BASE
orr r0, r0, #DEVICE_OFFSET
mov r1, #0x01
str r1, [r0, #PRESCALE_LOW]
mov r1, #0x01
str r1,[r0, #I2C_ENABLE]
mov r1, #0x04
str r1, [r0, #FMCTRL]
mov r1, #0xE0 // <-- slave address
str r1, [r0, #FMDATA]
mov r1, #0x5C //<-- first part of measurement command
str r1, [r0, #FMDATA]
mov r1, #0x24 //<-- second part of measurement command
str r1, [r0, #FMDATA]
mov r1, #0x0A
str r1, [r0, #FMCTRL]
(请记住,这是在等待确认并稍后读取实际输出值之前。)
简而言之,您必须自己完成所有事情并端到端地控制通信过程。作为奖励,它通常会完全搞砸您源代码的可读性。
现在,让我们看看在 Linux i2c 支持到位的情况下完全相同的示例(假设 I2C 设备有一个打开的句柄):
static char sample_cmd[] = { 0x5c, 0x24 };
ioctl(i2c_fd, I2C_SLAVE, 0xE0);
write(i2c_fd, sample_cmd, 2);
毋庸置疑,读取输出同样简单,这使得 Linux 成为此应用的明显解决方案。
展望未来我相信物联网不是一个转瞬即逝的趋势,随着低端处理器市场的持续改进和云计算价格的下降,我们将看到越来越多的解决方案在我们周围涌现。
我们的家是物联网采用的第一线,随着智能可穿戴设备的爆炸式增长,我们的身体是第二波浪潮。下一个画布将是什么?
未来十年的主要趋势将是互连设备的数量增加,填满我们周围的空间,也许还会利用一些绿色能源,因为此类设备的功率需求也变得越来越小。也许街道会变得智能且互连?我很容易想象路灯响应人类的存在并根据个人喜好进行调整(“我今天想在紫色的街道上散步。”),从而通过不照亮无人看管的街道来节约能源。或者我们可以看到更多与我们的汽车的互连互动,这种情况已经发生,但与潜力相比规模非常小。最终,我们将生活在一个非常精确地响应我们的需求和愿望的世界中,一个对我们的孩子和我们自己来说更安全的宜人空间。至于 Linux,无论作为首选的主要平台还是开发所有新解决方案的平台,它都将继续在这些进步中发挥关键作用。低端处理器很快就会变得非常强大,以至于裸机 Linux 将被 Android 取代,成为小工具的首选解决方案,但这不必担心;它仍然是同一个旧的 Linux,只是具有更多优势。
关于这一点,我必须结束了。我的猫饿了,我最后一次尝试制作智能喂猫器并没有好结果——对于喂猫器来说是这样。有些事情仍然需要手工完成,至少目前是这样,但我知道只要有 Linux,我在生活中的更大/非猫科动物项目中就会取得更大的成功。