• 大小: 25KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: 其他
  • 标签: linux  U盘  

资源简介

根据linux下的usb-skeleton.c改写的U盘驱动程序,包括.c .o文件和Makefile文件,可以直接编译

资源截图

代码片段和文件信息

/*
 * My UDisk driver - 0.1
 *
 * TODO:
 * - fix urb->status race condition in write sequence
 * - move minor_table to a dynamic list.
 *
 * History:
 *
 * 2008_01_9 - 0.1 - zero out dev in probe function for devices that do
 * 
 */
#define __KERNEL__
#define MODULE
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define MAJOR_NR 42 // 定义主设备号
#define DEVICE_NAME “myudisk“ // 定义设备名
#define DEVICE_NR(device) (MINOR(device))
#define DEVICE_ON(device)
#define DEVICE_OFF(device)
#define DEVICE_NO_RANDOM
#include 
#define MYUDISK_SECTOR_BITS 9 /* 2**9 byte hardware sector */
#define MYUDISK_BLOCK_SIZE 1024 /* block size */ //定义了一个块的大小,以字节为单位
#define MYUDISK_TOTAL_SIZE 2048 /* size in blocks */ //定义了这个虚拟盘的容量,以块为单位

/* the storage pool */
//static char *myudisk_storage; //这个指针是全局变量,指向用于虚拟盘的内存

static int myudisk_sectorsize = 1 << MYUDISK_SECTOR_BITS;
static int myudisk_blocksize = MYUDISK_BLOCK_SIZE;
static int myudisk_size ;
static int myudisk_readahead = 4;
#define CONFIG_USB_DEBUG

#ifdef CONFIG_USB_DEBUG
static int debug = 1;
#else
static int debug;
#endif

/* Use our own dbg macro */
#undef dbg
#define dbg(format arg...) do { if (debug) printk(KERN_DEBUG __FILE__ “(%s): “ format “\n“  __FUNCTION__ ## arg); } while (0)

/* Version Information */
#define DRIVER_VERSION “v0.1“
#define DRIVER_AUTHOR “Wen Yan Jun yjwen@nudt.edu.cn“
#define DRIVER_DESC “My UDisk Driver“

/* Module paramaters */
MODULE_PARM(debug “i“);
MODULE_PARM_DESC(debug “Debug enabled or not“);

/* Define these values to match your device */
#define MY_UDISK_VENDOR_ID 0x58f
#define MY_UDISK_PRODUCT_ID 0x9380

/* table of devices that work with this driver */
/*当usb设备插入时,为了使linux系统自动装载驱动程序,需要创建一个MODULE_DEVICE_TABLE,这个模块仅支持某一特定设备*/
static struct usb_device_id myudisk_table [] = {
{ USB_DEVICE(MY_UDISK_VENDOR_ID MY_UDISK_PRODUCT_ID) }
{ } /* Terminating entry */
};

MODULE_DEVICE_TABLE (usb myudisk_table);

/* Get a minor range for your devices from the usb maintainer */
#define MY_UDISK_MINOR_base 192

/* we can have up to this number of device plugged in at once */
#define MAX_DEVICES 16


/* Structure to hold all of our device specific stuff */
struct my_udisk {
struct usb_device * udev; /* 保存usb设备指针 */
struct usb_interface * interface; /* usb所插入接口指针 */
devfs_handle_t devfs; /* devfs device node */
unsigned char minor; /* the starting minor number for this device */
unsigned char num_ports; /* the number of ports this device has */
char num_interrupt_in; /* number of interrupt in endpoints we have */

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        288  2007-12-28 01:47  Udisk\Makefile

     文件      45390  2009-07-17 09:59  Udisk\myudisk.c

     文件      31413  2005-12-23 18:47  Udisk\myudisk.o

     目录          0  2009-07-18 15:43  Udisk

----------- ---------  ---------- -----  ----

                77091                    4


评论

共有 条评论