Невозможно реализовать пользовательскую клавиатуру в u-boot

Как известно, загрузчик u-boot поддерживает своего рода «систему устройств ввода», которая позволяет регистрировать набор функций (например, getc, tstc, start и т. д.). Поэтому мне нужно реализовать свою собственную аппаратную «клавиатуру». Что я должен делать? Звучит просто:

1) Создайте как минимум функции "init", "tstc", "getc" и "start" в файле драйвера. 2) В «init» вызовите «stdio_register», чтобы сообщить системе о моем устройстве. 3) Вызвать драйвер "init" из моего пользовательского кода инициализации платы.

В чем проблема? К сожалению, это не работает. stdio_register возвращает 0 (вроде все ок), но "start", "tstc", "getc" никогда не вызывались. Я предполагаю, что делаю что-то не так, но я не могу понять: другие драйверы клавиатур, похоже, не содержат никакого дополнительного кода для регистрации клавиатуры. Кто-нибудь может сказать правду?

Или, может быть, мне просто взломать u-boot и вставить вызов опроса где-нибудь в main_loop? :)


person Konstantin Utkin    schedule 25.03.2014    source источник


Ответы (1)


Похоже, вы создали собственный драйвер устройства.

struct stdio_dev kon_dev

Попробуйте что-то подобное в командной строке U-Boot, чтобы переключить консоль на пользовательский драйвер.

setenv stdin kon_dev

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

Использование netconsole похоже на то, что вы делаете. С помощью netconsole можно, например, постоянно поддерживать стандартный вывод на последовательном устройстве, переключать стандартный ввод на устройство nc (то есть «setenv stdin nc»), некоторое время вводить команды через этот сеанс netcat, а затем переключать стандартный вывод обратно на последовательный.

person Joe Kul    schedule 25.03.2014
comment
Джо, мой специальный драйвер не может полностью заменить последовательное устройство. Он был создан для поддержки только 2-3 кнопок, подключенных к контактам GPIO процессора. Может быть, и не нужно привязывать эти кнопки к консоли... - person Konstantin Utkin; 26.03.2014
comment
Вы можете посмотреть CONFIG_CONSOLE_MUX, который может разрешить ввод как с обычного устройства ввода, так и с вашего пользовательского драйвера. См. документ/README.iomux. - person Joe Kul; 26.03.2014
comment
Спасибо, я прочитал и включил мультиплексирование консоли. Но этого недостаточно: я добавил опцию CONFIG_SYS_CONSOLE_IS_IN_ENV и заменил вызов инициализации пользовательского драйвера с board_late_init() на board_init_r() прямо под stdio_init(). - person Konstantin Utkin; 27.03.2014