标签:
经过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设备),同时优先级很高,导致网卡接收的报文不能被系统及时处理。这时候一旦接入一个真正的网络,大量的广播等报文,会迅速占满网卡缓冲区,进而引发缓冲区溢出中断。由于中断程序中没有清除该中断,导致中断循环引发,使得系统一直处于中断程序执行中,便产生了停止响应的现象。通过增加一个接收缓冲队列,该问题得到解决。同时基于该经验而增加的“高频中断扼杀”功能,也会对类似问题进行防范;
3. 另外一个实际问题,也是与网络相关。通过增加接收缓冲队列对接收的网络报文进行排队,在合适的时机,系统会处理该队列。但最开始的时候,缓冲队列并没有限制长度,每当网卡接收到一个报文,就会申请一片内存,把数据拷贝到内存中,并排到缓冲队列中。大多数情况下,这是没有问题的。但是在实际测试中,系统还是有偶尔无法启动的情况,甚至初始化时出现崩溃。从错误输出看,是由于内核内存耗尽引起。经深入分析,问题被发现。具体过程是,我们接入的网络,是一个庞大的企业广播网络,流量非常大。而USB初始化比较慢,一旦网络流量太大,会导致大量报文排队,进而导致内核内存耗尽,从而导致内核无法正常工作。基于此,我们限制了网络接收队列的长度,一旦超出一个固定的长度,则新进入的报文就会被丢弃。该机制有效解决问题。
虽然这些问题及解决办法,看起来很细小,但正是这些细节上的完善和优化,使得系统趋向稳定和成熟。在操作系统开发中,也是“细节决定一切”。同时,在定位和处理这些问题时,整个内核的代码,都会被重新审视和检查,这对内核来说,也是一种进一步的确认。虽然这些问题的原因很简单,但其定位过程却是痛苦和繁杂的,很多时候,需要把内核代码翻来覆去好几遍。相信处理过bug或问题的朋友深有体会。
作为物联网操作系统,HelloX将始终聚焦物联网领域的应用,为物联网量身定制一套最优的系统软件解决方案。我们认为,只有一个内核的支撑,是远远不够的。物联网和智能硬件的有效发展和壮大,需要更多技术的支持,比如人工智能,分布式计算,机器学习,等等。但一个稳定可靠和可扩展的物联网操作系统,是这些技术的最好生存土壤。后续我们在进一步完善内核的同时,将在这些领域进行探索和研究,并依托HelloX进行落地实现,真正构筑一套支撑未来网络的软件数字神经。
2015年已经过去,新的一年已经来临。整个物联网产业依然处于培育发展阶段,但前景逐渐明朗。我们的物联网操作系统项目,也越来越壮大和稳定。我们遵循“稳中有进,同步发展”的策略,与整个物联网产业的发展保持步调一致。借用习近平主席2016新年贺辞中的话,与朋友们共勉:“只要有付出,总会有收获。只要坚持,梦想一定会实现!”。希望在新的一年里,我们共同努力,一起坚持,最终实现民族基础软件腾飞的梦想。
HelloX物联网操作系统开源社区正在筹建,并取得了一些社会团体和企业的支持,欢迎有志于物联网和系统软件开发的人士加入。具体的细节,欢迎加入QQ群讨论:38467832
对HelloX和物联网操作系统的进一步信息,请关注blog:blog.csdn.net/hellochina15
标签:
原文地址:http://blog.csdn.net/hellochina15/article/details/50445716