Выполнение сценария из внутреннего кода в VxWorks 6.7

В VxWorks 5.5.1 вы могли запустить скрипт с помощью команды execute. В VxWorks 6.7 команда выполнения больше не поддерживается. Есть ли у кого сейчас замена? Я конкретно говорю о внутреннем коде, а не о командной строке.


person Dustin Baier    schedule 26.05.2010    source источник


Ответы (3)


В результате многочисленных исследований выяснилось, что есть несколько способов сделать это, но ни один из них не является точно таким же, как команда выполнения из предыдущего примера. Как я уже говорил в комментарии ниже, команда execute не является официальным вызовом API.

1) Можно использовать shellCmdExec, но большинство из них вызывается из задачи оболочки. 2) Решение, которое мы выбираем для использования - это вызов его из нашего сценария запуска.

3) И способ взлома:

fd = open("/y/startup.go", 0, 0) /* откройте сценарий, который вы хотите выполнить / v=shellFromNameGet("tShell0") / Получите идентификатор оболочки. */

/* Используйте shellinOutGet для сохранения стандартного ввода оболочки / shellInOutSet (v, fd, -1, -1)/ Установить стандартное значение оболочки в файл */

/* Здесь следует восстановить стандартный in (предварительно сделать shellInOutGet). Сделайте это после того, как оболочка будет выполнена со сценарием. Я бы сказал, что ваш скрипт должен увеличивать переменную, когда это делается. */

близко (фд)

person Dustin Baier    schedule 14.06.2010

В руководстве программиста VxWorks Kernel 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 документа.

person mjdev    schedule 28.08.2014

Вы можете сделать это на уровне последовательного драйвера. Попробуйте следующий код. Он показывает, как отправить текст на ввод оболочки.

Например,

pass_to_sio("memShow; ifconfig"); в вашем коде c.

-> sp pass_to_sio, "memShow; ifconfig" в оболочке.

pass_to_sio("‹ test.scr"); в вашем коде c, если вы хотите запустить файл сценария.

-> sp pass_to_sio, "‹ 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); 
}
person JaeMann Yeh    schedule 17.10.2018