一種在uefi層實(shí)現(xiàn)無線網(wǎng)卡驅(qū)動的方法
【專利摘要】本發(fā)明公開了一種在UEFI層實(shí)現(xiàn)無線網(wǎng)卡驅(qū)動的方法,包括:移植和修改無線網(wǎng)卡驅(qū)動,添加無線網(wǎng)卡檢測和初始化代碼并實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議接口;進(jìn)行代碼重新編寫、編譯和燒寫至開發(fā)板;系統(tǒng)上電,UEFI固件運(yùn)行,硬件初始化,并為上層接口實(shí)現(xiàn)所需要的所有UEFI規(guī)范中定義的各種服務(wù)。UEFI啟動管理器加載UEFIShell。UEFIShell加載無線網(wǎng)卡驅(qū)動,并加載TCP/IP協(xié)議棧模塊,無線網(wǎng)絡(luò)通信環(huán)境建立,通過無線網(wǎng)絡(luò)遠(yuǎn)程引導(dǎo)操作系統(tǒng)。本發(fā)明可以在無操作系統(tǒng)環(huán)境下實(shí)現(xiàn)對無線網(wǎng)絡(luò)設(shè)備的檢測、初始化和數(shù)據(jù)讀寫,解除了無線網(wǎng)絡(luò)設(shè)備的使用對操作系統(tǒng)的依賴。
【專利說明】一種在UEFI層實(shí)現(xiàn)無線網(wǎng)卡驅(qū)動的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及無線網(wǎng)絡(luò)【技術(shù)領(lǐng)域】,特別是一種在UEFI層實(shí)現(xiàn)無線網(wǎng)卡驅(qū)動的方法?!颈尘凹夹g(shù)】
[0002]目前傳統(tǒng)BIOS (Basic Input/Output System,基本輸入輸入系統(tǒng))固化了基本驅(qū)動程序,而其他驅(qū)動需要依靠操作系統(tǒng)內(nèi)核加載。其中無線網(wǎng)卡驅(qū)動尤為明顯,它對操作系統(tǒng)有很強(qiáng)的依賴性,無限網(wǎng)卡驅(qū)動集成在操作系統(tǒng)的內(nèi)核中,操作系統(tǒng)啟動后才能對無線網(wǎng)絡(luò)設(shè)備進(jìn)行識別和數(shù)據(jù)讀寫。
[0003]UEFKUnified Extensible Firmware Interface,統(tǒng)一可擴(kuò)展固件接口)是 Intel提出的下一代PC BIOS架構(gòu),它為獨(dú)立BIOS和硬件廠商等提供BIOS標(biāo)準(zhǔn)和驅(qū)動開發(fā)接口,還構(gòu)建了一個(gè)C語言執(zhí)行環(huán)境,可以通過UEFI Shell調(diào)用設(shè)備驅(qū)動。從而允許在pre-boot階段實(shí)現(xiàn)所有設(shè)備驅(qū)動。
[0004]目前UEFI下已經(jīng)在pre-boot階段實(shí)現(xiàn)了有線網(wǎng)卡的驅(qū)動,完成了在操作系統(tǒng)加載與運(yùn)行前連接有線網(wǎng)絡(luò),而無線網(wǎng)卡驅(qū)動尚未實(shí)現(xiàn),未能完成在操作系統(tǒng)加載與運(yùn)行前連接無線網(wǎng)絡(luò)。但是隨著平板電腦、智能手機(jī)等移動設(shè)備的不斷發(fā)展與普及,在UEFI下開發(fā)無線網(wǎng)卡驅(qū)動顯得十分有必要。
[0005]綜上所述,目前的無線網(wǎng)絡(luò)設(shè)備主要是在操作系統(tǒng)啟動后才能運(yùn)行,國內(nèi)外尚未有在UEFI層針對無線網(wǎng)卡驅(qū)動進(jìn)行的研究。
【發(fā)明內(nèi)容】
[0006]本發(fā)明所要解決的技術(shù)問題是,針對現(xiàn)有技術(shù)不足,提供一種在UEFI層實(shí)現(xiàn)無線網(wǎng)卡驅(qū)動的方法,實(shí)現(xiàn)在無操作系統(tǒng)環(huán)境下對無線網(wǎng)絡(luò)設(shè)備的支持,解決無線網(wǎng)絡(luò)設(shè)備只能在操作系統(tǒng)啟動后使用的問題。
[0007]為解決上述技術(shù)問題,本發(fā)明所采用的技術(shù)方案是:一種在UEFI層實(shí)現(xiàn)無線網(wǎng)卡驅(qū)動的方法,該方法為:
1)開發(fā)無線網(wǎng)卡驅(qū)動;
2)開發(fā)板上電,初始化硬件平臺,UEFI固件運(yùn)行,并提供相應(yīng)協(xié)議、驅(qū)動服務(wù),UEFI初始化準(zhǔn)備層,啟動必備硬件資源,準(zhǔn)備層將所述必備硬件資源信息傳遞給固件驅(qū)動執(zhí)行層,初始化所有硬件,并為上層接口實(shí)現(xiàn)所需要的所有UEFI規(guī)范中定義的各種服務(wù),UEFI啟動管理器加載UEFI Shell ;
3)UEFI Shell加載無線網(wǎng)卡驅(qū)動,并加載TCP/IP協(xié)議棧模塊;
4)建立無線網(wǎng)絡(luò)通信環(huán)境,通過無線網(wǎng)絡(luò)遠(yuǎn)程引導(dǎo)操作系統(tǒng)。
[0008]開發(fā)無線網(wǎng)卡驅(qū)動的具體過程如下:
1)移植無線網(wǎng)卡驅(qū)動:刪除操作系統(tǒng)內(nèi)核中的無線網(wǎng)絡(luò)驅(qū)動代碼中與操作系統(tǒng)內(nèi)核相關(guān)的部分,得到刪除操作后的無線網(wǎng)絡(luò)驅(qū)動代碼;
2)添加無線網(wǎng)卡的檢測代碼:在所述刪除操作后的無線網(wǎng)絡(luò)驅(qū)動代碼中添加檢測各種接口無線網(wǎng)卡的函數(shù),檢測是否有接口型無線網(wǎng)卡,檢測各種接口型無線網(wǎng)卡的優(yōu)先順序?yàn)?PC1-E接口型,SPI接口型,SDIO接口型,USB接口型;若有無線網(wǎng)卡,則進(jìn)入3);否則,退出;
3)調(diào)用UEFI規(guī)范定義的相應(yīng)接口協(xié)議,初始化無線網(wǎng)卡;
4)調(diào)用SNP協(xié)議實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議接口;
5)利用UEFI開發(fā)包編譯UEFI程序,得到重新編譯后的無線網(wǎng)卡驅(qū)動文件,將重新編譯后的無線網(wǎng)卡驅(qū)動文件燒寫到開發(fā)板ROM中。
[0009]與現(xiàn)有技術(shù)相比,本發(fā)明所具有的有益效果為:本發(fā)明實(shí)現(xiàn)了無操作系統(tǒng)環(huán)境下對無線網(wǎng)絡(luò)設(shè)備的支持,使無線網(wǎng)絡(luò)設(shè)備的使用擺脫了對操作系統(tǒng)的依賴,實(shí)現(xiàn)了底層對無線網(wǎng)絡(luò)設(shè)備的支持,在裸機(jī)環(huán)境的UEFI OS Loader運(yùn)行階段實(shí)現(xiàn)對無線網(wǎng)絡(luò)設(shè)備的讀取和數(shù)據(jù)寫入,解決了無線網(wǎng)絡(luò)設(shè)備只能在操作系統(tǒng)啟動后使用的問題。
【專利附圖】
【附圖說明】
[0010]圖1為本發(fā)明方法整體流程圖;
圖2為本發(fā)明方法無線網(wǎng)卡驅(qū)動開發(fā)流程圖;
圖3為本發(fā)明實(shí)施例四種接口類型的無線網(wǎng)絡(luò)設(shè)備檢測流程;
圖4為UEFI驅(qū)動體系圖。
【具體實(shí)施方式】
[0011]如圖1所示,本發(fā)明實(shí)施例的方法步驟如下:
步驟一:開發(fā)無線網(wǎng)卡驅(qū)動,詳見圖2。
[0012]S1:移植無線網(wǎng)卡驅(qū)動:修改無線網(wǎng)卡驅(qū)動代碼,刪除操作系統(tǒng)內(nèi)核中的無線網(wǎng)絡(luò)驅(qū)動代碼中與操作系統(tǒng)內(nèi)核相關(guān)的部分;
S2:添加無線網(wǎng)卡的檢測代碼:代碼中添加檢測各種接口無線網(wǎng)卡的函數(shù),檢測是否有無線網(wǎng)卡。檢測各種接口型無線網(wǎng)卡的優(yōu)先順序?yàn)?PC1-E接口型,SPI接口型,SDIO接口型,USB接口型,具體流程詳見圖3。檢測到設(shè)備后對設(shè)備進(jìn)行初始化,未檢測到設(shè)備則退出對網(wǎng)卡的操作。其中代碼的編寫需按UEFI規(guī)范編寫。程序的編寫主要包括兩部分:c文件和makefile文件。驅(qū)動雖然依然是完全是用C語目編寫,但是它的程序入口不是main函數(shù),而是按UEFI規(guī)范編寫。在同一目錄下新添加一個(gè)nmakefile文件,nmakefile文件指定c源文件、文件存放路徑、庫函數(shù)路徑、程序入口點(diǎn)、編譯方式、生成的可執(zhí)行文件名等。
[0013]S3:檢測到無線網(wǎng)卡,并判斷設(shè)備所屬的接口類型后,調(diào)用UEFI規(guī)范定義的相應(yīng)接口協(xié)議,對網(wǎng)卡進(jìn)行初始化操作,并根據(jù)無線網(wǎng)卡的基本信息對相應(yīng)寄存器進(jìn)行設(shè)置。該接口協(xié)議除了初始化相關(guān)寄存器外,還下載固件到該接口設(shè)備以及進(jìn)行該接口設(shè)備地址空間的讀寫。
[0014]S4:網(wǎng)絡(luò)協(xié)議接口的實(shí)現(xiàn):調(diào)用SNP協(xié)議,將SNP協(xié)議對網(wǎng)絡(luò)數(shù)據(jù)包的四個(gè)處理函數(shù)send() ,receive () ,open(), close ()進(jìn)行相應(yīng)完善,其中,receive O采用中斷的方式輪詢網(wǎng)卡地址、網(wǎng)絡(luò)數(shù)據(jù)包的長度和狀態(tài)進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)包的接收。
[0015]S5:編譯和燒寫。Intel為開發(fā)者準(zhǔn)備了 UEFI開發(fā)包(UEFI DevelopmentToolkit,UDK)用于開發(fā)和編譯UEFI程序,開發(fā)包內(nèi)則附帶了大量的庫函數(shù)及實(shí)用的工具,通過build和nmake命令編譯源文件,生成*.efi文件。將重新編譯后的無線網(wǎng)卡驅(qū)動文件通過Dediprog工具燒寫到開發(fā)板ROM中。
[0016]步驟二:開發(fā)板上電,硬件平臺初始化,UEFI固件運(yùn)行,提供相應(yīng)協(xié)議、驅(qū)動等服務(wù)。UEFI驅(qū)動體系圖如圖4所示。
[0017]UEFI下整個(gè)驅(qū)動體系的層次分工是:
UEFI初始化準(zhǔn)備層,是啟動最少量的必備硬件資源,這些必備硬件資源可以滿足啟動固件驅(qū)動執(zhí)行層即可,基本硬件初始化層會把啟動的硬件資源信息傳遞給固件驅(qū)動執(zhí)行層。UEFI初始化準(zhǔn)備階段即對應(yīng)于基本UEFI初始化準(zhǔn)備層,它通過執(zhí)行一個(gè)個(gè)的基本初始化模塊來完成這個(gè)階段的初始化工作。
[0018]固件驅(qū)動執(zhí)行層,徹底完成所有硬件初始化,并為上層接口實(shí)現(xiàn)所需要的所有UEFI規(guī)范中定義的各種服務(wù)。驅(qū)動層將通過查找一個(gè)個(gè)驅(qū)動模塊來完成所有硬件的登記,并在服務(wù)被調(diào)用時(shí)實(shí)際執(zhí)行相應(yīng)功能的驅(qū)動模塊。固件驅(qū)動執(zhí)行階段即對應(yīng)固件驅(qū)動執(zhí)行層,本發(fā)明開發(fā)的無線網(wǎng)卡驅(qū)動在此階段執(zhí)行,無線網(wǎng)卡被檢查并登記。
[0019]UEFI啟動管理器負(fù)責(zé)從UEFI文件系統(tǒng)中或UEFI映像中載入服務(wù)來加載UEFI應(yīng)用程序或UEFI驅(qū)動程序。UEFI定義了非易失性隨機(jī)訪問存儲器(Non-Volatile RandomAccess Memory,NVRAM)變量用來指向要被加載的文件。應(yīng)用程序UEFI Shell在這個(gè)階段加載。
[0020]UEFI Shell為用戶提供一個(gè)交互環(huán)境,用戶可以選擇boot到UEFI Shell而不是操作系統(tǒng)。UEFI Shell可以加載UEFI設(shè)備驅(qū)動,打開UEFI應(yīng)用程序和啟動操作系統(tǒng)。此夕卜,UEFI Shell還提供了一組基本的命令,用于管理文件和系統(tǒng)環(huán)境變量等。
[0021]步驟三:UEFI Shell加載無線網(wǎng)卡驅(qū)動,并加載TCP/IP協(xié)議棧模塊。UEFI Shell下通過load命令加載無線網(wǎng)卡驅(qū)動以及TCP/IP驅(qū)動模塊。TCP/IP協(xié)議棧在EFI BIOS中以UEFI協(xié)議的形式被UEFI Shell調(diào)用。通過UEFI套接字協(xié)議接口可以訪問TCP/IP協(xié)議棧。TCP/IP協(xié)議棧模塊記為tcp/ip.efi,以UEFI驅(qū)動程序的形式被加載。
[0022]步驟四:無線網(wǎng)絡(luò)通信環(huán)境建立,通過無線網(wǎng)絡(luò)遠(yuǎn)程引導(dǎo)操作系統(tǒng)
本發(fā)明實(shí)施例通過把無線網(wǎng)卡驅(qū)動修改并移植到UEFI中,實(shí)現(xiàn)在UEFI層對各種接口類型的無線網(wǎng)卡的檢測識別、初始化和數(shù)據(jù)收發(fā)。其中UEFI Shell就是一個(gè)UEFI應(yīng)用程序,屬于啟動時(shí)服務(wù),當(dāng)操作系統(tǒng)啟動之后自動退出,不再運(yùn)行。而本發(fā)明中開發(fā)的無線網(wǎng)卡驅(qū)動是一個(gè)UEFI驅(qū)動程序,屬于運(yùn)行時(shí)服務(wù),即在啟動時(shí)和啟動后都保持運(yùn)行狀態(tài)。
[0023]由于不同的網(wǎng)卡硬件其驅(qū)動會有差別,所以本發(fā)明實(shí)施例針對Intel發(fā)布的兼容網(wǎng)卡來實(shí)現(xiàn),在未來成熟的符合UEFI BIOS規(guī)范的產(chǎn)品中,將會有更多的網(wǎng)卡廠商提供網(wǎng)卡驅(qū)動的支持。
[0024]與現(xiàn)有技術(shù)相比,本發(fā)明的方法通過修改無線網(wǎng)卡驅(qū)動,移植無線網(wǎng)卡驅(qū)動到UEFI層,修改代碼、編譯等,實(shí)現(xiàn)了在無操作系統(tǒng)環(huán)境下對無線網(wǎng)絡(luò)設(shè)備的識別和讀寫。實(shí)現(xiàn)了無線網(wǎng)絡(luò)設(shè)備的使用不依賴操作系統(tǒng)的特性。
【權(quán)利要求】
1.一種在UEFI層實(shí)現(xiàn)無線網(wǎng)卡驅(qū)動的方法,其特征在于,該方法為: 1)開發(fā)無線網(wǎng)卡驅(qū)動; 2)開發(fā)板上電,初始化硬件平臺,UEFI固件運(yùn)行,并提供相應(yīng)協(xié)議、驅(qū)動服務(wù),UEFI初始化準(zhǔn)備層,啟動必備硬件資源,準(zhǔn)備層將所述必備硬件資源信息傳遞給固件驅(qū)動執(zhí)行層,初始化所有硬件,并為上層接口實(shí)現(xiàn)所需要的所有UEFI規(guī)范中定義的各種服務(wù),UEFI啟動管理器加載UEFI Shell ; 3)UEFI Shell加載無線網(wǎng)卡驅(qū)動,并加載TCP/IP協(xié)議棧模塊; 4)建立無線網(wǎng)絡(luò)通信環(huán)境,通過無線網(wǎng)絡(luò)遠(yuǎn)程引導(dǎo)操作系統(tǒng)。
2.根據(jù)權(quán)利要求1所述的在UEFI層實(shí)現(xiàn)無線網(wǎng)卡驅(qū)動的方法,其特征在于,所述步驟O中,開發(fā)無線網(wǎng)卡驅(qū)動的具體過程如下: 1)移植無線網(wǎng)卡驅(qū)動:刪除操作系統(tǒng)內(nèi)核中的無線網(wǎng)絡(luò)驅(qū)動代碼中與操作系統(tǒng)內(nèi)核相關(guān)的部分,得到刪除操作后的無線網(wǎng)絡(luò)驅(qū)動代碼; 2)添加無線網(wǎng)卡的檢測代碼:在所述刪除操作后的無線網(wǎng)絡(luò)驅(qū)動代碼中添加檢測各種接口無線網(wǎng)卡的函數(shù),檢測是否有接口型無線網(wǎng)卡,檢測各種接口型無線網(wǎng)卡的優(yōu)先順序?yàn)?PC1-E接口型,SPI接口型,SDIO接口型,USB接口型;若有無線網(wǎng)卡,則進(jìn)入3);否則,退出; 3)調(diào)用UEFI規(guī)范定義的相應(yīng)接口協(xié)議,初始化無線網(wǎng)卡; 4)調(diào)用SNP協(xié)議實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議接口; 5)利用UEFI開發(fā)包編譯UEFI程序,得到重新編譯后的無線網(wǎng)卡驅(qū)動文件,將重新編譯后的無線網(wǎng)卡驅(qū)動文件燒寫到開發(fā)板ROM中。
3.根據(jù)權(quán)利要求2所述的在UEFI層實(shí)現(xiàn)無線網(wǎng)卡驅(qū)動的方法,其特征在于,所述開發(fā)板為支持UEFI規(guī)范的x86架構(gòu)移動設(shè)備。
【文檔編號】H04L29/06GK103853586SQ201410078135
【公開日】2014年6月11日 申請日期:2014年3月5日 優(yōu)先權(quán)日:2014年3月5日
【發(fā)明者】熊永華, 伍成靜, 吳敏, 張堯?qū)W 申請人:中南大學(xué)