ok6410usb 驱动框架分析
目前为止,写驱动嘛,虽然我只是菜鸟,但还是直到一些常识,故我从常识开始分析,
一,USB控制器,也就时主机测,看待设备,是一个设备 -》配置 -》接口 -》端点的顺序来配置usb并和usb设备通信的
二,在usb设备内部运行着固件程序,来对usb控制器发送过来的信息进行解包,并执行相应的操作(不确定这句话的正确性,但觉得是对的)
三,在usb设备内部存储着设备的配置信息,比如有多少个配置了,配置有多少个接口,接口有多少个端点,还有一些标识符(厂商号,用的什么协议之类的用来表明我是个什么子的设备,我应该和哪个驱动匹配又或者加载什么样的驱动)正是通过了这些usb设备内部存储的信息,我们才能配置usb驱动
越来越感觉,想实现一个驱动,即使是我这样,先凑出来的也一定要对协议和原理了解,这俩周真的是举步维艰
下面分析usb-skeleton驱动
static const struct file_operations skel_fops = { //usb的操作
.owner = THIS_MODULE,
.read = skel_read,
.write = skel_write,
.open = skel_open,
.release = skel_release,
.flush = skel_flush,
.llseek = noop_llseek,
};
/*
* usb class driver info in order to get a minor number from the usb core,
* and to have the device registered with the driver core
*/
static struct usb_class_driver skel_class = { //初始化usb_class_diver 用于配置usb的操作
.name = "skel%d",
.fops = &skel_fops,
.minor_base = USB_SKEL_MINOR_BASE,
};
static int skel_probe(struct usb_interface *interface,
const struct usb_device_id *id) //在hub探测到新设备添加后,并探测到其对应我们的id_table后,运行probe,其实从这里也可以间接的分析出,设备内部自己存储了自己由几个配置,几个接口,几