系統介紹
秉承模組化、高可靠、快速回響的設計理念,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 V1.75版本的一些運行截圖:
開發環境
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 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定位於高端智慧型嵌入式套用,其套用場景非常廣泛。比如,傳統的基於PC系統的固定套用,比如LCD顯示器控制、銀行ATM機、刷卡機等,都可以基於Hello China重新開發套用,而這種套用場景上的應用程式,以前都是基於Windows開發的。切換到Hello China以後,可大大降低成本,同時避免Windows系統的被侵入風險。
在雲計算如火如荼的今天,雲終端將是雲計算基礎架構的制勝環節,而雲終端作業系統也是Hello China的套用領域。實際上,Hello China的V2.0版本(正在開發中),就是針對雲終端進行定製開發的。該版本集成RDP協定功能,可通過遠程桌面連線到雲伺服器,作為輕量級的雲終端。這對雲服務運營商來說,將是一個增加用戶黏性、提升整體競爭力的整體解決方案。
另外的一個套用是物聯網的感知層控制終端,即物聯網作業系統,這是Hello China作業系統後續主要面向的場景。與傳統的個人計算機或個人智慧型終端(智慧型手機、平板電腦等)上的作業系統不同,物聯網作業系統有其獨特的特徵。這些特徵是為了更好的服務物聯網套用而存在的,運行物聯網作業系統的終端設備,能夠與物聯網的其它層次結合的更加緊密,數據共享更加順暢,能夠大大提升物聯網的生產效率。一些典型的物聯網設備或個人消費電子設備,比如智慧型手環,物聯網協定轉換網關(比如把藍牙轉換為IP),監控攝像頭,各類感測器等,都可以運行Hello China作業系統。
最新進展
為了更好的體現”物聯網作業系統“的特徵,更加聚焦物聯網領域套用,”Hello China作業系統“已於2014年下半年,正式更名為”HelloX作業系統“。HelloX中的X可以代表任何東西。這樣就貌似有點打招呼的意思,比如“Hello,car”,“Hello,ring”…,通過這個作業系統,你能夠跟任何東西對話,符合物聯網的含義。英文的口號是“HelloX,through which you can talk to everything.”。
除了更名之外,在2014年,Hello China作業系統發布了最新的V1.77版本,增加了很多特性,比如:
1. 成功移植到基於Cortex M3的STM32 MCU上,在多塊開發板上進行了測試,性能穩定;
2. 成功完成lwIP協定棧到HelloX的移植,具備了完善的網路功能;
3. 成功完成一個WiFi協定棧(MR09)和有線乙太網協定棧的移植,能夠動態獲取IP位址,並訪問外網伺服器;
4. 基於PC的版本,也成功移植到VS2010等開發環境上,並完善和增加了檔案系統/GUI/可載入模組等功能,基本上就是一個功能完備的個人計算機作業系統了。
後續將聚焦物聯網領域套用,進行進一步的開發。