解建偉 賴前程 曹成軍 張興旺
(中國(guó)電器科學(xué)研究院有限公司 廣東 廣州 510300)
VxWorks自定義動(dòng)態(tài)系統(tǒng)調(diào)用的應(yīng)用
解建偉 賴前程 曹成軍 張興旺
(中國(guó)電器科學(xué)研究院有限公司 廣東 廣州 510300)
系統(tǒng)調(diào)用是用戶模式程序訪問內(nèi)核服務(wù)、硬件資源的接口。自定義的系統(tǒng)調(diào)用在VxWorks程序開發(fā)中有著非常重要的作用。通過自定義系統(tǒng)調(diào)用可以讓用戶模式的程序訪問更多的內(nèi)核函數(shù)、硬件資源,可以擴(kuò)展程序的應(yīng)用范圍。簡(jiǎn)單論述VxWorks中自定義系統(tǒng)調(diào)用的概念,描述系統(tǒng)調(diào)用的過程,分步介紹自定義動(dòng)態(tài)系統(tǒng)調(diào)用的實(shí)現(xiàn)過程。最后介紹應(yīng)用程序中動(dòng)態(tài)系統(tǒng)調(diào)用的使用方法。
VxWorks 自定義 系統(tǒng)調(diào)用
VxWorks是美國(guó)風(fēng)河公司設(shè)計(jì)開發(fā)的嵌入式實(shí)時(shí)操作系統(tǒng),它支持多種處理器平臺(tái),具有較高的可擴(kuò)展性與安全性。VxWorks在6.0版本之前的系統(tǒng)只提供一個(gè)內(nèi)存地址空間,用戶程序和操作系統(tǒng)程序沒有做隔離,所有的任務(wù)都運(yùn)行在特權(quán)模式。盡管這種形式為程序開發(fā)提供了比較好的性能和靈活性,但也使內(nèi)核與應(yīng)用程序在內(nèi)存空間存在相互干擾的可能。在6.0版本以后,操作系統(tǒng)開始支持實(shí)時(shí)進(jìn)程RTP(real-time processes),它支持應(yīng)用程序在用戶模式運(yùn)行,并且是與操作系統(tǒng)內(nèi)核完全隔離的運(yùn)行模型。這種模型是專門為滿足硬實(shí)時(shí)操作系統(tǒng)對(duì)確定性和速度的要求而設(shè)計(jì)[1]。
VxWorks中的RTP在很多方面都與Unix和Linux的用戶態(tài)的進(jìn)程類似,每個(gè)進(jìn)程都有自己的地址空間,包括可執(zhí)行代碼、數(shù)據(jù)堆棧以及自身相關(guān)的管理資源[2]。這使得系統(tǒng)的安全性得到極大提高,同時(shí)系統(tǒng)調(diào)用接口為用戶態(tài)的應(yīng)用程序提供了訪問內(nèi)核的接口[3]。系統(tǒng)調(diào)用常用于RTP程序訪問內(nèi)核服務(wù),CPU外設(shè)或其他硬件資源。
需要說明的是應(yīng)用編程接口(API)與系統(tǒng)調(diào)用是不同的,前者是一個(gè)函數(shù)定義,說明如何獲得一個(gè)給定的服務(wù),而后者是通過軟中斷向內(nèi)核發(fā)出一個(gè)明確的模式切換請(qǐng)求[4]。由于特權(quán)模式的內(nèi)核程序和用戶模式程序有不同的指令集和內(nèi)存管理單元MMU(memory management unit)設(shè)置,應(yīng)用程序運(yùn)行在用戶模式時(shí)不能直接訪問內(nèi)核函數(shù)和數(shù)據(jù)結(jié)構(gòu)。用戶模式程序執(zhí)行系統(tǒng)調(diào)用函數(shù)時(shí)系統(tǒng)從用戶模式切換到CPU特權(quán)級(jí)別的內(nèi)核模式,當(dāng)執(zhí)行完函數(shù)后再恢復(fù)到用戶模式[5]。VxWorks中系統(tǒng)調(diào)用的模式切換過程對(duì)使用者來說是透明的[1]。
在RTP程序中使用實(shí)時(shí)系統(tǒng)原有的系統(tǒng)調(diào)用與內(nèi)核交互時(shí),時(shí)常會(huì)出現(xiàn)不滿足設(shè)計(jì)需求或性能指標(biāo)的情況[6]。通過增加自定義系統(tǒng)調(diào)用,我們可以根據(jù)自己的需求,來給內(nèi)核增加特定的功能,滿足性能指標(biāo)和設(shè)計(jì)需求[7]。
在VxWorks中的系統(tǒng)調(diào)用一般可分為兩大類,一類是操作系統(tǒng)定義的系統(tǒng)調(diào)用,像exit、create、open、semGive等都是系統(tǒng)調(diào)用;另外一類是用戶自定義的系統(tǒng)調(diào)用。VxWorks中的自定義系統(tǒng)調(diào)用又分為靜態(tài)自定義系統(tǒng)調(diào)用和動(dòng)態(tài)自定義系統(tǒng)調(diào)用兩種。這兩種系統(tǒng)調(diào)用的實(shí)現(xiàn)方式不同,性能都基本一致,但是它們各有優(yōu)缺點(diǎn)。
自定義的靜態(tài)系統(tǒng)調(diào)用的優(yōu)勢(shì)在于它是與操作系統(tǒng)源碼一起編譯,可根據(jù)需要修改系統(tǒng)原有的系統(tǒng)調(diào)用函數(shù);在使用時(shí)與普通的函數(shù)調(diào)用方式一致。不足之處是修改定義系統(tǒng)調(diào)用要對(duì)系統(tǒng)核心文件作修改,編譯調(diào)試,這會(huì)帶來比較大的工作量,一個(gè)小小的失誤往往會(huì)使系統(tǒng)不穩(wěn)定甚至崩潰,系統(tǒng)可靠性和穩(wěn)定性不容易保證;同時(shí)增加、修改系統(tǒng)調(diào)用都比較麻煩,使得系統(tǒng)可維護(hù)性與可移植性將會(huì)降低[8]。
動(dòng)態(tài)的系統(tǒng)調(diào)用只需要在運(yùn)行時(shí)向系統(tǒng)注冊(cè)自定義系統(tǒng)調(diào)用,不需要像自定義靜態(tài)系統(tǒng)調(diào)用那樣修改VxWorks源代碼文件,不需要與操作系統(tǒng)一起重新編譯生成[2]。其優(yōu)勢(shì)是不需要對(duì)系統(tǒng)核心代碼做更改,減少了對(duì)內(nèi)核穩(wěn)定性的影響;同時(shí)對(duì)新增系統(tǒng)調(diào)用的修改、更新、刪除都比較方便。不足之處在于一般不能通過名字直接訪問動(dòng)態(tài)系統(tǒng)調(diào)用函數(shù),在應(yīng)用的時(shí)候需要知道自定義動(dòng)態(tài)系統(tǒng)調(diào)用的組編號(hào)和索引位置,然后統(tǒng)一由syscall函數(shù)調(diào)用。
2.1 分析與設(shè)計(jì)
在VxWorks6.9實(shí)時(shí)操作系統(tǒng)中用戶自定義的系統(tǒng)調(diào)用主要有3個(gè)元素:
(1) 系統(tǒng)調(diào)用。執(zhí)行系統(tǒng)調(diào)用的是使用匯編語言編寫的一個(gè)函數(shù),它通過C語言調(diào)用。區(qū)別不同系統(tǒng)調(diào)用的方式是在調(diào)用時(shí)使用系統(tǒng)調(diào)用函數(shù)名字和系統(tǒng)調(diào)用編號(hào),這是系統(tǒng)開發(fā)人員定義的。
(2) 捕獲處理。當(dāng)用戶RTP程序訪問系統(tǒng)調(diào)用時(shí)會(huì)執(zhí)行捕獲指令處理,它將調(diào)用的程序從用戶模式切換到特權(quán)(內(nèi)核)模式執(zhí)行。系統(tǒng)調(diào)用編號(hào)傳遞給內(nèi)核去識(shí)別關(guān)聯(lián)的函數(shù)。在內(nèi)核中,捕獲處理從用戶堆?;蚣拇嫫骺臻g拷貝系統(tǒng)調(diào)用參數(shù)到內(nèi)核堆棧空間,然后調(diào)用系統(tǒng)調(diào)用關(guān)聯(lián)匹配的處理函數(shù)。
(3) 處理函數(shù)。系統(tǒng)調(diào)用的處理函數(shù)是系統(tǒng)開發(fā)者編寫的程序,它只有一個(gè)結(jié)構(gòu)體變量參數(shù),結(jié)構(gòu)體成員就是系統(tǒng)調(diào)用的參數(shù)[3]。當(dāng)系統(tǒng)從處理函數(shù)返回,調(diào)用任務(wù)將從特權(quán)(內(nèi)核)模式切換到用戶模式。
用戶自定義動(dòng)態(tài)系統(tǒng)調(diào)用程序的實(shí)現(xiàn)一般可以分為以下3個(gè)步驟:
(1) 設(shè)計(jì)參數(shù)結(jié)構(gòu),編寫處理函數(shù);
(2) 添加系統(tǒng)調(diào)用處理表結(jié)構(gòu)信息;
(3) 注冊(cè)系統(tǒng)調(diào)用函數(shù)及相關(guān)設(shè)置。
VxWorks文檔建議,對(duì)于添加動(dòng)態(tài)系統(tǒng)調(diào)用的方法最好使用統(tǒng)一的命名約定,使得系統(tǒng)調(diào)用的邏輯一致性和代碼的清晰度最好。命名約定如表1所示。
表1 命名約束
設(shè)計(jì)的實(shí)時(shí)控制系統(tǒng)中需要實(shí)現(xiàn)RTP應(yīng)用程序讀寫FPGA中的數(shù)據(jù)動(dòng)態(tài)系統(tǒng)調(diào)用,其中FPGA是掛載在處理器的IFC(Integrated Flash Controller)接口上通過絕對(duì)地址訪問。
根據(jù)命名約束,在內(nèi)核任務(wù)程序中需要實(shí)現(xiàn)兩個(gè)自定義動(dòng)態(tài)系統(tǒng)調(diào)用get_fpga_registerSc和set_fpga_registerSc函數(shù),并為它們注冊(cè)合適的系統(tǒng)調(diào)用編號(hào),檢查系統(tǒng)調(diào)用的注冊(cè)信息。最后在RTP程序中通過使用此動(dòng)態(tài)統(tǒng)調(diào)用訪問FPGA的寄存器內(nèi)容,檢查執(zhí)行正確性。
2.2 實(shí)現(xiàn)過程
第一步是設(shè)計(jì)、編寫動(dòng)態(tài)系統(tǒng)調(diào)用函數(shù),及其參數(shù)結(jié)構(gòu)。自定義讀寫函數(shù)的系統(tǒng)調(diào)用其聲明如下:
int set_fpga_registerSc(SysCallSetRegScArgs *pArgs);
int get_fpga_registerSc(SysCallGetRegScArgs *pArgs);
其中動(dòng)態(tài)系統(tǒng)調(diào)用定義必須要有整型的返回值,參數(shù)是通過指向參數(shù)結(jié)構(gòu)體的指針來進(jìn)行傳遞。自定義動(dòng)態(tài)系統(tǒng)調(diào)用函數(shù)最多可以有8個(gè)參數(shù),即最多可以只有8個(gè)結(jié)構(gòu)體成員。每個(gè)參數(shù)長(zhǎng)度都是本機(jī)字大小(32位處理器參數(shù)長(zhǎng)度就是32位,64位處理器參數(shù)長(zhǎng)度就是64位),如果在32位系統(tǒng)上要傳遞64位參數(shù)需要特別處理。get_fpga_registerSc系統(tǒng)調(diào)用有2個(gè)參數(shù),其傳遞的參數(shù)結(jié)構(gòu)體如下:
typedef struct{
unsigned int index;
unsigned short* pV;
} SysCallGetRegScArgs;
函數(shù)get_fpga_registerSc的執(zhí)行是在內(nèi)核中完成,執(zhí)行時(shí)所有參數(shù)在使用前必須做邊界值檢查,驗(yàn)證使用的內(nèi)存地址,以及檢查數(shù)據(jù)結(jié)構(gòu)的有效性。對(duì)內(nèi)存地址的驗(yàn)證是實(shí)際大小的緩沖大小,而不是最大緩沖大小。也就是說RTP程序分配了一個(gè)20個(gè)字節(jié)的緩沖區(qū),那么系統(tǒng)調(diào)用函數(shù)應(yīng)該驗(yàn)證這20個(gè)字節(jié)的內(nèi)存,如果系統(tǒng)調(diào)用函數(shù)驗(yàn)證這個(gè)緩沖的最大長(zhǎng)度(比如64個(gè)字節(jié))可能會(huì)因?yàn)橹挥?0個(gè)字節(jié)被分配而出錯(cuò)。解決這個(gè)問題的最好方法是通過參數(shù)告訴系統(tǒng)調(diào)用函數(shù)使用的緩沖空間的大小信息。
對(duì)動(dòng)態(tài)系統(tǒng)調(diào)用函數(shù)get_fpga_registerSc的實(shí)現(xiàn)如下:
int get_fpga_registerSc(SysCallGetRegScArgs *pArgs)
{
if(pArgs->index > FPGA_AGREED_MAX_SIZE)
{
errno = EMSGSIZE;
return ERROR;
}
if (scMemValidate (pArgs->pV, sizeof(unsigned short), SC_PROT_WRITE) == ERROR)
{
errno = EINVAL;
return ERROR;
}
if(FPGA_GetValue(pArgs->index,pArgs->pV)==ERROR)
{
errno = EINVAL;
return ERROR;
}
return OK;
}
在執(zhí)行時(shí)首先驗(yàn)證讀取的FPGA地址是否已經(jīng)超出了可訪問范圍,然后使用scMemValidate函數(shù)來驗(yàn)證第二個(gè)參數(shù)地址寫入的有效性,最后讀取FPGA指定地址的數(shù)據(jù)并返回。系統(tǒng)調(diào)用內(nèi)存驗(yàn)證函數(shù)scMemValidate的第一個(gè)參數(shù)是驗(yàn)證的起始地址,第二個(gè)是驗(yàn)證地址的數(shù)據(jù)或結(jié)構(gòu)的長(zhǎng)度,第三個(gè)參數(shù)是地址空間訪問模式,它分為讀、寫、以及線程安全的讀寫3種模式。這3種模式中的讀、寫可以組合使用,而線程安全的讀寫不可以組合使用。
在參數(shù)檢查、內(nèi)存驗(yàn)證、以及執(zhí)行過程中如果出現(xiàn)了錯(cuò)誤,需要根據(jù)具體情況對(duì)errno設(shè)置一個(gè)合適的異常值,然后返回錯(cuò)誤-1(ERROR),如果正常則返回0(OK)。返回ERROR時(shí)內(nèi)核的異常值將被拷貝到調(diào)用的任務(wù)進(jìn)程的errno中;如果沒有錯(cuò)誤,這時(shí)只是將值拷貝到調(diào)用用戶模式的任務(wù)。
第二步是添加自定義的系統(tǒng)調(diào)用函數(shù)表。注冊(cè)VxWorks動(dòng)態(tài)系統(tǒng)調(diào)用前必須在程序源碼文件中包含自定義動(dòng)態(tài)系統(tǒng)調(diào)用的處理程序表SYSCALL_RTN_TBL_ENTRY。表中每一項(xiàng)都由SYSCALL_DESC_ENTRY()宏關(guān)聯(lián)一個(gè)系統(tǒng)調(diào)用,在VxWorks6.9版本的系統(tǒng)中此宏定義有三個(gè)參數(shù)(如果是其它版本,定義會(huì)略有不同),示例如下:
LOCAL _WRS_DATA_ALIGN_BYTES(16) SYSCALL_RTN_TBL_ENTRY pRtnTbl [NUM_RTN] = {
SYSCALL_DESC_ENTRY (set_fpga_registerSc, ″set_fpga_register″, 2),
SYSCALL_DESC_ENTRY (get_fpga_registerSc, ″get_fpga_register″, 2)
};
系統(tǒng)調(diào)用表的_WRS_DATA_ALIGN_BYTES(16)修飾是告訴編譯、鏈接器數(shù)組按照16字節(jié)對(duì)齊以提高性能,這個(gè)修飾是可選的。NUM_RTN定義的值等于2,表示數(shù)組中的宏元素個(gè)數(shù)。SYSCALL_DESC_ENTRY宏的第1個(gè)參數(shù)是執(zhí)行系統(tǒng)調(diào)用的函數(shù)指針,第2個(gè)是對(duì)應(yīng)的系統(tǒng)調(diào)用名字,第3個(gè)參數(shù)系統(tǒng)調(diào)用參數(shù)個(gè)數(shù)。
第三步是注冊(cè)系統(tǒng)調(diào)用。定義的處理程序表需要關(guān)聯(lián)到合適的系統(tǒng)調(diào)用的組中,完成注冊(cè)工作后才能使用。注冊(cè)的每個(gè)系統(tǒng)調(diào)用都必須有唯一的系統(tǒng)調(diào)用編號(hào)。執(zhí)行動(dòng)態(tài)系統(tǒng)調(diào)用時(shí),編號(hào)傳遞給內(nèi)核,然后使用它來識(shí)別和執(zhí)行匹配的系統(tǒng)調(diào)用處理程序。每個(gè)系統(tǒng)調(diào)用的編號(hào)是32 bit整數(shù),由兩部分組成的:一個(gè)是具有10 bit長(zhǎng)度的系統(tǒng)調(diào)用的組數(shù),另外一個(gè)是具有6 bit的系統(tǒng)調(diào)用程序編號(hào),如圖1所示。
圖1 系統(tǒng)調(diào)用編號(hào)
據(jù)定義可知,此系統(tǒng)最多允許有1024個(gè)組編號(hào),每個(gè)組最多有64個(gè)程序編號(hào),總共可以容納65 536個(gè)系統(tǒng)調(diào)用。根據(jù)系統(tǒng)定義,從第2組到第7組是自定義使用區(qū)間,其他組為系統(tǒng)使用或保留區(qū)間。
系統(tǒng)調(diào)用的注冊(cè)需要使用syscallGroupRegister函數(shù),此函數(shù)第1個(gè)參數(shù)是指定注冊(cè)組編號(hào),第2個(gè)參數(shù)是組名字,第3個(gè)參數(shù)是函數(shù)個(gè)數(shù),第4個(gè)參數(shù)是處理程序表地址,第5個(gè)參數(shù)是強(qiáng)制覆蓋開關(guān)。注冊(cè)示例代碼如下:
syscallGroupRegister (2, ″fpgaIF_ScGroup″, NUM_RTN, pRtnTbl, FALSE);
注冊(cè)函數(shù)將pRtnTbl注冊(cè)到了第2組自定義系統(tǒng)調(diào)用中,并為之取名為fpgaIF_ScGroup,注冊(cè)組內(nèi)有2(NUM_RTN)個(gè)系統(tǒng)調(diào)用函數(shù),即set_fpga_registerSc和get_fpga_registerSc函數(shù),程序編號(hào)在組內(nèi)分別是0和1。系統(tǒng)調(diào)用的編號(hào)不是必須順序的,在多個(gè)編號(hào)之間的定義是允許留空白。注冊(cè)系統(tǒng)調(diào)用后的fpgaIF_ScGroup系統(tǒng)調(diào)用接口視圖如圖2所示。
圖2 fpgaIF_ScGroup視圖
2.3 檢查系統(tǒng)調(diào)用
為了方便檢查注冊(cè)的自定義系統(tǒng)調(diào)用,需要配置操作系統(tǒng)包含INCLUDE_SHOW_ROUTINES組件,使用它檢查自定義系統(tǒng)調(diào)用。編譯并執(zhí)行本文中實(shí)現(xiàn)的自定義動(dòng)態(tài)系統(tǒng)調(diào)用注冊(cè)程序及必要的組件。操作系統(tǒng)正確運(yùn)行后,在調(diào)試終端使用syscallShow函數(shù)命令檢查系統(tǒng)調(diào)用的詳細(xì)信息。syscallShow函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)是組號(hào),第二個(gè)參數(shù)是顯示級(jí)別,顯示級(jí)別0表示只輸出組內(nèi)信息,1表示輸出全部信息。
圖3 系統(tǒng)調(diào)用信息
圖3中,在調(diào)試終端使用syscallShow查看自定義系統(tǒng)調(diào)用的第2組,以級(jí)別1顯示信息??梢钥吹阶?cè)的系統(tǒng)調(diào)用的組名為fpgaIF_ScGroup,以及組內(nèi)提供的系統(tǒng)調(diào)用的名字、地址、參數(shù)個(gè)數(shù)等信息與設(shè)計(jì)完全符合。
在RTP程序中執(zhí)行系統(tǒng)調(diào)用,如果是靜態(tài)的自定義系統(tǒng)調(diào)用可以直接通過函數(shù)名調(diào)用,使用上與普通函數(shù)調(diào)用沒有任何區(qū)別;如果使用自定義動(dòng)態(tài)系統(tǒng)調(diào)用,則需要統(tǒng)一使用syscall接口函數(shù)來訪問。不管是什么樣的系統(tǒng)調(diào)用,在調(diào)用時(shí)產(chǎn)生的模式切換是透明的。
動(dòng)態(tài)系統(tǒng)調(diào)用接口syscall函數(shù)有9個(gè)參數(shù),其中前8個(gè)參數(shù)是系統(tǒng)調(diào)用傳入的參數(shù),最后1個(gè)參數(shù)是系統(tǒng)調(diào)用的編號(hào),編號(hào)的計(jì)算可以使用宏SYSCALL_NUMBER指定組號(hào)與程序號(hào)替代。程序中動(dòng)態(tài)系統(tǒng)調(diào)用的應(yīng)用封裝如下:
#define SC_GET_REG SYSCALL_NUMBER (2, 1)
int RtpGetRegister(int i, int *pV)
{
if(syscall (i, pV,0,0,0,0,0,0, SC_GET_REG) == ERROR)
{
printf (″syscall() returned err. errno = %#x ”, errno);
return ERROR;
}
return OK;
}
根據(jù)定義可知,RtpGetRegister 是封裝使用動(dòng)態(tài)系統(tǒng)調(diào)用函數(shù),其中的syscall執(zhí)行了第2組中的第1個(gè)系統(tǒng)調(diào)用(此系統(tǒng)調(diào)用函數(shù)就是本文中定義的get_fpga_registerSc函數(shù))并將參數(shù)i值和pV指針傳入函數(shù),執(zhí)行函數(shù)時(shí)首先驗(yàn)證i,pV的有效性,然后讀取FPGA的i地址的值放入pV指向的內(nèi)存空間,最后返回執(zhí)行結(jié)果。如果執(zhí)行系統(tǒng)調(diào)用錯(cuò)誤將返回-1(ERROR),此時(shí)可以從errno獲取到系統(tǒng)調(diào)用返回的錯(cuò)誤號(hào)并根據(jù)需要處理此錯(cuò)誤;如果執(zhí)行系統(tǒng)調(diào)用正常將會(huì)返回0(OK)。
在VxWorks系統(tǒng)中自定義系統(tǒng)調(diào)用可以讓用戶動(dòng)態(tài)地應(yīng)用程序獲得更多的資源訪問權(quán)限,這既可以保證應(yīng)用程序的安全性又?jǐn)U展了其應(yīng)用范圍。
為操作系統(tǒng)增加動(dòng)態(tài)系統(tǒng)調(diào)用,可以使開發(fā)人員專注于如何設(shè)計(jì)、完善自定義的系統(tǒng)調(diào)用函數(shù),無需對(duì)操作系統(tǒng)源碼作修改。這樣不會(huì)增加操作系統(tǒng)內(nèi)核不穩(wěn)定的風(fēng)險(xiǎn),同時(shí)又減少了開發(fā)工作量,增強(qiáng)了自定義系統(tǒng)調(diào)用的可維護(hù)性。
[1]WindRiverSystemsInc.VxWorksApplicationProgrammer’sGuide6.9[Z]. 2013.
[2]WindRiverSystemsInc.VxWorksKernelProgrammer’sGuide6.9[Z].2013.
[3] 葛仁北. 系統(tǒng)調(diào)用與操作系統(tǒng)安全[J].計(jì)算機(jī)工程與應(yīng)用,2002,38(19):97-99,128.
[4]BovetDP,CesatiM.深入理解Linux內(nèi)核[J].陳莉君,張瓊聲,張宏偉,譯.3版. 北京:中國(guó)電力出版社,2007:397-398.
[5] 謝錦濱, 王晨, 張申生. 系統(tǒng)調(diào)用重定向的研究與應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2006,23(3):4-6.
[6]WindRiverSystemsInc.VxWorksBenchmarkDataSheetforVxWorks6.9 1.2GHzP2020RDB[DB].2011.
[7] 胡盼盼.Linux下系統(tǒng)調(diào)用原理解析及增加系統(tǒng)調(diào)用的方法[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2007,16(8):109-112.
[8] 羅忠海, 劉心松.UNIX環(huán)境中動(dòng)態(tài)擴(kuò)充系統(tǒng)調(diào)用的功能[J].計(jì)算機(jī)工程與設(shè)計(jì),1999,20(1):1-6.
APPLICATION OF VXWORKS DYNAMICAL CUSTOM SYSTEM CALLS
Xie Jianwei Lai Qiancheng Cao Chengjun Zhang Xingwang
(ChinaNationalElectricApparatusResearchInstituteCo.,Ltd.Guangzhou510300,Guangdong,China)
The user mode application through system calls interface can access the kernel services and hardware resources. Custom system calls in VxWorks has a very important role in application development. Applications of user mode are able to access more kernel functions or other hardware resources through custom system calls, extending the scope of application. Thus, the concept of custom system calls in VxWorks and the system calls process are described, then the implementation process of the dynamical custom system calls is introduced step by step. Finally, the method of using dynamical custom system calls in application program is introduced.
VxWorks Custom System calls
2015-12-11。解建偉,工程師,主研領(lǐng)域:嵌入式軟件與驅(qū)動(dòng)開發(fā)。賴前程,工程師。曹成軍,高工。張興旺,教授級(jí)高工。
TP316.2
A
10.3969/j.issn.1000-386x.2017.02.043