2010-12-28 1 views
2

Я пишу сценарий автоматизации, который работает во встроенной цели Linux.Практическое руководство. Имитация ввода клавиш в оболочке приложения, запущенного во встроенной цели.

Часть скрипта включает запуск приложения на цель и получение некоторых данных со стандартного вывода. Stdout - это соединение терминала ssh, которое у меня есть для цели.

Однако эти данные доступны на стандартном выводе только в том случае, если нажаты некоторые клавиши, и нажатие клавиши должно выполняться на клавиатуре, подключенной к встроенной цели, а не на хост-системе, из которой у меня есть ssh'd цель. Есть ли способ имитировать это?

Edit: Уточняя, что мне нужно -

У меня есть OpenGL приложение, которое я бегу на встраиваемом Linux (работает как обычный Linux) цели. Это отображает некоторые графики на устройстве отображения встроенной системы. Нажатие f на клавиатуре, подключенной к цели, выводит данные fps на терминал ssh, из которого я управляю цели.

Поскольку я автоматизирую процесс запуска этого приложения OpenGL и получения баллов fps, я не могу ожидать, что клавиатура будет подключена к цели, а тем более ожидать, что пользователь вводит нажатие клавиши на встроенной целевой клавиатуре. Как мне это сделать?

Редактировать 2: Ожидание не работает, так как ожидать может выдавать штрихи только на терминал ssh. Ключ, который мне нужно отправить в приложение, должен поступать с клавиатуры, подключенной к цели (это та часть, которая нуждается в моделировании, не имея при этом подключенной к ней клавиатуры).

Спасибо.

+0

Не было бы проще (и более портативными) просто отправить сообщение в программу, а затем сделать это вместо того, чтобы это в нажатие клавиши? – Nitrodist

+0

Как так? У меня нет доступа к коду этого двоичного файла OGL. – fzkl

+0

Потому что попытка связи с программой - именно то, почему в linux есть сокеты или каналы. Этот SO тоже может быть полезен: http://stackoverflow.com/questions/1262310/simulate-keypress-in-a-linux-c-console-application – Nitrodist

ответ

2

У меня нет дома прямо сейчас (поэтому нет linux под рукой), поэтому на самом деле не попробовать. Но вы должны быть в состоянии эмулировать нажатия клавиш, если вы эхом хотите нажатия клавиш (возможно, клавиатурных кодов) на узел клавиатуры, расположенный под/dev на вашей цели. Это можно сделать через ваш ssh.

+0

Мне нравится эта идея, к сожалению, я не хочу, чтобы подключите клавиатуру к узлу в/dev. – fzkl

+0

Вам не обязательно, вы могли бы просто mknod. – Oppermann

+0

Я думаю, что предложение Оппермана стоит попробовать. В другом направлении вы можете просто установить Expect на встроенное устройство? Если это достаточно близко к Linux, это не должно быть сложно. Отсутствие всего остального, описание Бена Джексона выше эмуляции клавиатуры находится на цели. –

4

Это точно домен Expect, который stackoverflow случайно узнает собственными tag.

Самый быстрый способ добиться автоматизированной работы OpenGL, когда вы учитесь как можно меньше, если необходимо, скорее всего будет autoexpect.

+0

Ожидание не подходит мне. Пожалуйста, проверьте право на редактирование 2. Я предполагаю это из ограниченного материала для чтения, который я нашел в ожидании. Пожалуйста, поправьте меня, если у вас есть идея. – fzkl

1

Решение, удовлетворяющее как QA, так и производственный тест, состоит в том, чтобы построить аппаратное обеспечение, которое выглядит как клавиатура для встроенного устройства и имеет внешний контроль. В зависимости от того, насколько сложным может быть ваш вход, это может быть что угодно от купленной в магазине клавиатуры с пробелом, записанным на микроконтроллер, говорящий на PS/2 или USB на клавиатуре, и что-то еще (последовательный порт, USB, ethernet) на контроллере боковая сторона.

С библиотекой LUFA замечательно легко сделать USB-клавиатуру с частями серии AT90USB. Некоторые из них даже имеют 2 USB-порта и могут быть автоматизированы с помощью USB, подключенного к другой системе (или если вы хотите навязчиво, вы могли бы перечислить как клавиатуру, так и устройство управления, а также подключить клавиатуру через встроенную систему).

0

Как насчет создать текстовый файл с входами и работать следующим образом?

cat inputs.txt | target_executable 

Содержание inputs.txt может быть что-то вроде следует,

y 
y 
y 
n 
y