在项目中需要适配vxWorks,自己总结的遇到的问题与解决方法,欢迎大家交流vxWorks使用心得。 Q: 如何显示板卡CPU、DDR等信息? A: coreShow Q: 如何显示vxWorks Image版本号? A: version Q: 与任务相关的命令 A: sp function,[arg1],...,[arg9] -启动任务,最多接受9个参数,默认的优先级100、堆栈20000字节 period n,function,[arg1],...,[arg8] -创建一个周期调用function的任务,周期为n秒,最多接受8个参数 repeat m,function,[arg1],...,[arg8] -创建一个反复调用function的任务,调用次数为m,m=0时永久调用,最多也是8个参数 ts tidX -挂起任务 tr tidX -恢复挂起的任务 td tidX -删除任务 i tidX -显示任务基本信息,参数为0时显示全部任务 ti tidX -显示任务详细信息,包括寄存器、堆栈等 tt tidX -显示任务的函数调用关系 checkStack tidX -显示任务堆栈使用的历史统计,参数为0时显示全部任务 [其中tidX可以为任务ID 也可以为任务名] Q: 与调试系统相关的指令 A: lkup ["string"] -在系统符号表中查找并列出含有"string"字符的函数及全局变量,有两个特殊参数: lkAddr addr -显示addr地址附近的符号表 l addr,[n] -显示addr地址开始的n条指令的反汇编,n省略时默认为10条指令 h [n] -n为0时列出最近执行的shell命令,默认20条;n非0时,设定shell记录的历史命令的数目 d [addr,[number],[width]] -显示addr地址开始的number个单元的内容,width定制每个单元的宽度,可以是1、2、4、8 m addr,[width] -按width宽度修改addr地址的内容,width可以是1、2、4、8 memShow 1 -显示系统分区上空闲和已分配空间的总数等 printErrno value -打印系统定义的错误码的宏 Q: vxWorks引导后的shell型命令,首先可以使用help查看所有指令来学习 A: Q: 如何启动rtp程序? A: 1).命令行启动rtpsp /ata0a/rtptest.vxe 2).应用程序里面启动 constchar*argv[]={“/ata0a/测试.vxe“,NULL} rtpSpawn(argv[0],argv,NULL,100,0x10000,0,0) Q: 环境变量 A: 使用 shConfig 命令修改环境变量: shConfig(char *config) -参数为NULL时,显示当前Shell的配置参数,否则设置其参数 SH_GET_TASK_IO 为调用函数设置I/O重定向。ON:重定向到WindSh;OFF:I/O显示到目标机控制台。 LD_PATH LD_SEND_MODULES 设置load模式。 以下3个用不到 LD_CALL_XTORS LD_COMMON_MATCH_ALL DSM_HEX_MOD Q: 显示任务切换调用例程列表 A: taskSwitchHookShow Q: 显示一个任务的调用状况,解析堆栈 A: Q: DKM模块的加卸载指令 A: ld < test.out 加载test.out模块到系统 unld id 卸载模块 Q: 显示系统中所有加载的模块 A: moduleShow Q: 修改bootrom启动参数 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 更改文件名称 Q: 显示历史shell指令 A: shellHistory Q: 释放shell内动态分配的字符指针。参数为0,则打印当前所有字符指针;参数为-1,则释放所有指针 不过在shell中直接声明的字符指针,应该用free()来释放 Q: 打印指定RTP中的文件描述符? A: iosRtpFdShow Q: 打印IO流中fp的信息 A: stdioShow Q: 打印dosFs volume configuration A: dosFsShow Q: 网络常见的错误码 A: Q: vxWorks 网络抓包 A: 命令行切换到C模式,然后输入pcap命令即可实现捕获指定网口的网络数据 Q: workbench怎么将生成的文件自动拷贝对应的目录 A: 1.写.bat脚本,右键运行 2.添加到POST_BUILD_RULE Q: 如何在shell切换到其它目录后回到FTP镜像目录 A: > cd "host:" Q: BOOT命令 A: BOOT命令,启动时使用,用于查看和修改启动参数等操作。 p,打印配置 c, 修改配置 ?, 帮助信息 @,加载内核 Ctrl+X,重新启动 Q: 列举PCI设备 A: PciDeviceShow Q: 系统里面修改驱动参数 A: bootChange Q: vxWorks cache一致性问题,可使用如下函数解决 A: 实际flush()/invalidate()函数有如下两组,功能相同稍有区别: 组1:CACHE_DMA_FLUSH()函数和CACHE_DMA_INVALIDATE()函数 组2:cache Flush()函数和cacheInvalidate()函数 Q: 在vxworks6.x下添加一个新的驱动 一般需要添加6个文件 分别是 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: 新加一个串口驱动 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: 长跳转指令 A: Relocation value does not fit in 26 bits -Xcode-absolute-far编译使其支持长跳转指令 Q: 查看中断异常 A: -> sysExcMsg sysExcMsg = 0x1d197f8: value = 17152 = 0x4300 -> d 0x4300 Q: 如何防止临界区被中断打断 A: (1)intLock():使中断禁止 (2)intUnlock():开中断 可以用intLock/intUnlock提供最高级别的互斥机制以保护临界区域不被打断 Q: vxWorks怎么通过文件IO访问设备的 A: Q: vxWorks启动流程 A: Q: vxWorks默认的注释类型是“”在使用C++类型的注释“//”,就有可能报错。 A: Q: vxWorks 系统编程中任务级与中断级的通讯如何实现? A: 中断是由硬件触发,软件的作用只是将中断服务例程(ISP)与中断事件连接起来. 1.使能中断,函数intEnable(). 2.用intConnect()登记中断号,和相应的中断例程ISR. 这样一旦有中断发生,系统自动跳转到相应位置执行ISR. 前情回顾 重新审视你的”系统工程“——SpaceX对系统工程的颠覆认知 美国海军花费1.42亿美元将机载战术训练系统移植到SCA4.1架构 |
|