2012-03-23 10 views
0

Um das Beagleboard xm als HID Peripherie verwende ich planen folgendes zu tun:omap_udc.c g_hid.c versteckte Gadget auf Beagleboard mit Angstrom Linux

  1. Entdecken Sie, wie die Dinge mit Angstrom zu bauen.
  2. Holen Sie sich die Kernel-Quelle 2.6.32.
  3. Compile omap_udc und g_hid
  4. diese Module in den Kernel
  5. Legen
  6. Kompilieren Sie das Beispiel von gadget_hid.txt
  7. Senden Tastaturbefehle mit hid_gadget_test/dev/hidg0 Tastatur

Ist das ein guter Weg, zu tun, was ich will?

http://www.edaboard.com/thread145675.html ist ein etwas verwandtes Problem von '09.

Looking for Example Embedded Linux HID Device Code ist sehr ähnlich.

Antwort

1

Ich dachte, ich würde dies hier posten, weil ich schaute und eine Antwort suchte, aber ohne Erfolg, also musste ich kreativ werden.

Erste hier gehen und den Kernel http://eewiki.net/display/linuxonarm/BeagleBone

Zweiter in Der KERNEL/arch/arm/mach-omap2/Board-am335xevm.c

Gelangen:

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"); 

} 

In der:

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(); 
} 

Bauen Sie den Kernel nach der Anleitung von früher Im Makefuum Config Abschnitt des Kernels Build gehen Sie zu den Gerätetreibern-> USB-Unterstützung-> USB Gadget Support-> USB Gadget Treiber -> HID Gadget als Modul kompilieren (Sie können haben für sie zu jagen, aber es ist um diesen Abschnitt in ein paar weiteren Untermenü)

Nehmen sie den Beispielcode Abschnitt aus der Kernel-Dokumentation oder diese Seite http://www.mjmwired.net/kernel/Documentation/usb/gadget_hid.txt

Compile mit GCC

insmod der g_hid. ko-Treiber und dann das kompilierte ausführen Beispielcode