Linux下驱动整体架构
这个图我们从下面往上面看,linux驱动最底层是主机硬件,运行在主机硬件其上是驱动模块了,驱动模块直接对进行读写操作。驱动模块在内核是可以通过静态或者动态加载,来在内核中注册的。例如用 insmod XXX.o 模块,那么用limod就可以看到已经在内核中加载进来,设备文件是用 mknod+新设备名+c/b+主设备号+次设备号来关联起来的。上层的应用程序仅仅对设备文件进行读写等操作。 2.linux USB驱动层次
上图可以说是前面第一部分的驱动模块的一个特写。
从主机侧来看,在linux驱动中,USB驱动最底层的是USB主控制器硬件。在其上运行的是USB主机控制驱动。主机控制驱动之上为USB核心层,在往上层为USB设备驱动层了(与插入主机上的U盘、鼠标、AL576等对应的设备驱动)。  Linux内核的USB核心负责USB驱动管理和协议处理的重要工作,其功能包括:通过定义一些数据结构、宏、和功能函数,向上为设备驱动提供编程接口,向下为USB主机控制器驱动提供编程接口:通过全部变量维护整个系统的USB设备信息;完成设备热插拔控制、总线数据传输控制等。
3.USB骨架驱动usb-skeleton分析  module_init (usb_skel_init);/*模块入口*/ module_exit (usb_skel_exit); /*模块出口*/ static struct usb_driver skel_driver = {  name:  \"skeleton\本驱动名*/  probe:  skel_probe,/*USB设备探测函数指针*/  disconnect: skel_disconnect,/*USB设备断开函数指针*/  fops:  &skel_fops,/*对应的操作*/  minor:  USB_SKEL_MINOR_BASE,  id_table: skel_table,/*本驱动支持的设备列里面对应设备VENDOR_ID,PRODUCT_ID*/ };
static struct file_operations skel_fops = {  owner:  THIS_MODULE,  read:  skel_read,  write:  skel_write,  ioctl:  skel_ioctl,  open:  skel_open,  release: skel_release, };