日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在虚拟机上运行vxWorks

發布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在虚拟机上运行vxWorks 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Vxworks是一個嵌入式系統,主要運行在arm、ppc、mips等嵌入式處理器上,它同樣可以運行在X86處理器上。風河公司開發的tornado開發環境就

包括了pentium版本,并且發布了相應的bsp。因此我們可在vmware虛擬機上運行vxworks,利用虛擬機的功能,我們不需要額外的計算機硬件就可

以開始我們的實驗。

?

系統引導

計算機系統上電后,首先需要執行引導程序,然后加載操作系統。嵌入式系統中一般是將引導程序(稱之為bootrom)固化在ROM芯片(也稱為

bootrom,指的是物理硬件)中。系統上電后執行ROM中的引導程序,將操作系統由flash(或硬盤)加載到內存。對于PC而言,系統上電后運行BIOS

程序,之后將軟盤或則硬盤上的引導扇區載入內存執行引導過程,引導程序再將操作系統加載到內存中啟動。vmware的虛擬硬盤開始時沒有安裝

引導程序,因此無法從硬盤引導。因此我們需要制作一個引導軟盤來引導系統加載vxworks。我們的第一個實驗就是編譯引導程序鏡像,制作引導

盤。

?

制作引導盤

首先要在你的PC上Tornado 2.2 for pcPentium開發環境。另外需要安裝pcPentium的BSP包,這個軟件包可以到風河公司的網站免費下載。

制作引導盤當然還需要一張軟盤,但是目前的PC基本都不使用軟盤軟驅了(如果你的古董機還有軟驅的話,那么恭喜你,你只需要一張軟盤就搞定了)。

好在vmware可以直接使用軟盤鏡像并且可以直接創建軟盤鏡像,因此我們在vmware中安裝一個虛擬的windowsxp系統,以便在虛擬的windowsXP系統中

將軟盤鏡像格式化,并制作啟動軟盤。當然也可以使用虛擬軟驅RamDiskNT在主機上使用軟盤鏡像。

Ok,準備工作做好了,我們開始編譯bootrom。你可以通過tornado集成開發環境的菜單命令build boot rom。

?

??彈出build boot rom對話框,我們選擇pcpentium BSP、編譯bootrom、工具使用gnu

?

?

?

編譯完成后可以在$WIND_BASE/target/config/pcPentium目錄下找到編譯出來的bootrom文件。

我們也可以使用命令行方式編譯bootrom,進入cmd命令行界面,進入

$WIND_BASE/target/config/pcPentium目錄,目錄中有一個Makefile文件,我們就是使用這個makefile文件來編譯bootrom。實際集成開發環境也是使用它

來編譯的。編譯之前我們需要設置一下所需的環境變量:

set WIND_BASE=D:/Tornado2.2

set WIND_HOST_TYPE=x86-win32

實際上tornado已經提供了一個批處理文件用于設置相關的環境變量,這個文件就是

$WIND_BASE/host/x86-win32/bin/torVars.bat,我們也可以直接運行這個批處理

../../../host/x86-win32/bin/torVars.bat

然后執行命令

make bootrom

就可以在$WIND_BASE/target/config/pcPentium目錄下生成bootrom文件

把上面的命令寫成一個批處理makeBootRom.bat,方便使用,內容如下:

D:/tornado2.2/host/x86-win32/bin/torVars.bat

cd %WIND_BASE%/target/ config/pcPentium

make bootrom

?

好了,編譯成功。下一步使用如下命令創建引導盤:

mkboot a: bootrom

mkboot.exe是tornado提供的制作啟動盤的工具,a盤是軟盤的盤符,bootrom就是我們的引導鏡像文件。

?

將制作好的引導盤載入虛擬機中:

?

?

?

?

?

?

?

虛擬機上電后自動從軟盤啟動,出現如下界面。

?

?

是的,你沒看錯,系統確實已經成功啟動,只不過vxworks系統默認是不接受任何輸入輸出的。因此我們看不到它運行的任何東西,也無法操作它。

這樣一個界面讓人很無語,這跟一個人變成了瞎子瘸子沒什么分別。下一步,我們將console組件加入到bootrom中。

打開$WIND_BASE/target/config/pcPentium/config.h文件,找到

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

將它改為:

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

那么結合上下文:

#ifdef INCLUDE_PC_CONSOLE

#?? define PC_CONSOLE?????? ????(0)????? /* console number */

#?? define N_VIRTUAL_CONSOLES?? (2)????? /* shell / application */

#endif /* INCLUDE_PC_CONSOLE */

很明了,定義這個宏之后console就打開了。重新編譯bootrom并制作啟動軟盤。在虛擬機中運行,會看到如下界面:

?

?

輸入p命令,查看系統的啟動參數,其意義如下:

boot device:fd=0,0 ——啟動設備為軟驅,0,0表示第一個軟驅,3.5寸盤

unit number:0 ——設備單元號,一般為0

processor:0 ——處理器編號,一般為0

host name:host ——主機名,訪問主機時用到,比如從主機復制文件:cp “host:src”, “./dest”

file name:/fd0/vxWorks.st ——vxworks鏡像文件(包括了完整的路徑)

inet on Ethernet (e):90.0.0.50 ——本地網卡ip地址

host inet(h):90.0.0.3 ——主機ip地址

user (u):target ——用戶名,用來訪問ftp服務器,一般都是主機

flags (f):0 ——標識,十六進制數,它的意義下面再講

?

?

?

?

BOOT_LINE

?

?

bootrom支持從本地磁盤上加載vxworks系統鏡像文件,也支持從網絡加載vxworks系統鏡像文件。在系統開發階段需要頻繁的編譯

和加載系統鏡像,通常我們使用網絡加載的方式,這樣在主機上修改完代碼,編譯之后就可以通過網絡加載到目標機上運行。而

在系統開發后期,或者系統發布正式運行時,則設置為從本地磁盤加載,此時我們可以將系統鏡像文件發在本地磁盤上,開機即

可自動加載運行。從上面的參數可以看出,系統默認從軟驅加載。可以通過c命令修改這些參數,具體的修改步驟就不說了。也可

以通過配置文件中的默認bootline來修改這些默認的參數。

打開$WIND_BASE/target/config/pcPentium/config.h文件,找到cpu==pcPentium選項下:

#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"

這就是默認的bootline,bootline的格式如下:

bootDev(unitNum,procNum) hostname:bootFile e=ead b=bad h=had g=gad u=username pw=password f=flags tn=targetName s=startupScript o=other

具體含義:

bootDev / 設備名,軟盤:fd; 硬盤:ATA;網絡要根據網卡的類型來做:NE2000及其兼容網卡為ENE,3COM以太網卡為ELT,Intel網

卡為EEX,Intel82559網卡為fei ,3C905B PCI網卡為elPci。

unitNum / 設備單元號,一般指為0

procnum / cpu的處理器號,一般為0

flags / 標識,十六進制數,意義如下:

0x01: 關閉對處理器0的系統控制

0x02: 將局部symbols和全局symbols裝入目標機symbols表

0x04: 禁止自動啟動(即由用戶輸入boot line)

0x08: 快速boot(不計數等待用戶輸入)

0x40: 使用BOOTP or DHCP client

0x80: 使用TFTP獲取image,否則使用RSH或FTP,用FTP時pw不為空

0x100: 使目標機登記為一個代理ARP client

ead / 目標機ip地址,此值如為空,網絡接口不被幫定

bad / 背板接口

had / 主機ip地址

gad / 網關地址,如果主機和目標機不在一個局網里,需要

bootFile: / 存放vxworks image的路徑

usr: / 使用FTP或RSH時的用戶名

passwd: / ftp password

other: / 從網絡啟動時此值可為空,當從軟盤或硬盤啟動時,如果此值為你的網絡設備,boot會為你綁定網絡設備

hostname: / 主機名,任意

targetName:/目標機名

startupScript: / 腳本名,在boot以后的target shell里執行

?

因為我們要做很多實驗,還是把它配置成網絡加載方便一點。修改為:

#define DEFAULT_BOOT_LINE /

???????? "lnPci (0,0)host:d://ftp//vxWorks h=192.168.1.1 e=192.168.1.2 u=target"

這里詳細講解一下設備名稱,對于不同的設備,其命名格式不同,對于塊設備的命名規則我們可以在bootconfig.c

文件的bootLoad函數中找到對應的格式化字符串,比如軟驅的格式是fd=x,x,可以找到如下語句:

???????? ??? sscanf (params.bootDev, "%*2s%*c%d%*c%d", &drive, &type);

其中"%*2s%*c%d%*c%d"就是對應的格式,星號表示此數據忽略。再例如ATA硬盤其格式字符創為"%*3s%*c%d%*c%d";

對于網卡,則需要使用驅動程序中定義的名稱,vxworks一般使用END驅動(Enhanced Network Driver),在驅動程序

提供的xxxEndLoad函數會返回一個設備名。比如AMD的PCNET-PCI網卡,驅動程序文件為ln97xEnd.c,其中ln97xEndLoad

函數中會返回LN_97X_DEV_NAME

??? if (initString [0] == NULL)

??????? {

??????? bcopy ((char *)LN_97X_DEV_NAME, initString, LN_97X_DEV_NAME_LEN);

???????? DRV_LOG (DRV_DEBUG_LOAD, "Returning string.../n", 1, 2, 3, 4, 5, 6);

??????? return ((END_OBJ *)OK);

??????? }

LN_97X_DEV_NAME的定義在頭文件ln97xEnd.h中:

#define LN_97X_DEV_NAME ???????? "lnPci"????? /* name of the device */

??

修改網卡驅動程序

?

Vmware自帶的虛擬網卡是AMD的PCnet-PCI, vxworks自帶的驅動程序(頭文件為target/h/drv/end/ln97xEnd.h)據測試在vmware中無法工作。

大家可以試一下,在config.h文件中定義INCLUDE_LN_97X_END編譯宏,執行make bootrom命令生成一個bootrom進行測試,你將得到下面的

錯誤提示:

?

因此需要從AMD官方網站下載最新驅動。解壓后得到一個tar目錄,將這個目錄覆蓋$WIND_BASE/tar目錄,然后運行

$(WIND_BASE)/host/x86-win32/bin/ torVars.bat

進入$(WIND_BASE)/target/src/drv/end目錄,運行:

make CPU=PENTIUM tool=gnu ln97xend.o

重新定位到$(WIND_BASE)/target/lib/pentium/PENTIUM/common目錄,并將上一步生成的文件ln97xend.o復制到此目錄下。

備份此目錄下的文件libdrv.a;運行命令

arpentium -d libdrv.a ln97xEnd.o,刪除libdrv.a中原有的ln97xEnd模塊,然后再運行命令:

arpentium -ra iOlicomEnd.o libdrv.a ln97xEnd.o

將我們剛剛創建的新模塊添加進去。這里的-r選項是表示替換,-a選項表示文件放在指定文件(iOlicomEnd.o)之后。

?

然后我們需要修改配置文件,使bootrom中包含我們的網卡驅動程序,確保

#define?INCLUDE_END?/*?Enhanced?Network?Driver?Support?*/

#define?INCLUDE_LN_97X_END?/*?(END)?AMD?79C97x?PCI?interface?*/

而其它的網卡驅動宏都是#undef的。

?

修改sysLn97xEnd.c

打開C:/tornado2.2/target/config/pcPentium目錄下的sysLn97xEnd.c文件,先定位到 “memory-mapped IO

base”這段文字,然后將其前面的參數由pciRsrc[endUnit].bar[1]修改為NONE,保存即可,

pciRsrc[endUnit].bar[1],???? /* memory-mapped IO base */

NONE, /* memory-mapped IO base */

編譯bootrom并制作引導盤啟動虛擬機,可以看到錯誤沒了,如下圖:

?

?

編譯vxWorks

?

為了測試一下網卡驅動功能正常,我們可以編譯一個vxworks鏡像文件,然后通過ftp加載到虛擬機中運行。

編譯vxworks文件很簡單,只需要在target/config/pcPentium目錄下執行命令

make vxWorks

將生成一個vxWorks文件,把這個文件放到ftp目錄下。并且打開ftp服務器(這里使用tornado自帶的wftpd32.exe),

添加一個新用戶user=target, password=target。使用引導盤啟動虛擬機。引導程序將自動加載這個鏡像并運行:

可以看到,Attaching network interface lo0… done。并且vxworks已經正常運行。

?

加入SHELL組件

??

上面看到的這個界面與我們平時在實驗室看到的不一樣:沒有大大的vxworks的logo。原因是vxworks默認不包含shell組件,需要修改config.h文件:

#define INCLUDE_SHELL

重新執行makevxwoks命令,生成文件加載到虛擬機中,就會出現如下界面,不過此時的shell還不能識別命令,因為制作的鏡像中沒有符號表,

因此無法解析命令。這樣的shell簡直就是廢材。

?

?

?使用符號表文件

?

要shell識別命令,需要提供符號表文件。上面的makefile vxWorks命令在生成vxWorks文件的同時還生成了一個符號表文件vxWorks.sym,這個文件

可用于主機上的WDB進行調試。首先要配置目標機,在tornado中選擇tools/target serves/config菜單命令:

?

彈出如下對話框,可以新建一個目標機配置,在Core File and Symbols選項中指定vxWorks.sym文件,另外需要指定后臺(目標機為后臺,主機為前臺)通信方式為wdbrpc并設置IP地址:?

?

?????????????????????

?

?

?

設置完成,單擊OK。或者直接單擊Launch啟動,此時在windows的任務欄會出現target-server的小圖標,雙擊它可以查看詳細信息:

?

?

?

?

?

?

連接成功后,在主界面上的下拉列表中選擇配置的target-server,并單擊->i圖標啟動shell,這時候就可以執行輸入的命令了。如下圖:

?

?

?

?

雖然使用tornado集成環境進行調試有直觀的優勢,并且支持源碼級調試,一切看起來都很美。但是,目標機與主機之間的通信通常比較耗時,有時候由于

種種原因還可能出現目標機連接不上的問題。在實際使用時,用得比較多的還是直接在目標機的控制臺中輸入命令進行調試。這要求把符號表和代碼一起

下載到目標機上,這里又有兩種方式:一種是符號表文件放在主機上,系統啟動時從主機同步符號表;另一種是直接將符號表編譯到vxWorks鏡像文件中。

?

?

從主機同步符號表

?

這種方式需要修改配置文件,在config.h中添加

#define INCLUDE_SYM_TBL_SYNC

當然最好還是加上那些show函數,否則只能打斷點卻不能查看任務狀態等重要信息,就像瞎子走路,只能邁動兩腿,卻不知身在何方,是很郁悶的。添加如下選項:

#define INCLUDE_SHOW_ROUTINES

編譯之后,將vxWorks文件和vxWorks.sym文件都放到ftp目錄下。啟動虛擬機,我們看到它自動將符號表同步了。然后我們就可以直接在控制臺輸入命令進行操作。

?

?

?

?

編譯vxWorks.st

?

?

最為直接的一種方式就是將符號表編譯到vxWork文件中,這樣不需要連接主機就可以在控制臺上進行操作了。編譯方式也很簡單:

make vxWorks.st

這樣就搞定了。雖然直接將符號表嵌入到vxWorks文件中,鏡像文件的體積會增大,但是現在的硬件這么便宜。有的嵌入式系統甚至配置了2G內存。

因此這個問題越來越容易解決了。


總結

以上是生活随笔為你收集整理的在虚拟机上运行vxWorks的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日日夜夜添| 日韩av男人天堂 | 国产免费一区二区三区最新不卡 | 亚洲性一区 | 人人妻人人澡人人爽欧美一区双 | 亚洲成肉网 | 国语对白做受 | 污污小视频 | 国产精品免费视频观看 | 色天天色综合 | 音影先锋av资源 | 女人的天堂av | 欧美xxxxx高潮喷水麻豆 | 国产人与禽zoz0性伦 | 热热热av| 黄色激情四射 | 哺乳援交吃奶在线播放 | 青青视频在线免费观看 | v天堂中文在线 | 67194成人 | www.99av| 最新av在线网站 | 91精品国产福利在线观看 | 精品视频久久久久 | 五月天中文字幕在线 | 色婷五月天 | 人妻在线一区二区三区 | 天堂网av在线 | 黄色污网站在线观看 | 福利在线免费观看 | 人妻在卧室被老板疯狂进入 | 久久97人妻无码一区二区三区 | 五月婷在线观看 | 淫僧荡尼巨乳(h)小说 | 亚洲呦呦 | 91porny在线| a级黄色小视频 | 欧美成人短视频 | 日韩av中文在线观看 | 男女视频久久 | 日本寂寞少妇 | 免费精品在线 | 亚洲偷偷| 五月深爱婷婷 | 日本国产在线观看 | 欧美性猛交xxxx| 欧美极品一区 | 亚洲国产精品女人 | 天天射视频 | 51久久久 | 国产第一毛片 | 91精品国产综合久久福利 | 日本黄频| 刘亦菲毛片一区二区三区 | 乌克兰毛片 | 91国产免费视频 | 天天射日| 欧美午夜三级 | 丁香婷婷久久久综合精品国产 | 国产精品视频在线播放 | 嫩草嫩草嫩草嫩草嫩草嫩草 | 日韩欧美国产高清 | 91禁外国网站 | 亚洲精品中文字幕乱码无线 | 先锋资源一区二区 | 色狠狠综合网 | 亚洲精品人妻无码 | 好吊色视频在线观看 | 亚洲精品www久久久久久 | 麻豆精品a∨在线观看 | 97精品熟女少妇一区二区三区 | 成人在线国产精品 | 美日韩成人av | 久久亚洲综合色 | 国产三级午夜理伦三级 | 99re这里只有精品在线观看 | 大乳女喂男人吃奶视频 | 国产chinesehd精品 | 成人av免费观看 | 四色成人网 | jzzjzzjzz亚洲成熟少妇 | 视频一区中文字幕 | 已婚少妇美妙人妻系列 | 狠狠干2024| 韩国女同性做爰三级 | 四虎影视免费观看 | 一起草视频在线播放 | 亚洲综合大片69999 | 久久99精品久久久久 | 久久久无码人妻精品无码 | 成人在线免费 | 亚洲熟妇无码一区二区三区 | 人妻av一区二区三区 | 九九啪| 北条麻妃99精品青青久久 | 黄色草逼网站 | 日韩成人在线一区 | 日日噜噜噜噜人人爽亚洲精品 | 久久激情网站 |