資源簡介
根據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?<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
評論
共有 條評論