vxworks 笔记
vxworks 筆記
?
1????安裝Vxworks 有兩張安裝盤,安裝有以下步驟:
1)????????安裝tornado 2.2.1
使用第一張盤,注意安裝時必須保證當前沒有安裝過tornado,如果安裝過必須從注冊表中清空所有的tornado;選擇“ManualLicense”,即License手動安裝
?
2)????????安裝BSP/Drivers
第一張盤和第二張盤都用了,不知什么東西,也不懂
?
3)????????安裝License
復制license.dat文件到某個位置,然后設置“系統環境變量”,指向這個文件license.dat,注意必須是“系統環境變量”,不能是“用戶環境變量”
這就是手動安裝License 環節。
?
安裝完成,tornada 被安裝到D:\Tornada2.2
?
2????調整
本次任務是完成vxworks 環境下ppc 85xx系列的SDK發布環境,因此需要將之前準備好的ppc 85xx環境復制過來。當時直接將以前開發人員的target、host目錄直接復制過來覆蓋即可,注意備份。
?
3????vxWorks 簡介
3.1??????????????????目錄樹
下圖為目錄樹結構,目前我們僅關注的是host、target兩個;如果獲取幫助可以直接查看docs中的books.html即可。
?
3.2??????????????????工具包
編譯vxworks 時使用gnu工具,包括make、grep等等,這些工具都是專門編譯好的windows 程序,具體位置在host/x86-win32/bin/目錄下,因此在使用腳本編譯時必須將該目錄包含到path環境變量中。
?
3.3??????????????????交叉編譯工具鏈
交叉編譯工具鏈包括編譯器、頭文件、庫文件。
1)????????編譯器
gcc編譯器位置在host\gnu,當前使用gcc作為編譯器
vxworks 提供的diab編譯器,位置在host\diab
?
2)????????頭文件
可以理解為Linux 下的libc庫頭文件,此為vxworks頭文件,位置在target/h,注意,此目錄下不僅在C語言頭文件,也包含vxworks的編譯框架makefile頭文件
?
3)????????庫文件
此為vxworks庫文件,位置在target/lib
?
?
3.4??????????????????BSP
即板級支持包,位置在target/config/目錄下,基本上每個目錄為一個BSP,每個硬件類型都有一個BSP對應,特例如下:
目錄comps,為所有BSP的基本模塊描述文件
目錄all,所有BSP的公共部分,當前放置在xvfi8548目錄下了,由于xvfi8548的BSP中Makefile如此寫,因此沒有更改all的位置。
?
3.5??????????????????project
位置在target/proj/目錄下,對應使用tronado集成環境下的工程,創建一個工程即生成一個目錄,當前使用的工程為xvfi8548。
?
3.6??????????????????Image
vxworks image分兩種:
bootrom,即引導器,用于加載和啟動vxworksimage,bootrom由BSP編譯獲得,這個東西目前是通過燒錄器燒錄到flash上,相當麻煩;希望可以使用uboot來代替。
vxworks,即vxworks主程序,相當于Linux內核加root文件系統,由BSP外加啟動程序實現。由target/proj/xvfi854/目錄下編譯獲得。
?
?
4????編譯框架
vxworks編譯使用gnu make工具,工程之間互相獨立,BSP也互相獨立。目前需要編譯的東西就是bootrom和vxworks兩個。
下面以編譯vxworks為例詳細介紹整個編譯過程。
4.1??????????????????編譯組成
當前工程下的Makefile和target/h/make 目錄組成,在編譯之前務必要設置環境變量,這些環境變量有:
WIND_BASE????????????? 此為vxworks安裝的主目錄,也即host、target目錄的上一層目錄
WIND_HOST_TYPE? 即當前系統的架構,均為x86-win32
PATH??????????????????????????? 主要是添加工具包路徑和編譯工具鏈路徑
?
設置好環境變量后,在需要編譯的工程(或者BSP)目錄下執行make即可,比如當前的vxworks工程在target/proj/xvfi8548/目錄下,直接到該目錄下make 即可。
?
vxworks的編譯組成相當復雜,實在是討厭至極啊。
4.1.1????????Makefile
工程的Makefile做了如下的事情:
1)????????定義需要編譯的.o文件集合,以及這些.o文件的編譯方式,某些.o文件對應的.c文件來自于BSP,某些來自當前目錄
2)????????包含一堆其他的makefile,其中最重要的是兩個,defs.project和rules.project
3)????????定義編譯參數CFLAGS,注意在PPC環境下務必要使用-mstrict-align確保對齊訪問
4)????????定義鏈接參數LIBS,鏈接其他外部模塊,這里包括ezdriver的模塊和SDK模塊
?
注意這個Makefile沒有指定default要做什么,這個default 目標在defs.project中定義
?
4.1.2????????defs.project
顧名思義,該文件主要是定義變量。
定義了default目標,它依賴于exe條件,注意,這個default是整個Makefile的第一個目標,所以make 命令會以它做為編譯的目標。這個exe又在rules.project中定義。
???????? 還要注意其中的CFG_GEN變量,它用來產生依賴關系,但由于我們不會在vxworks 上做多少二次開發,不需要生成什么依賴,全部重新編譯即可,因此后續可以看到將這個生成依賴的命令去年了。
???????? 同時這個文件包含了一系列的makefile文件,以下詳述:
1)????????defs.link
定義link(鏈接)時的一些變量
2)????????defs.x86-win32
定義一堆gnu工具,包括RM、CP等等
3)????????defs.vxworks
定義POSTLINK_MODULES,包括生成ctdt.o這個文件,該文件以后在鏈接vxworks image時會用到
4)????????make.ppc85xxgnu
定義編譯工具鏈
?
4.1.3????????rules.project
顧名思義,該文件主要定義編譯規則。
終于找到exe目標的規則了,它依賴于$(default_rule),這個default_rule在工程的Makefile中就已經定義了,為vxWorks。
該文件包含了rules.vxWorks,其中定義了vxWorks的編譯規則,它依賴于partialImage.o和POSTLINK_MODULES。而其中的partialImage.o 就是Makefile中定義的.o文件集合聚合生成的。
?
4.2??????????????????編譯過程
4.2.1????????生成.o文件
.o文件集合由Makefile定義,包含sysALib.osysLib.o usrAppInit.o linkSyms.o npclib.o mmuE500LibExt.o i2clib.o bspDebug.omotTsecEnd.o usrprjConfig.o,注意這些文件對應的源文件有些在當前工程下有些在BSP下。
?
4.2.2????????生成partialImage.o文件
該文件由如下文件生成:
1)????????4.2.1編譯生成的所有.o文件
2)????????version.o文件,其源文件位于target/config/comps/src目錄下,版本號文件
3)????????CPU專用庫文件,當前為target/lib/libPPC85XXgnuvx.a
4)????????所有外部庫文件,包括ezdriver編譯的.a和SDK編譯的.a文件
?
注意此處是鏈接過程,但鏈接時如果某函數沒有被調用則不會鏈接進去。
?
4.2.3????????生成vxworks image
該文件由如下文件生成:
1)????????4.2.2生成的partialImage.o文件
2)????????ctdt.o 文件,該文件的源文件ctdt.c是由partialImage.o生成的,內容相當簡單,不知道有什么用處
3)????????symTbl.o文件,該文件的源文件symTbl.c是由partialImage.o生成的,其中包含了所有的導出symbol,包含函數和變量,某個函數是否被編譯進vxworksimage可以直接查看該文件
4)????????dataSegPad.o,源文件位置target/config/comps/src/,代碼段保護文件
?
?
?
?
?
?
???????????????????????????????
?
?
?
?
?
?
?
????????????????????????????????????????????????????????????????????????????????????????????????????????
?
5????啟動調試
vxworks的應用程序均在usrAppInit.c 文件usrAppInit函數中啟動,如果需要vxworks啟動時執行自定義的任務則需要在此函數中嵌入代碼。
目前調試環境是在vxworks shell中,為確保SDK和ezdriver的庫文件均編譯進入,在usrAppInit函數中調用AHE_root函數,但不是啟動時調用,是永遠不可能到達的分支中調用。
?
l? 波特率
目前vxworks和bootrom使用的是9600的波特率,和uboot以及Linux不一樣(115200),這個可以在configAll.h中修改。
?
l? bootrom
bootrom 修改啟動參數無效,當前的bootrom 寫死了ftp server為192.168.6.56,本機地址為192.168.6.91,ftp用戶名、密碼均為w,如果要修改則必須重新刷bootrom,這個問題可以通過修改bootrom來解決,查看文件bootconfig.c,函數bootcmdloop在處理命令’c’時,會將用戶輸入的配置調用函數sysNvRamSet刷新入內存,但目前會失敗,sysNvRamSet函數有太多的實現地方,估計正好編譯了某個不支持內存寫的函數。
?
l? 文件操作
vxworks沒有使用文件系統,但可以打開和關閉文件,在代碼中使用fopen時,vxworks會從FTP server上下載一個文件,unlink時會在FTP server上刪除一個文件。
?
l? NP啟動
NP啟動時會需要打開一個EZdat.dat文件,這個文件貌似是NP的配置,必須的,否則會導致NP異常,因此必須將該文件放置到FTP server上供下載。該文件位置如下:
$(EZDRIVER_DIR)/host/tbs/lib/
?
l? 多次調試
AHE_root函數只能執行一次,再次執行時會報NP初始化錯誤,但仍然可以進行多次測試。在執行完第一次的AHE_root后退出,然后再執行SDK的測試函數即可,此刻NP初始化已經完成,不需要再初始化了。
總結
以上是生活随笔為你收集整理的vxworks 笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: smartgwt (A)
- 下一篇: 2020年,初级、中级-Android-