在VxWorks下怎样用startup的启动脚本,大家应该都知道,举个例子:
需要define下面的两个宏:
#define INCLUDE_SHELL #define INCLUDE_STARTUP_SCRIPT
usrConfig.c中会调用:
#ifdef INCLUDE_STARTUP_SCRIPT usrStartupScript (startupScriptFieldSplit (sysBootParams.startupScript)); #endif
这里可能会遇到一个问题,就是sata/sd/usb 之类的不工作。原因是这个函数是在usrRoot根任务下执行的,优先级是0,而sata/sd/usb 之类的会创建一个自己相应的任务去维护这些设备,显然只有当root任务执行完后这些任务才会开始执行,所以调到usrStartupScript的时候,sata/sd/usb 之类还没有准备好,当然无法正常工作了,解决办法有很多,比如在usrStartupScript 之前加taskDelay(),让sata/sd/usb 之类的任务先运行,我推荐的一种方法是: 在这个函数里多open几次这个设备,第一次肯定不成功,第二次应该就可以了:
实现代码如下:
int times= 0; fd = ERROR; while ((++times<= 10) && (fd == ERROR)) { fd = open (fileName, O_RDONLY, 0); if (fd == ERROR) { if (times== 1) { printf ("Waiting for driver to mount\n"); } else if (times== 10) { printf("\n"); } else { printf("."); taskDelay(sysClkRateGet()); } } }
把文件放在BSP目录下,然后修改bootrom里的startup参数即可。
boot device : fs processor number : 0 host name : host file name : /sd0:0/vxWorks.st user (u) : target ftp password (pw) (blank = use rsh): vxTarget flags (f) : 0x0 target name (tn) : hjj startup script (s) : start.txt other (o) : qefcc