Embedded omap_udc.c g_hid.c使用angstrom linux在beagleboard上安装hid小工具

Embedded omap_udc.c g_hid.c使用angstrom linux在beagleboard上安装hid小工具,embedded,kernel-module,hid,beagleboard,Embedded,Kernel Module,Hid,Beagleboard,要将beagleboard xm用作HID外围设备,我计划执行以下操作: 了解如何使用angstrom构建东西 获取内核源代码2.6.32 编译omap_udc和g_hid 将这些模块插入内核 从gadget_hid.txt编译示例 使用hid\u gadget\u测试/dev/hidg0键盘发送键盘命令 这是做我想做的事的好方法吗 是09年的一个有点相关的问题 非常相似。我想我会在这里发布这篇文章,因为我一直在寻找答案,但没有结果,所以我不得不发挥创意 首先 到这里去拿内核 第二 内核/ar

要将beagleboard xm用作HID外围设备,我计划执行以下操作:

  • 了解如何使用angstrom构建东西
  • 获取内核源代码2.6.32
  • 编译omap_udc和g_hid
  • 将这些模块插入内核
  • 从gadget_hid.txt编译示例
  • 使用hid\u gadget\u测试/dev/hidg0键盘发送键盘命令
  • 这是做我想做的事的好方法吗

    是09年的一个有点相关的问题


    非常相似。

    我想我会在这里发布这篇文章,因为我一直在寻找答案,但没有结果,所以我不得不发挥创意

    首先 到这里去拿内核

    第二 内核/arch/arm/mach-omap2/board-am335xevm.c

    加:

    按照前面的指南构建内核 在内核构建的makemenu配置部分 转到设备驱动程序->usb支持->usb小工具支持->usb小工具驱动程序->将HID小工具编译为模块(您可能需要查找它,但它在更多子菜单的本节中)

    从内核文档中获取示例代码部分 还是这一页

    用GCC编译

    检查g_hid.ko司机 然后运行编译后的示例代码

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