omap_udc.c g_hid.c спрятал гаджет на beagleboard с Angstrom Linux - PullRequest
0 голосов
/ 24 марта 2012

Чтобы использовать beagleboard xm в качестве HID-периферии, я планирую сделать следующее:

  1. Узнайте, как создавать вещи с помощью Angstrom.
  2. Получить исходный код ядра 2.6.32.
  3. Скомпилируйте omap_udc и g_hid
  4. Вставьте эти модули в ядро ​​
  5. Скомпилируйте пример из gadget_hid.txt
  6. Отправка команд клавиатуры с клавиатуры hid_gadget_test / dev / hidg0

Это хороший способ делать то, что я хочу?

http://www.edaboard.com/thread145675.html является проблемой, связанной с '09.

Поиск примера кода устройства HID для встроенного Linux очень похож.

1 Ответ

1 голос
/ 15 августа 2012

Я подумал, что опубликую это здесь, потому что я искал и искал ответ, но безрезультатно, поэтому мне пришлось проявить творческий подход.

Первый Иди сюда и возьми ядро http://eewiki.net/display/linuxonarm/BeagleBone

Второй в KERNEL / арка / кронштейн / mach-omap2 / board-am335xevm.c

Добавить:

enter code here
#include <linux/usb/g_hid.h>

/* hid descriptor for a keyboard */
static struct hidg_func_descriptor my_hid_data = {
.subclass       = 0, /* No subclass */
.protocol       = 1, /* Keyboard */
.report_length      = 8,
.report_desc_length = 63,
.report_desc        = {
    0x05, 0x01, /* USAGE_PAGE (Generic Desktop)           */
    0x09, 0x06, /* USAGE (Keyboard)                       */
    0xa1, 0x01, /* COLLECTION (Application)               */
    0x05, 0x07, /*   USAGE_PAGE (Keyboard)                */
    0x19, 0xe0, /*   USAGE_MINIMUM (Keyboard LeftControl) */
    0x29, 0xe7, /*   USAGE_MAXIMUM (Keyboard Right GUI)   */
    0x15, 0x00, /*   LOGICAL_MINIMUM (0)                  */
    0x25, 0x01, /*   LOGICAL_MAXIMUM (1)                  */
    0x75, 0x01, /*   REPORT_SIZE (1)                      */
    0x95, 0x08, /*   REPORT_COUNT (8)                     */
    0x81, 0x02, /*   INPUT (Data,Var,Abs)                 */
    0x95, 0x01, /*   REPORT_COUNT (1)                     */
    0x75, 0x08, /*   REPORT_SIZE (8)                      */
    0x81, 0x03, /*   INPUT (Cnst,Var,Abs)                 */
    0x95, 0x05, /*   REPORT_COUNT (5)                     */
    0x75, 0x01, /*   REPORT_SIZE (1)                      */
    0x05, 0x08, /*   USAGE_PAGE (LEDs)                    */
    0x19, 0x01, /*   USAGE_MINIMUM (Num Lock)             */
    0x29, 0x05, /*   USAGE_MAXIMUM (Kana)                 */
    0x91, 0x02, /*   OUTPUT (Data,Var,Abs)                */
    0x95, 0x01, /*   REPORT_COUNT (1)                     */
    0x75, 0x03, /*   REPORT_SIZE (3)                      */
    0x91, 0x03, /*   OUTPUT (Cnst,Var,Abs)                */
    0x95, 0x06, /*   REPORT_COUNT (6)                     */
    0x75, 0x08, /*   REPORT_SIZE (8)                      */
    0x15, 0x00, /*   LOGICAL_MINIMUM (0)                  */
    0x25, 0x65, /*   LOGICAL_MAXIMUM (101)                */
    0x05, 0x07, /*   USAGE_PAGE (Keyboard)                */
    0x19, 0x00, /*   USAGE_MINIMUM (Reserved)             */
    0x29, 0x65, /*   USAGE_MAXIMUM (Keyboard Application) */
    0x81, 0x00, /*   INPUT (Data,Ary,Abs)                 */
    0xc0        /* END_COLLECTION                         */
}
};

static struct platform_device my_hid = {
.name           = "hidg",
.id         = 0,
.num_resources      = 0,
.resource       = 0,
.dev = {
.platform_data  = &my_hid_data,
}, 
};

static void __init am33xx_hidg_init(void)
{
int ret;



ret = platform_device_register(&my_hid);


if (ret)
    printk("HID Gadget registration failed\n");

} 

В:

static void __init am335x_evm_init(void)
{
am33xx_cpuidle_init();
am33xx_mux_init(board_mux);
omap_serial_init();
am335x_rtc_init();
**am33xx_hidg_init();**
clkout2_enable();
}

Сборка ядра в соответствии с Руководством предыдущего В разделе конфигурации makemenu сборки ядра Перейдите к драйверам устройств-> Поддержка USB-> Поддержка USB-гаджетов-> Драйверы USB-гаджетов -> Скомпилировать HID-гаджет как модуль (возможно, вам придется искать его, но он находится в этом разделе еще в нескольких подменю)

Взять пример кода из документации ядра. или эта страница http://www.mjmwired.net/kernel/Documentation/usb/gadget_hid.txt

Компилировать с GCC

insmod драйвер g_hid.ko а затем запустите скомпилированный пример кода

...