知識文章
車規作業系統QNX介紹
車輛中心 研究發展處 王毓翔
QNX是商業類Unix即時作業系統,主要針對嵌入式系統市場,QNX的應用範圍相當廣泛,以汽車領域而言,目前全球有超過250種車型使用QNX系統,包含PORSCHE、BMW、Mercedes-Benz、Audi…等高階品牌(圖1),另因其優越的效能,QNX也常用於需快速反饋的汽車中控系統或儀表板(圖2)。除了汽車領域,QNX亦積極與通訊領域、軌道交通、醫療器材、航空與航太領域等各大公司合作,並扮演著關鍵角色。
圖 1 QNX車輛合作廠商
來源:QNX Software Systems
圖 2 QNX中控畫面展示
圖片來源:QNX Software Systems
QNX具微內核(Microkernel)、模組化(Module)等特點,並以訊息匯流排(Message bus)傳輸的嚴格即時作業系統(Hard Real-time OS)為基礎,架構如圖3所示。其中,「微內核」指的是QNX核心,體積小巧且運行速度快,提供四種服務包含:任務排程、行程間通訊、底層網路通訊與中斷處理,均為QNX內核最重要的功能;而「模組化」包含:應用程式、OS服務、驅動程式皆分類為使用者階段的功能,並被設計為獨立的模組。
圖 3 QNX架構示意圖
來源:QNX Software Systems
QNX系統的開發者可以根據硬體設計選擇是否要載入特定的服務與功能,且不用另外去修改QNX的核心,因此QNX的嵌入式作業系統可以設計得非常小,同時有相當好的效率與完整的功能呈現。關於訊息匯流排,意即QNX內核中的行程間通訊,各服務會經由特定的函式來傳輸訊息,保障各程序能夠擁有互相獨立與受保護的空間,發生問題的程式會被終止並重啟,因此有問題的應用程式不會影響到其他組件的穩定性。
對於嵌入式作業系統的選擇,可依需求判斷,有人將QNX開發比喻為一種加法的概念,在精簡的核心中將所需功能加上去,而Linux開發則是減法的概念,從龐大的核心中,將不需要的資料去除,兩者並無絕對的優劣,端看開發者對於作業系統的要求來做取捨,若需要高度的即時性與可靠性,QNX是可行的方案,而考慮到開發的難易與資源多寡則可以選擇Linux作為作業系統,儘管Linux有為人詬病的核心載入較慢的問題,但因其為開放式的系統,驅動或功能的支援較多,而QNX作業系統則因為須購買授權,故門檻較高,若官方沒提供驅動程式,則需要自己撰寫驅動程式,這方面則是較為麻煩的地方。
車輛中心(ARTC)目前已導入QNX車規作業系統開發研究,主要開發平台使用NXP的i.MX6四核心處理器,ARTC已在該開發板上運行QNX作業系統,並可利用CAN通訊來控制影像的切換,如下圖4所示。
圖 4 ARTC開發平台與開機完成示意圖
經由該系統進行CAN的管理功能,ARTC正進行將駕駛監控系統、車道辨識等影像辨識功能移植到搭載QNX的i.MX6開發板,目標係開發出具高可靠度與效率的ADAS先進駕駛輔助系統。