物联网操作系统HelloX V1.79发布公告

  经过HelloX开发团队近半年的努力,在HelloX V1.78版本基础上,增加许多功能特性,并对V1.78版本的一些特性进行了进一步优化之后,正式形成HelloX V1.79测试版本。经相对充分的测试和验证之后,现正式发布。相关代码,已全部上载到github上(github.com/hellox-project/HelloX_OS),欢迎对HelloX感兴趣的朋友下载测试和试用,并进一步反馈问题。

  除继续保持V1.78所有特性之外,V1.79版本主要对下列特性进行了支持或优化:

  1. 支持完整的USB功能,包括对USB1.0/1.1(OHCI/UHCI)控制器的支持,对USB2.0(EHCI)控制器的支持,以及对USB3.0(xHCI)控制器的支持。同时,还支持符合HID规范的USB接口键盘和鼠标功能;

  2. 成功移植到基于Intel ATOM芯片组的MinnowBoard MAX开发板上。这包括对板载USB控制器和外设的支持,以及对板载千兆以太网芯片Realtek 8111的良好支持;

  3. 网络功能进一步增强。在TCP/IP协议栈和网卡驱动程序之间,插入了一个网络管理器的内核组件。在此组件基础上,系统可以同时支持多个网卡,以及多个网络层协议栈(比如同时支持IPv4协议栈和IPv6协议栈)。同时,可以通过扩展,方便的支持其它通信协议;

  4. 软硬件兼容性有了进一步改进。在硬件上,增加了对ARM,MIPS等RISC架构CPU的支持机制,增强了对PCI总线,CACHE,对齐等硬件特性的兼容和支持。在软件开发环境上,所有内核代码成功移植到基于Linux+GCC的编译开发环境;

  5. 以可加载模块形式,实现了对物联网管理平台的动态支持。开发者可以根据需要,实时在线更新物联网后台代码。基于这一套机制,完整实现了与中国移动OneNET物联网平台的对接和集成;

  6. 内核机制得到进一步增强和完善。内存分配算法效率更高,增加了内存对齐分配功能。实现了线程堆栈异常检测,高频异常中断扼杀,线程消息队列监视等保证内核安全和可靠的特性。同时内核启动时间大大提升,可在10ms级别内完成内核加载和初始化。

  开发团队中的Mr. Tywind Huang充分发挥其高超的编程技术和丰富的经验,主导完成了MinnowBoard MAX开发板的移植,Realtek8111网络驱动的开发,物联网平台集成开发等工作,以及其它一些测试或优化工作,在整个HelloXV1.79版本的开发中做出了重大贡献。在MrGaojie的持续努力下,内核代码成功迁移到Linux+GCC的编译开发环境。Mr. Erwin Wang则在GUI模块代码的规范化(C++修改为C),USB功能的诊断测试等方面,做出了大量工作。Mr Blade Luo基于HelloX的网络框架,移植了BSD IP协议栈,为高性能网络支持奠定了基础。同时,开发团队中的Mr Haojie和Mr Wangyu,在编码规范,内核优化等方面,给出了卓有成效的支持。HelloX讨论群组中的很多朋友,都对最新的版本进行了实际测试和试用,给出了很多改进优化建议,在此统一表示感谢。

  在HelloX开发过程中,我们始终坚持“稳定可靠,不留问题死角”为原则,所有代码都经过了详细深入的内部测试,并在实际网络环境中经受了大量考验。现举几个典型的例子:

  1. 为了对HelloX USB功能进行测试,我们反复采用USB盘引导,并进行持续的读写操作,曾经进行过连续三天的USB读写,没有出现任何异常。在这个过程中,我们用坏了四五块USB盘。为了测试对USB输入设备的支持,我们对一个USB鼠标进行了物理上的破坏,使得它可以以最高频率自动连续的进行输入。我们把它接到运行HelloX的笔记本电脑上,运行了48个小时,无任何异常;

  2. 所有的矛盾和问题,都出现在资源紧张的情况下。这在Realtek 8111网卡驱动的开发过程中,表现得尤其明显。最开始的时候,网络功能单独开发,没有与USB功能集成在一起。这时一切正常。但当把网卡驱动和USB功能集成到一起的时候,问题出现了。最开始的问题是,一旦接入到网络(一个实际的企业网络),MinnowBoard MAX单板就无法完成启动,停在USB初始化过程中。我们几乎查看了所有的代码,包括网络代码,USB代码,内核调度程序,内存分配,等等,都没有发现问题。后来,在Realtek 8111网卡驱动的中断处理程序中,增加了一行输出代码,发现了问题。原来中断处理程序漏了一个条件判断,这个条件在网卡的接收缓冲区溢出时会引发。因USB初始化较慢(要扫描USB设备),同时优先级很高,导致网卡接收的报文不能被系统及时处理。这时候一旦接入一个真正的网络,大量的广播等报文,会迅速占满网卡缓冲区,进而引发缓冲区溢出中断。由于中断程序中没有清除该中断,导致中断循环引发,使得系统一直处于中断程序执行中,便产生了停止响应的现象。通过增加一个接收缓冲队列,该问题得到解决。同时基于该经验而增加的“高频中断扼杀”功能,也会对类似问题进行防范;