首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >键盘热插拔加载模块

键盘热插拔加载模块
EN

Stack Overflow用户
提问于 2014-04-25 14:47:14
回答 1查看 9.3K关注 0票数 18

我正在尝试学习如何为Linux系统编写模块和驱动程序。类似于this的问题,我试图在USB键盘热插拔上运行一个简单的"Hello World“模块(代码如下)。即使通过命令insmodemodprobe初始化模块似乎可以工作(dmesg显示调试消息),插入键盘后模块也不会加载。

我做了什么:

  1. 运行make生成hellomodule.ko文件。
  2. hellomodule.ko文件复制到/lib/modules/"my_kernel_version"/
  3. Run depmod -a命令。

完成这三个步骤后,我将模块添加到modules.aliasmodules.dep文件中。它仍然不能工作。

这是内核配置错误还是完全不同的东西?

系统: Ubuntu 14.04 LTS;内核: 3.14.0

hellomodule.c:

代码语言:javascript
复制
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/usb.h>
#include <linux/usb/input.h>
#include <linux/hid.h>

MODULE_AUTHOR("author");
MODULE_DESCRIPTION("helloworld module\n");
MODULE_LICENSE("GPL");

static struct usb_device_id hello_id_table [] = {
        { USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID,
        USB_INTERFACE_SUBCLASS_BOOT,
            USB_INTERFACE_PROTOCOL_KEYBOARD) },
    { } /* Terminating entry */
};

MODULE_DEVICE_TABLE (usb, hello_id_table);

static int hello_probe(struct usb_interface *interface,
    const struct usb_device_id *id)
{
    pr_debug("HelloModule: USB keyboard probe function called\n");
    return 0;
}

static void hello_disconnect(struct usb_interface *interface)
{
    pr_debug("HelloModule: USB keyboard disconnect function called\n");
}

static struct usb_driver hello_driver = {
//.owner =  THIS_MODULE,
.name =     "hello_driver",
.probe =    hello_probe,
.disconnect =   hello_disconnect,
.id_table = hello_id_table
};

static int __init hello_init(void)
{
   int retval = 0;

   pr_debug("HelloModule: Hello World!\n");
   retval = usb_register(&hello_driver);
   if (retval)
       pr_debug("HelloModule: usb_register failed. Error number %d", retval);

   return 0;
}

static void __exit hello_exit(void)
{
    usb_deregister(&hello_driver);
    pr_debug("HelloModule: exit\n");
}

module_init(hello_init);
module_exit(hello_exit);

Makefile:

代码语言:javascript
复制
obj-m := hellomodule.o
CFLAGS_hellomodule.o := -DDEBUG

KDIR  :=  /lib/modules/`uname -r`/build

default:
    make -C $(KDIR) M=$(PWD) modules
clean:
    make -C $(KDIR) M=$(PWD) clean
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23307579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档