在項目中需要適配vxWorks,自己總結的遇到的問(wèn)題與解決方法,歡迎大家交流vxWorks使用心得。
Q:
如何顯示板卡CPU、DDR等信息?
A:
coreShow
Q:
如何顯示vxWorks Image版本號?
A:
version
Q:
與任務(wù)相關(guān)的命令
A:
sp function,[arg1],...,[arg9]
-啟動(dòng)任務(wù),最多接受9個(gè)參數,默認的優(yōu)先級100、堆棧20000字節
period n,function,[arg1],...,[arg8]
-創(chuàng )建一個(gè)周期調用function的任務(wù),周期為n秒,最多接受8個(gè)參數
repeat m,function,[arg1],...,[arg8]
-創(chuàng )建一個(gè)反復調用function的任務(wù),調用次數為m,m=0時(shí)永久調用,最多也是8個(gè)參數
ts tidX -掛起任務(wù)
tr tidX -恢復掛起的任務(wù)
td tidX -刪除任務(wù)
i tidX -顯示任務(wù)基本信息,參數為0時(shí)顯示全部任務(wù)
ti tidX -顯示任務(wù)詳細信息,包括寄存器、堆棧等
tt tidX -顯示任務(wù)的函數調用關(guān)系
checkStack tidX -顯示任務(wù)堆棧使用的歷史統計,參數為0時(shí)顯示全部任務(wù)
[其中tidX可以為任務(wù)ID 也可以為任務(wù)名]
Q:
與調試系統相關(guān)的指令
A:
lkup ["string"] -在系統符號表中查找并列出含有"string"字符的函數及全局變量,有兩個(gè)特殊參數:
lkAddr addr -顯示addr地址附近的符號表
l addr,[n] -顯示addr地址開(kāi)始的n條指令的反匯編,n省略時(shí)默認為10條指令
h [n] -n為0時(shí)列出最近執行的shell命令,默認20條;n非0時(shí),設定shell記錄的歷史命令的數目
d [addr,[number],[width]]
-顯示addr地址開(kāi)始的number個(gè)單元的內容,width定制每個(gè)單元的寬度,可以是1、2、4、8
m addr,[width] -按width寬度修改addr地址的內容,width可以是1、2、4、8
memShow 1 -顯示系統分區上空閑和已分配空間的總數等
printErrno value -打印系統定義的錯誤碼的宏
Q:
vxWorks引導后的shell型命令,首先可以使用help查看所有指令來(lái)學(xué)習
A:

Q:
如何啟動(dòng)rtp程序?
A:
1).命令行啟動(dòng)rtpsp /ata0a/rtptest.vxe
2).應用程序里面啟動(dòng)
constchar*argv[]={“/ata0a/測試.vxe“,NULL}
rtpSpawn(argv[0],argv,NULL,100,0x10000,0,0)
Q:
環(huán)境變量
A:
使用 shConfig 命令修改環(huán)境變量:
shConfig(char *config) -參數為NULL時(shí),顯示當前Shell的配置參數,否則設置其參數

SH_GET_TASK_IO
為調用函數設置I/O重定向。ON:重定向到WindSh;OFF:I/O顯示到目標機控制臺。
LD_PATH
LD_SEND_MODULES
設置load模式。
以下3個(gè)用不到
LD_CALL_XTORS
LD_COMMON_MATCH_ALL
DSM_HEX_MOD
Q:
顯示任務(wù)切換調用例程列表
A:
taskSwitchHookShow
Q:
顯示一個(gè)任務(wù)的調用狀況,解析堆棧
A:

Q:
DKM模塊的加卸載指令
A:
ld < test.out 加載test.out模塊到系統
unld id 卸載模塊
Q:
顯示系統中所有加載的模塊
A:
moduleShow
Q:
修改bootrom啟動(dòng)參數
A:

Q:
顯示POSIX消息隊列的信息
A:
mqPxShow
Q:
顯示POSIX信號量的信息
A:
SemPxShow
Q:
顯示信號量的信息
A:
SemShow
Q:
顯示隊列的使用狀況
A:
msgQShow
Q:
顯示host列表
A:
hostShow

Q:
顯示ip信息
A:
ipstatShow

Q:
顯示路由信息
A:
routestatShow
Q:
顯示tcp,udp信息
A:
tcpstatShow,udpstatShow
Q:
顯示連接信息
A:
inetstatShow

Q:
顯示ftp信息
A:
tftpInfoShow
Q:
文件操作
A:
cd
改變工作目錄
ls
列出工作目錄下的文件
pwd
顯示當前工作目錄
copy
拷貝文件
copy “host:cnset.cfg”“/HDisk/cnset.cfg”
remove
刪除文件
remove “/HDisk/trace/error.log”
rename
更改文件名稱(chēng)
Q:
顯示歷史shell指令
A:
shellHistory
Q:
釋放shell內動(dòng)態(tài)分配的字符指針。參數為0,則打印當前所有字符指針;參數為-1,則釋放所有指針

不過(guò)在shell中直接聲明的字符指針,應該用free()來(lái)釋放

Q:
打印指定RTP中的文件描述符?
A:
iosRtpFdShow
Q:
打印IO流中fp的信息
A:
stdioShow

Q:
打印dosFs volume configuration
A:
dosFsShow

Q:
網(wǎng)絡(luò )常見(jiàn)的錯誤碼
A:

Q:
vxWorks 網(wǎng)絡(luò )抓包
A:
命令行切換到C模式,然后輸入pcap命令即可實(shí)現捕獲指定網(wǎng)口的網(wǎng)絡(luò )數據
Q:
workbench怎么將生成的文件自動(dòng)拷貝對應的目錄
A:
1.寫(xiě).bat腳本,右鍵運行
2.添加到POST_BUILD_RULE

Q:
如何在shell切換到其它目錄后回到FTP鏡像目錄
A:
> cd "host:"
Q:
BOOT命令
A:
BOOT命令,啟動(dòng)時(shí)使用,用于查看和修改啟動(dòng)參數等操作。
p,打印配置
c, 修改配置
?, 幫助信息
@,加載內核
Ctrl+X,重新啟動(dòng)
Q:
列舉PCI設備
A:
PciDeviceShow
Q:
系統里面修改驅動(dòng)參數
A:
bootChange
Q:
vxWorks cache一致性問(wèn)題,可使用如下函數解決
A:
實(shí)際flush()/invalidate()函數有如下兩組,功能相同稍有區別:
組1:CACHE_DMA_FLUSH()函數和CACHE_DMA_INVALIDATE()函數
組2:cache Flush()函數和cacheInvalidate()函數
Q:
在vxworks6.x下添加一個(gè)新的驅動(dòng) 一般需要添加6個(gè)文件 分別是
A:
target/src/hwif/xxx 下
xxx.c 和 xxx.mk --- 源文件和makefile文件
target/src/hwif/h/xxx 下
xxx.h -- 頭文件
target/config/comps/vxworks下
xxx.cdf -- cdf文件用于被workbench識別
target/config/comps/src/hwif下
xxx.dc xxx.dr - dc dr用于命令行編譯
Eg: 新加一個(gè)串口驅動(dòng)
vxbUccSio.c
vxbUccSio.h
vxbUccSio.mk
vxbUccSio.dc
vxbUccSio.dr
40vxbUccSio.cdf
Q:
如何判斷是什么文件系統?
A:
chkdsk() & hrfsChkDsk() 和 dosFsShow()
STATUS dosFsShow
(
void * pDevName,
u_int level
)
STATUS chkdsk
(
const char * pDevName,
u_int repairLevel,
u_int verbose
)
STATUS hrfsChkDsk
(
char * path,
int verbLevel,
int flags
)
Q:
添加中斷show
A:
# define INCLUDE_ISR_OBJECTS
# define INCLUDE_ISR_SHOW
# define INCLUDE_ISR_DEFER
Q:
添加EDR信息
A:
#define INCLUDE_EDR_SHOW
#define INCLUDE_EDR_ERRLOG
#define INCLUDE_EDR_PM
#define INCLUDE_EDR_SYSDBG_FLAG
Q:
顯示ICMP信息
A:
icmpstatShow
Q:
vxWorks 存儲分布
A:

Q:
在代碼里面查找符號表,然后加載
A:
status = symFindByName(sysSymTbl, "test", (char *)&task_entry, ptype);
task_entry();
Q:
長(cháng)跳轉指令
A:
Relocation value does not fit in 26 bits

-Xcode-absolute-far編譯使其支持長(cháng)跳轉指令
Q:
查看中斷異常
A:
-> sysExcMsg sysExcMsg = 0x1d197f8: value = 17152 = 0x4300
-> d 0x4300
Q:
如何防止臨界區被中斷打斷
A:
(1)intLock():使中斷禁止
(2)intUnlock():開(kāi)中斷
可以用intLock/intUnlock提供最高級別的互斥機制以保護臨界區域不被打斷
Q:
vxWorks怎么通過(guò)文件IO訪(fǎng)問(wèn)設備的
A:

Q:
vxWorks啟動(dòng)流程
A:

Q:
vxWorks默認的注釋類(lèi)型是“”在使用C++類(lèi)型的注釋“//”,就有可能報錯。
A:
Q:
vxWorks 系統編程中任務(wù)級與中斷級的通訊如何實(shí)現?
A:
中斷是由硬件觸發(fā),軟件的作用只是將中斷服務(wù)例程(ISP)與中斷事件連接起來(lái).
1.使能中斷,函數intEnable().
2.用intConnect()登記中斷號,和相應的中斷例程ISR.
這樣一旦有中斷發(fā)生,系統自動(dòng)跳轉到相應位置執行ISR.
前情回顧
重新審視你的”系統工程“——SpaceX對系統工程的顛覆認知
美軍大幅度強化SCA無(wú)線(xiàn)電裝備的研發(fā)投入
美國海軍花費1.42億美元將機載戰術(shù)訓練系統移植到SCA4.1架構


聯(lián)系客服