物联网设备,因为要连接的网络和应用的多样性,大大增加了软件开发的难度和复杂度,开发方式也会和以前的嵌入式设备有很大的不同。目前主流的软件开发模式是什么?我们以一个典型的MCU WiFi/NB-IoT SoC架构的物联网设备的开发为例(图1)。开发者需要为特定的无线SoC/模块开发MCU的TCP/IP协议层之上的应用,包括MQTT、HTTP、Web Socket、业务应用等等。一旦用户更换了无线芯片或模块,由于网络协议和编程接口的不一致,上层应用需要大幅度改动甚至重新启动。
(图1:当前的软件开发模式)
而如果采用RT-Thread操作系统的SAL抽象层(图2),开发人员就不需要考虑系统采用什么样的无线模式、无线芯片,甚至是什么样的模块和接口,只需要调用上层API接口就可以实现一次性开发和跨平台使用。不仅如此,RT-Thread支持的各类物联网软件包都可以轻松“即用”。
(图2:使用SAL的软件开发模式)
从上面可以看出,RT-Thread这次发布的SAL对物联网行业意义重大,真正实现了系统(MCU无线芯片/模块)层面的跨平台软件开发和兼容,也叫ACS(Application Cross System),后期的应用扩展将变得易如反掌。
SAL简介
SAL,Socketabstraction layer的缩写,意思是套接字抽象层,介于网络硬件层和应用层之间。它的前身是RT-Thread的DFS_NET组件。由于对lwIP的依赖和自身的局限性,RT-Thread几乎对其进行了重构。随着SAL的诞生,RT-Thread可以无缝接入各种网络芯片或模块(例如W5500/CH395等自带协议栈的以太网芯片,带AT指令的WiFi模块,GPRS模块,NB-IoT模块等。),大大提高了RT-Thread在物联网领域对不同网络硬件的兼容性。其主要特点如下(图3):
各种网络协议栈的抽象统一接口
提供标准BSDSocket API
统一fd(文件描述符)管理模式
(图3:网络框架图)
下面将从与SAL相关联的模块的角度来解释SAL的功能和实现:
应用层:应用层在做网络开发时可以直接使用SAL提供的BSD Socket API接口。接口层的统一抽象使我们的开发者能够快速应用许多支持RT-Thread提供的BSDSocket接口的物联网软件包。让我们的用户在网络编程中大大提高软件的复用性。
SAL实现层:这一层位于SAL的底层,为不同的模块、芯片或协议栈与SAL框架相连接。接入完成后,应用层几乎不需要关心真实的网络接入方式,减少了应用层和底层的耦合。
DFS文件系统层:SAL和DFS紧密结合,Socket描述符和fd文件描述符可以完全对应,实现了对fd的统一管理。应用层可以通过读/写和轮询/选择接口操作Socket套接字,更兼容POSIX标准。
应用场景:
用于对接AT指令的网络模块
当使用这些at模块进行网络开发时,不可避免地会在我们的应用程序代码中耦合许多与模块相关的AT通信代码。这也将导致不能重用以前使用标准BSD插座开发的组件。
有了SAL,我们只需要按照AT模块的指令方式实现SAL的对接接口(RT-Thread已经提供了常用模块的实现,比如乐心的ESP8266,移动很远的M26),上层应用就可以愉快的进行Socket编程了。
只是提一下,RT-Thread的AT组件具备以上功能,即将发布,敬请期待.
用于对接内置协议栈的网络芯片
随着W5500/CH395等网络芯片的日益普及,我们的MCU不需要运行网络协议栈,大大减少了MCU的资源占用。但是,它有与AT模块相同的问题。如何才能保证应用层仍然使用标准Socket进行简单编程?让萨尔解决这个问题。SAL已经构建了适应这些芯片的轮子,这将方便我们所有使用RT-Thread W5500/CH395的开发者。
非lwIP TCP/IP协议栈
在某些特殊领域,lwIP可能无法满足我们用户的要求。取代TCP/IP协议栈是必然的。正是因为有了SAL帧,新的协议栈只有对接后才能被上层应用安全使用,之前的代码也可以重用。
SocketCAN
Socket CAN作为Linux上CAN编程的一种方式,简单易用,易于编程。很多用户也想在RT-Thread上实现Socket CAN编程,这时候就需要SAL上场了。我们只需要在底层使用RT-Thread CAN设备就可以实现SAL框架对应的接口。
从DFS_NET迁移到SAL的指南
最初的DFS_NET配置位于:RT-Thread ComponentsDevice Virtual File System。
现有的SAL配置位于:rt-thread componentsnetworksocket抽象层。
与迁移相关的步骤如下:
确定在上一个项目中RT_USING_DFS_NET选项是否打开。如果它处于打开状态,则需要进行迁移。
RT_USING_DFS_NET选项在添加SAL组件后被放弃,取而代之的是SAL_USING_POSIX选项。如果需要迁移,请在ENV tool中打开上述SAL配置选项。
保存配置并退出ENV工具,以重新生成项目并完成迁移。
标签:SAL网络模块