1

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

4

3 回答 3

1

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

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

3)还有一种黑客方式:

fd = open("/y/startup.go", 0, 0) /* 打开你要执行的脚本/ v=shellFromNameGet("tShell0") /获取shell id */

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

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

关闭(fd)

于 2010-06-14T15:17:45.697 回答
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 节。

于 2014-08-28T08:03:11.310 回答
-1

您可以在串行驱动程序层中执行此操作。试试下面的代码。它显示了如何将文本发送到 shell 的输入。

例如,

pass_to_sio("memShow; ifconfig"); 在你的 c 代码中。

-> sp pass_to_sio, "memShow; ifconfig" 在 shell 中。

pass_to_sio("< test.scr"); 如果要运行脚本文件,请在您的 c 代码中。

-> sp pass_to_sio,如果要运行脚本文件,请在 shell 中使用“<test.scr”。

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); 
}
于 2018-10-17T20:43:53.463 回答