天天看點

通過FTP Server加載VxWorks映像通過FTP Server加載VxWorks映像

通過FTP Server加載VxWorks映像

        使用VxWorks的BootRom将目标機引導起來之後,目标機處于BootRom控制之下,這裡我們使用的虛拟機就是目标機。此時使用者可以通過BootRom的一些指令進行簡單的操作。如果需要運作VxWorks,還需要加載VxWorks映像并運作。

設定FTP Server

        Tornado自帶了FTP伺服器,名為FTP Server。該伺服器設定比較簡單,适合初學者使用。FTP Server可以在開始菜單Tornado程式組中找到并啟動。如圖3.1為啟動後的界面。

通過FTP Server加載VxWorks映像通過FTP Server加載VxWorks映像

圖3.1  FTP Server界面          1.建立使用者名和密碼

        設定FTP Server非常簡單,主要就是建立使用者及密碼。單擊菜單項Security | Users/rights…指令,打開使用者權限對話框,如圖3.2所示。

通過FTP Server加載VxWorks映像通過FTP Server加載VxWorks映像

圖3.2  使用者權限對話框         在沒有設定使用者的時候,可選擇的使用者包括anonymous和default,但這兩個使用者在使用上會帶來諸多不便,是以并不推薦使用。單擊New User…按鈕彈出建立新使用者對話框,這裡輸入target後單擊OK按鈕,然後輸入密碼vxworks再次單擊OK按鈕,即可建立一個名為target的新使用者。

        因為後面的操作會用target和vxworks這一對使用者名和密碼來進行系統下載下傳,是以對于初學者在這裡一定要建立這對使用者名和密碼。在User Name對應的組合框下拉清單中選擇該使用者名,然後在Home Directory所對應的編輯框中,輸入D:\作為根路徑,如圖3.3所示。

通過FTP Server加載VxWorks映像通過FTP Server加載VxWorks映像

圖3.3  建立根路徑         建立根路徑表示虛拟機中的BootRom在連接配接到FTP後會從D盤根目錄查找并下載下傳VxWorks系統映像。當然不設定也是可以的,那樣就得給BootRom提供完整的系統映像路徑。完成上面操作後單擊Done按鈕即可。

         2.其它設定

        在下載下傳過程中,還有一項非常有助于觀察下載下傳程序狀态的功能,就是資訊輸出。預設情況下輸出資訊是處于關閉狀态的,不過通常在使用過程中都将其全部打開,以便與觀察下載下傳過程。

        單擊菜單項的Logging | Log Options…指令,彈出Logging Options對話框。在該對話框中,除了Winsock Calls将其它複選框都進行勾選,然後單擊OK按鈕。如圖3.4所示。

通過FTP Server加載VxWorks映像通過FTP Server加載VxWorks映像

圖3.4  記錄選項         當然VxWorks映像加載方式有很多,包括網絡下載下傳、本地磁盤加載、仿真器下載下傳等,每種方式适用于不同的場合。在開發過程中,Vxworks映像還沒有真正意義上準備好的時候,開發者需要不斷修改并将其加載到目标機上調試運作。這樣,最友善的辦法就是通過區域網路加載。如果系統裁剪完成後,整個映像需要固化到嵌入式裝置中,這時最佳的加載方式就是從ROM或硬碟加載了。不過今天隻學習FTP區域網路下載下傳,而且要實作下載下傳到虛拟機中。

編譯網卡驅動

        如果想通過FTP伺服器往目标機下載下傳系統映像,在下載下傳之前都必須對主機和目标機IP做一些必要的設定才能完成。如果是往虛拟機中下載下傳,那麼會更加麻煩一些。

兩台電腦通過區域網路連接配接需要網線和網卡,那麼主機和虛拟機連接配接通信也需要必要的軟體資源。裝完VMware軟體後在網絡連接配接視窗中會多出兩個網卡資源VMnet1和VMnet8,如圖3.5所示。這兩個網卡資源可以看成是主機和虛拟機建立通信的視窗。

通過FTP Server加載VxWorks映像通過FTP Server加載VxWorks映像

圖3.5  虛拟機網卡資源         如圖3.5可以看到VMware為運作在其上的作業系統提供虛拟網卡支援,該網卡類型即為AMD的PC-NET。在Tornado開發包中已經包含了該類型網卡的驅動程式,但經過測試,在VMware環境中該驅動無法正常工作。

        這時候就要用到WindRiver Tornado 2.2安裝包中的vxworks_end.exe可執行檔案了,該檔案是以前AMD官網曾釋出的用于支援VxWorks的驅動。預設安裝後,在C:\pcnet\vxworks_end路徑得到ln97xEnd.tar1.gz檔案,将該檔案解壓得到ln97xEnd.tar檔案,再次解壓得到target檔案夾。

        将target檔案夾中target\h\drv\end目錄下的ln97xEnd.h檔案和target\src\drv\end目錄下的ln97xEnd.c、Makefile這三個檔案,複制到C:\Tornado2.2\target對應目錄下,替換掉其原有檔案。在替換之前請對要替換的ln97xEnd.h和ln97xEnd.c這兩個檔案做相應的備份,當然下面使用的make指令時候就會用到Makefile檔案了。

下面通過cmd對網卡驅動進行替換:

        (1)搭建指令環境

        打開cmd視窗,輸入c:\tornado2.2\host\x86-win32\bin\torvars.bat指令,按Enter鍵。這個指令用于執行torvars.bat批處理檔案,為以後使用tornado提供的一些指令設定環境變量等參數。

        (2)生成目标檔案

        輸入cd C:\tornado2.2\target\src\drv\end定位到相應目錄,然後執行make CPU="PENTIUM" tool="gnu" ln97xend.o指令。該指令會根據Makefile檔案提供的源檔案之間依賴關系編譯生成目标檔案,這裡要生成到的目标檔案為ln97xend.o。

        (3)删除原有子產品

        複制所生成的ln97xend.o檔案到C:\Tornado2.2\target\lib\pentium\PENTIUM\common目錄下,在執行下面指令前,最好先備份一份libdrv.a檔案。在cmd視窗中執行arpentium -d libdrv.a ln97xEnd.o指令,該指令用于删除libdrv.a中原有的ln97xEnd子產品。

        (5)添加新子產品

執行arpentium -ra iOlicomEnd.o libdrv.a ln97xEnd.o指令,該指令會将我們剛剛建立的新ln97xEnd子產品添加進去。

至此,Tornado相對于VMware的網卡驅動就已經處理完成了。接下來将修改BSP包配置檔案,以實作目标機和主機之間的通信。

修改BSP包配置檔案

        之是以要修改BSP包配置檔案,是因為主機和虛拟機之間不可能沒有依據的建立連接配接和執行。在完成網卡驅動的配置後,适當的對BSP包進行修改,可以保證主機和虛拟機之間的通信能夠順利執行。

         1.建立新的BSP包

        雖然要修改BSP包,但是最好不要對原先的包進行修改,而是複制一份,然後對其進行修改,最後給它起個新的BSP包名。

        這裡将在pcPentium包基礎上進行修改,是以在C:\Tornado2.2\target\config目錄下建一個新的檔案夾,檔案夾名為VMwareBSP,然後将該目錄下pcPentium檔案夾中的所有檔案複制到新建立的VMwareBSP檔案夾中。

         2.修改config.h檔案

修改config.h檔案主要是為了配置IP、定義網卡驅動和顯示控制台等功能。首先,用代碼編輯器打開VMwareBSP檔案夾中的config.h檔案。

        (1)指定IP和FTP伺服器

        在config.h使用查找功能定位到如下代碼段:

#elif	(CPU == PENTIUM)
#define DEFAULT_BOOT_LINE \
	"fd=0,0(0,0)host:/fd0/vxWorks.st h=90.0.0.3 e=90.0.0.50 u=target"
           

        然後對#define下的代碼進行修改,修改後該代碼段如下所示:

#elif	(CPU == PENTIUM)
#define DEFAULT_BOOT_LINE \
	"lnPci(0,0)host:d:\\vxWorks h=192.168.100.1 e=192.168.100.2 u=target pw=vxworks tn=target"
           

        上面修改的那段代碼大緻含義如下:

  • lnPci(0,0):指定了使用第0個網卡和第0個處理器,lnPci這個辨別會因為使用的驅動程式不同而有所不同,但這裡用lnPci就可以了。
  • host:指定你的主機的名字,使用host就可以(或者檢視你的主機名稱,在我的電腦上右鍵,屬性,計算機名)。
  • d:\\vxWorks:指定了VxWorks映象下載下傳的完整路徑。
  • h=192.168.100.1:是主機的IP位址,可以根據實際情況修改。
  • e=192.168.100.2:是目标機的IP位址,可以根據實際情況修改。
  • u=target:指定了FTP伺服器的使用者名,這個FTP就是用來下載下傳VxWorks映象的。
  • pw=vxworks:是FTP伺服器與使用者名target對應的密碼,這裡的使用者名和密碼其實就是在第1小節中學習設定FTP Server時候所建立的。
  • tn=target:指定目标機的名字,任意指定即可。

        主機的IP和目标機的IP對于初學者來說經常容易出錯!在這裡指定了目标機IP後,通過Tornado編譯生成的BootRom裡面相關的IP也是設定好的,這就相當于上面的設定就成了該BootRom的預設設定。當然也可以在這裡不做修改,而是在BootRom引導虛拟機後通過c指令進行修改。是以我們隻需要将主機IP設定成h值所對應的IP位址即可。

要注意設定主機IP不是設定本地連接配接的網卡,而是虛拟機提供的虛拟網卡VMware Network Adapter VMnet1。這個網卡就相當于在本機電腦Windows系統和虛拟機的BootRom引導程式之間建立的通信橋梁。右擊該網卡,選擇屬性,打開Internet協定(TCP/IP)對話框,輸入相應的IP,如圖3.6所示。

通過FTP Server加載VxWorks映像通過FTP Server加載VxWorks映像

圖3.6  設定主機VMnet1網卡IP         (2)指定網卡驅動

        指定網卡驅動,就是将相關的網卡處于定義狀态。預設情況下除了Intel 8255網卡,其它網卡都處于未定義狀态。在config.h中使用查找功能定位到如下代碼段:

#define INCLUDE_END             /* Enhanced Network Driver Support */

#undef  INCLUDE_DEC21X40_END    /* (END) DEC 21x4x PCI interface */
#undef  INCLUDE_EL_3C90X_END    /* (END) 3Com Fast EtherLink XL PCI */
#undef  INCLUDE_ELT_3C509_END   /* (END) 3Com EtherLink III interface */
#undef  INCLUDE_ENE_END         /* (END) Eagle/Novell NE2000 interface */
#define	INCLUDE_FEI_END         /* (END) Intel 8255[7/8/9] PCI interface */
#undef	INCLUDE_GEI8254X_END    /* (END) Intel 82543/82544 PCI interface */
#undef  INCLUDE_LN_97X_END      /* (END) AMD 79C97x PCI interface */
#undef  INCLUDE_ULTRA_END       /* (END) SMC Elite16 Ultra interface */
           

        要定義AMD的網卡,隻需将INCLUDE_LN_97X_END前面的#undef改為#define即可。完成修改後的代碼段如下所示:

#define INCLUDE_END             /* Enhanced Network Driver Support */

#undef  INCLUDE_DEC21X40_END    /* (END) DEC 21x4x PCI interface */
#undef  INCLUDE_EL_3C90X_END    /* (END) 3Com Fast EtherLink XL PCI */
#undef  INCLUDE_ELT_3C509_END   /* (END) 3Com EtherLink III interface */
#undef  INCLUDE_ENE_END         /* (END) Eagle/Novell NE2000 interface */
#define	INCLUDE_FEI_END         /* (END) Intel 8255[7/8/9] PCI interface */
#undef	INCLUDE_GEI8254X_END    /* (END) Intel 82543/82544 PCI interface */
#define  INCLUDE_LN_97X_END      /* (END) AMD 79C97x PCI interface */
#undef  INCLUDE_ULTRA_END       /* (END) SMC Elite16 Ultra interface */
           

        (3)顯示控制台

        在前面制作虛拟軟驅引導BootRom的時候已經提到過,預設情況下VxWorks 5.5不顯示控制台。如果需要顯示控制台,隻需要将如下代碼段:

#undef INCLUDE_PC_CONSOLE                /* PC keyboard and VGA console */
           

        修改為如下代碼段即可。

#define INCLUDE_PC_CONSOLE                /* PC keyboard and VGA console */
           

         3.修改sysLn97xEnd.c檔案

        除了需要修改config.h檔案外,還需要對該目錄下的sysLn97xEnd.c檔案做簡單的修改。打開該檔案定義到如下代碼段:

sprintf (paramStr, paramTemplate,
                 endUnit,                     /* END unit number */
                 pciRsrc[endUnit].bar[1],     /* memory-mapped IO base */
                 pciRsrc[endUnit].bar[0],     /* IO address space base */
                 PCI2DRAM_BASE_ADRS,          /* host PCI mem. base */
                 pciRsrc[endUnit].irqvec,     /* IRQ vector */
                 pciRsrc[endUnit].irq,        /* IRQ number */
                 LN97X_CSR3_VALUE,            /* csr3 register value */
                 LN97X_OFFS_VALUE,            /* offset */
                 LN97X_RSVD_FLAGS,            /* flags (reserved) */
                 &ln97xStrDesc[typeIdx]       /* device description */
                );
           

        修改memory-mapped IO base(記憶體映射IO基礎)為NONE即可,修改後的代碼段如下所示:        

sprintf (paramStr, paramTemplate,
                 endUnit,                     /* END unit number */
                 NONE,                        /* memory-mapped IO base */
                 pciRsrc[endUnit].bar[0],     /* IO address space base */
                 PCI2DRAM_BASE_ADRS,          /* host PCI mem. base */
                 pciRsrc[endUnit].irqvec,     /* IRQ vector */
                 pciRsrc[endUnit].irq,        /* IRQ number */
                 LN97X_CSR3_VALUE,            /* csr3 register value */
                 LN97X_OFFS_VALUE,            /* offset */
                 LN97X_RSVD_FLAGS,            /* flags (reserved) */
                 &ln97xStrDesc[typeIdx]       /* device description */
                );
           

        至此,所有需要修改的内容都已經完成了。之是以大費心思的對原BSP封包件和網卡驅動進行修改隻有一個目的,那就是能在VMware虛拟機中實作對VxWorks系統的調試和運作。那樣即使沒有實驗闆和目标機,依然可以學習VxWorks相關知識和進行相關的實驗了。

加載VxWorks系統映像

        這裡将使用前面修改過VMwareBSP包來制作BootRom引導程式和編譯VxWorks映像。制作BootRom引導盤前面已經練習過了,編譯和加載VxWorks映像将實作在前面搭建好的虛拟機中運作完整的VxWoks系統。

         1.準備材料

        要想實作在虛拟集中啟動VxWorks系統,另外需要準備的材料主要有:

  • 使用VMwareBSP包編譯的BootRom虛拟軟驅引導盤的鏡像檔案。
  • 使用VMwareBSP包編譯的VxWorks系統映像檔案。
  • FTP Server伺服器。
  • 配置好的VMware虛拟機。

         2.制作BootRom引導盤

        前面已經做過一次BootRom引導盤,使用的是虛拟軟驅,而且需要把它做成鏡像檔案才能引導虛拟機啟動。現在使用前面修改好的VMwareBSP包重新編譯一個BootRom。

        (1)編譯BootRom

        打開Tornado軟體,單擊菜單項Build | Build Boot Rom…指令。在彈出的Build Boot Rom對話框中選擇VMwareBSP包,單擊OK按鈕。如圖3.7所示。

通過FTP Server加載VxWorks映像通過FTP Server加載VxWorks映像

圖3.7  編譯建立BootRom         單擊OK按鈕後,要等待Build Output視窗出現Done字樣表示結束,如圖3.8所示。

通過FTP Server加載VxWorks映像通過FTP Server加載VxWorks映像

圖3.8  編譯輸出視窗         如果期間出現error表示編譯出錯了,請檢查前面對代碼的修改是否正确。修改的時候最好不要把原先的代碼注釋起來,而是删掉,已避免出現不必要的文法錯誤。

        (2)制作引導盤

        前面通過使用RamDiskNT軟體虛拟了一個軟碟,制作軟碟引導盤非常簡單,隻需要在cmd中依次輸入下面三行指令即可完成。

c:\tornado2.2\host\x86-win32\bin\torvars.bat

cd c:\tornado2.2\target\config\VMwareBSP

mkboot a: bootrom
           

        這三行指令在前面也已經用過了,最後結果也和圖2.7類似。

        (3)制作軟碟鏡像檔案

        打開RamDiskNT軟體,單擊對話框右下角的Save Disk Image按鈕,這時在C槽就會多出一個ramdskNT.img鏡像檔案。用虛拟機加載該鏡像檔案引導啟動能得到軟驅啟動相同的效果。虛拟機中的軟驅設定,如圖2.9所示。在這裡也将使用該鏡像檔案來引導BootRom程式啟動。

         3.編譯VxWorks系統

        編譯VxWorks系統需要三步:首先建立VxWorks系統項目;然後選擇需要的元件;最後編譯建立VxWorks系統映像。

        (1)建立VxWorks系統項目

        打開Tornado軟體,單擊菜單項File | New Project…指令。在彈出的Create Project in Workspace…對話框中選擇Create a bootable VxWorks image…選項,并單擊OK按鈕,如圖3.9所示。

通過FTP Server加載VxWorks映像通過FTP Server加載VxWorks映像

圖3.9  建立新項目         在彈出新對話框中使用預設的檔案名即可,然後單擊Next按鈕。在新對話框中選擇A BSP單選按鈕,并選擇VMwareBSP,如圖3.10所示。

通過FTP Server加載VxWorks映像通過FTP Server加載VxWorks映像

圖3.10  選擇BSP包         完成BSP包選擇後,單擊Next按鈕。在最後的對話框中單擊Finish按鈕,即可完成VxWorks系統項目的建立。

        (2)選擇需要的元件

        這裡需要額外選擇的元件為:Telnet server和target shell components。選擇元件很簡單,隻需要在Workspace中選擇VxWorks頁籤,右擊需要的元件,在彈出的右鍵菜單中單擊Include…指令,最後保持預設選項單擊OK按鈕即可完成選擇。元件被選擇後會顯示為粗體樣式,如圖3.11所示。

通過FTP Server加載VxWorks映像通過FTP Server加載VxWorks映像

圖3.11  選擇元件         (3)編譯VxWorks系統項目

        在Tornado內建開發環境中,單擊菜單項Build | Build或Rebuild All指令即可完成VxWorks系統項目的編譯和建立工作,然後可以在項目檔案夾中找到VxWorks系統映像檔案。

        編譯建立完成後,打開C:\Tornado2.2\target\proj\Project0\default目錄,因為剛剛建立的項目名為Project0是以編譯生成的VxWorks也在該檔案夾。複制VxWorks檔案到D盤根目錄,筆者得到的VxWorks檔案為1.23M。之是以要複制它到D盤,是因為之前在修改config檔案的時候,指定的目标機是從D盤讀取系統映像檔案的。

         4.引導并加載VxWorks作業系統

        現在引導盤和系統都已經準備好了,包括前面也已經設定好了主機的IP位址;FTP Server中的使用者名和密碼包括根目錄也都和config.h中修改的相比對;目标機的預設網絡配置包括連接配接FTP的使用者名和密碼也已經編譯到了BootRom中。

        (1)啟動FTP Server

        因為之前已經設定好了FTP Server伺服器中的使用者名和密碼還有一些其它的設定,是以現在隻需要把它啟動起來即可。要注意在加載VxWorks系統的時候要始終保持FTP Server的啟動狀态。

        (2)引導啟動BootRom

        引導啟動BootRom和前面是一樣的,虛拟機中的設定可參考圖2.8和圖2.9。設定好後,單擊綠色三角箭頭啟動虛拟機。

        引導系統啟動之後,首先單擊滑鼠左鍵把焦點轉移到虛拟機中的系統,然後按任意鍵打斷BootRom倒計時。鍵入p指令可檢視引導參數,如圖3.12所示。

通過FTP Server加載VxWorks映像通過FTP Server加載VxWorks映像

圖3.12  p指令檢視引導參數         可通過按Ctrl + Alt組合鍵,把滑鼠焦點轉移到Windows系統。在通過p指令檢視引導參數的時候,如果有什麼不對,可通過使用c指令進行修改。修改完成後,使用@指令開始加載VxWorks作業系統映像。加載完成後,如圖3.13所示。

通過FTP Server加載VxWorks映像通過FTP Server加載VxWorks映像

圖3.13  加載完成後的VxWorks作業系統         加載完成後,切換到FTP Server視圖視窗可檢視FTP所顯示的下載下傳資訊,如圖3.14所示。

通過FTP Server加載VxWorks映像通過FTP Server加載VxWorks映像

圖3.14  FTP下載下傳資訊         至此,已經完成了幾乎所有的在虛拟機中引導和搭建VxWorks系統環境的操作。不過有一點要搞清楚的就是:前面經曆的這麼多操作僅僅是為了搭建一個可以做實驗的平台,如果順利的完成了這些操作,那麼真正的學習VxWorks才剛剛開始。