从VxWorks 6.7中的内部代码执行脚本

时间:2010-05-26 03:38:52

标签: vxworks

在VxWorks 5.5.1中,您可以使用execute命令运行脚本。在VxWorks 6.7中,不再支持执行命令。如果有更换,现在有人吗?我是从内部代码而不是命令行专门谈论的。

3 个答案:

答案 0 :(得分:1)

通过大量研究,似乎有几种方法可以实现这一点,但没有一种方法与之前的执行命令完全相同。正如我在下面的评论中所述,事实证明,execute命令不是官方的API调用。

1)可以使用shellCmdExec,但大多数都是从shell任务中调用的。 2)我们选择采用的解决方案 - 即从我们的启动脚本中调用它

3)和黑客的方式:

fd = open(“/ y / startup.go”,0,0)/ *打开要执行的脚本 / v = shellFromNameGet(“tShell0”)/ 获取shell i.d. * /

/ *使用shellinOutGet来保存shell的标准内容 / shellInOutSet(v,fd,-1,-1)/ 将shell的标准输入设置为文件* /

/ *在这里你应该恢复标准(事先做一个shellInOutGet)。在shell完成脚本之后执行此操作。我会说你的脚本应该在ti完成时增加一个变量。 * /

接近(FD)

答案 1 :(得分:0)

在VxWorks内核程序员指南6.7中有一个解决方案,问题是它对我不起作用,但它可以帮助你:

    shellGenericInit ("INTERPRETER=Cmd", 0, NULL, &shellTaskName, FALSE, FALSE,fdScript, STD_OUT, STD_ERR); do
    taskDelay (sysClkRateGet ());
    while (taskNameToId (shellTaskName) != ERROR); close (fdScript);

检查文件的第15.2.15节。

答案 2 :(得分:-1)

您可以在串行驱动程序层中进行操作。请尝试以下代码。它显示了如何将文本发送到外壳的输入。

例如,

pass_to_sio(“ memShow; ifconfig”);在您的C代码中。

-> sp pass_to_sio,在外壳程序中为“ memShow; ifconfig”。

pass_to_sio(“

-> sp pass_to_sio,如果要运行脚本文件,请在外壳程序中输入“

void pass_to_sio(char *input)
{
    int old_priority;

    taskPriorityGet(taskIdSelf(),&old_priority);

    taskPrioritySet(taskIdSelf(),250); /* task priority must be lower than tShell0 */

    NS16550_CHAN *pChan = &ns16550Chan[0]; /* this line depends on your BSP */

    while (input != NULL && *input != NULL)
    {
        (*pChan->putRcvChar) (pChan->putRcvArg, *input);
        input++;
    }

    (*pChan->putRcvChar) (pChan->putRcvArg, '\r');

    taskPrioritySet(taskIdSelf(),old_priority); 
}