标题：Hello China操作系统
Hello China操作系统简介
Hello China是一个面向高端嵌入式应用的操作系统，由系统软件爱好者利用业余时间开发。该操作系统主要面向基于x86 CPU的IBM兼容PC机和基于ARM处理器的高端嵌入式平台，具备完全的自主知识产权，目前已发展到V1.75版本。该版本目前具备比较完善的内核、文件系统（FAT32/NTFS）、图形用户界面、网络协议、模块化支持等功能。
秉承模块化、高可靠、快速响应的设计理念，Hello China具备可灵活裁减的模块化体系结构。可采用运行时配置和编译时配置两种方式，对操作系统的内核进行裁减和重组，以满足目标系统的应用。所谓运行时配置，是指通过一个配置文件（MODCFG.INI文件），告诉操作系统在启动时加载那些模块。凡是在配置文件中指明的模块，操作系统在启动时就会加载，否则不予加载。比如GUI模块、网络模块等，都可通过这种方式动态加载和卸载。另外一种配置方式是编译时配置，即通过配置内核源代码的编译选项，可以包含或踢出某些功能模块，比如文件系统模块、设备驱动程序模块、虚拟内存管理模块等。这是一个两层次的模块化配置模式，可使得Hello China的内核尺寸灵活变动，所占用的资源也灵活伸缩，以适应特定的硬件结构。
Hello China的内核支持多线程、动态内存分配、完善的设备管理架构、完善的线程同步机制等功能，支持抢占式线程调度，支持基于向量的硬件中断模型。其文件系统可支持FAT32文件系统，支持NTFS文件系统的读取功能。也可通过扩展支持其它文件系统，比如DCFS、基于iNode的Linux操作系统文件系统等。其GUI模块采取基于窗口和消息驱动的设计机制，提供了类Windows API的GUI编程接口，对Windows API熟悉的应用程序开发人员可很容易的编写Hello China应用程序。其网络模块支持较为完善的TCP/IP协议栈，但同时剔除了TCP/IP协议中的一些相对较少用到的功能，比如带选项的IP、IP报文分片等功能，以使得整个协议栈紧凑可靠。当然，Hello China提供了完善的设备驱动程序架构，可随时扩展驱动程序以增加其功能。
Hello China操作系统运行截图
下面是Hello China V1.75版本的一些运行截图：
  GUI模块主屏幕  Hello China应用程序运行截图
Hello China的开发环境
Hello China V1.75版本及之前版本的核心模块，是在Visual C++ 6.0开发环境下开发完成的。其引导模块和部分驱动程序，是用汇编语言开发，并使用NASM编译完成的。V1.75版本的Hello China，其内核绝大部分是由C语言编写。据初步统计，核心模块的代码量为5万行。在PC上的引导程序，大致有500行左右的汇编代码。
为便于移植到非PC平台，后续版本的Hello China，将考虑移植到GCC开发环境上。但是Hello China的设计思路和应用编程接口，将保持不变。
Hello China的源代码完全公开，其下载地址，可从其官方blog时实获取（连接请参考“扩展阅读”部分）。
Hello China的应用程序开发接口
Hello China V1.75版本提供了上百个系统调用，应用程序开发者可通过调用这些系统服务，来开发基于Hello China的应用程序。在应用程序开发过程中，程序员只需要在程序源代码中包含Hello China提供的头文件（HCNKAPI.H），同时在连接的时候，把HCNLIB.LIB作为库文件即可，无需把全部Hello China源代码都包含到程序项目中。这与Windows和Linux等通用操作系统的开发过程类似，但是与传统的嵌入式操作系统开发模式不同。传统的嵌入式操作系统开发模式，一般是把操作系统的源代码也要包含到项目中。
应用程序代码与操作系统核心代码能够完全分离，是因为系统调用机制的存在。系统调用机制虽然简化了应用程序开发过程，也使得操作系统与应用程序完全独立，但是却降低了系统执行效率。因为系统调用涉及到CPU执行上下文的切换等动作，消耗了一些不必要的CPU资源。Hello China也支持应用程序与操作系统“代码级集成”的开发机制，只要取消系统调用机制即可。这可提升系统整体运行效率。
Hello China提供的API接口，与Windows提供的API函数有“几分相像”，这主要是为了便于程序员能够快速熟悉Hello China的开发过程。下面通过一个代码片断，说明这种相似性：
DWORD HCNMain(LPVOID pData)
{
//HANDLE hFrameWnd = (HANDLE)pData;  //pData is the handle of screen window,it is all application's parent window.
MSG msg;
HANDLE hMainFrame = NULL;
__WINDOW_MESSAGE wmsg;
//Create hello world's window.
hMainFrame = CreateWindow(WS_WITHBORDER | WS_WITHCAPTION,
"CPI change in percent statistics for year 2010",
150,
150,
600,
400,
StatWndProc,
NULL,//hFrameWnd,
NULL,
0x00FFFFFF,
NULL);
if(NULL == hMainFrame)
{
MessageBox(NULL,"Can not create the main frame window.","Error",MB_OK);
goto __TERMINAL;
}
//Message loop of this application.
while(TRUE)
{
if(GetMessage(&msg))
{
switch(msg.wCommand)
{
case KERNEL_MESSAGE_TIMER:
wmsg.hWnd = (HANDLE)msg.dwParam;
wmsg.message = WM_TIMER;
SendWindowMessage(wmsg.hWnd,&wmsg);
break;
case KERNEL_MESSAGE_WINDOW:
DispatchWindowMessage((__WINDOW_MESSAGE*)msg.dwParam);
break;
case KERNEL_MESSAGE_TERMINAL:  //Post by PostQuitMessage.
goto __TERMINAL;
default:
break;
}
}
}
__TERMINAL:
if(hMainFrame)
{
DestroyWindow(hMainFrame);
}
return 0;
}
HCNMain函数与Windows的WinMain函数相同，是整个应用程序的入口。在这个函数的开始处，首先调用CreateWindow创建一个窗口，然后进入一个消息循环。这个过程与Windows的编程机制类似。在创建窗口的时候，也需要指定一个窗口函数，所有用户输入等的处理，都是在窗口函数中完成的。
当然，Hello China也支持完全字符模式的应用程序，这时候就无需创建窗口，但是必须有一个消息循环，如果你想要处理用户输入的话。当然，如果不处理任何输入，比如只打印出“Hello world”，则无需消息循环，只需要一个HCNMain函数即可。
Hello China的应用场景
Hello China定位于高端智能嵌入式应用，其应用场景非常广泛。比如，传统的基于PC系统的固定应用，比如LCD显示器控制、银行ATM机、刷卡机等，都可以基于Hello China重新开发应用，而这种应用场景上的应用程序，以前都是基于Windows开发的。切换到Hello China以后，可大大降低成本，同时避免Windows系统的被侵入风险。
在云计算如火如荼的今天，云终端将是云计算基础架构的制胜环节，而云终端操作系统也是Hello China的应用领域。实际上，Hello China的V2.0版本（正在开发中），就是针对云终端进行定制开发的。该版本集成RDP协议功能，可通过远程桌面连接到云服务器，作为轻量级的云终端。这对云服务运营商来说，将是一个增加用户黏性、提升整体竞争力的整体解决方案。
另外的一个应用是物联网的感知层控制终端。在物联网的感知层，控制终端（或者叫做网关）把各类传感器收集的数据集中存储，然后转换成IP报文上报给服务器端。这个网关的作用非常关键，需要完成本地数据缓存、传感器的临时控制、协议转换、可视化的传感网配置等功能，而Hello China的体系结构和定位，与物联网控制终端的应用场景非常吻合。物联网控制终端也是V2.0规划的核心功能之一。