Linux驱动开发(十四)---USB驱动开发学习(键盘+鼠标)

前文回顾

《Linux驱动开发(一)—环境搭建与hello world》
《Linux驱动开发(二)—驱动与设备的分离设计》
《Linux驱动开发(三)—设备树》
《Linux驱动开发(四)—树莓派内核编译》
《Linux驱动开发(五)—树莓派设备树配合驱动开发》
《Linux驱动开发(六)—树莓派配合硬件进行字符驱动开发》
《Linux驱动开发(七)—树莓派按键驱动开发》
《Linux驱动开发(八)—树莓派SR04驱动开发》
《Linux驱动开发(九)—树莓派I2C设备驱动开发(BME280)》
《Linux驱动开发(十)—树莓派输入子系统学习(红外接收)》
《Linux驱动开发(十一)—树莓派SPI驱动学习(OLED)》
《Linux驱动开发(十二)—树莓派framebuffer学习(改造OLED)》
《Linux驱动开发(十三)—USB驱动HID开发学习(鼠标)》
继续宣传一下韦老师的视频

70天30节Linux驱动开发快速入门系列课程【实战教学、技术讨论、直播答疑】

在这里插入图片描述
昨天学习了一下usb鼠标的简单识别,今天来完整的写一套键盘和鼠标的驱动,起码能够支持树莓派使用的。
在这里插入图片描述
先来写一下键盘的驱动。

键盘驱动框架

框架部分很简单,和昨天的鼠标基本一样,但是今天这里的table_id,要用一个通用定义,保证识别出所有的usb键盘。

#include <linux/init.h>
#include <linux/module.h>
#include <linux/usb.h>
#include <linux/usb/input.h>
#include <linux/hid.h>

//通用ID
static const struct usb_device_id usb_kbd_id_table[] = {
   
   
	{
   
    USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID, USB_INTERFACE_SUBCLASS_BOOT,USB_INTERFACE_PROTOCOL_KEYBOARD) },
	{
   
    }	/* Terminating entry */
};

/*
MODULE_DEVICE_TABLE 有两个功能。
一是:将设备加入到外设队列中,
二是告诉程序阅读者该设备是热插拔设备或是说该设备支持热插拔功能。
该宏定义在<linux/module.h>下
这个宏有两个参数,第一个参数设备名,第二个参数该设备加入到模块中时对应产生的设备搜索符号,这个宏生成了一个名为__mod_pci_device_table
局部变量,这个变量指向第二个参数
*/
MODULE_DEVICE_TABLE (usb,usb_kbd_id_table);
 
//USB设备信息与驱动端匹配成功的时候调用。
static int myusbkbd_probe(struct usb_interface *intf,const struct usb_device_id *id)  //资源探索函数
{
   
   
	printk("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
	printk("USB驱动匹配成功! ID: 0x%X,0x%X\n",id->idVendor,id->idProduct);
	return 0;
}
 
//USB断开的时候调用
static void myusbkbd_disconnect(struct usb_interface *intf)
{
   
   
	printk("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
	printk("USB 设备释放成功!\n"); 
}
 
//定义USB驱动结构体 
static struct usb_driver myusbkbd_driver = 
{
   
   
    .name = "myusbkbd_drv",
    .probe = myusbkbd_probe,
    .disconnect = myusbkbd_disconnect,
    .id_table = usb_kbd_id_table,
};
 
static int __init myusbkbd_init(void)
{
   
   
    //注册USB设备驱动
	printk("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖哥王老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值