導航:首頁 > 編程系統 > endpointforlinux

endpointforlinux

發布時間:2023-11-27 01:15:45

① 如何查看errno 錯誤代碼

首先在自己的程序中#include<errno.h>
添加列印errno的語句 printf("errno is: %d\n",errno);
根據errno的值查錯。
errno的不同值的含義:
以下來自linux 2.4.20-18的內核代碼中的/usr如何查看errno 錯誤代碼 /include/asm/errno.h
#ifndef _I386_ERRNO_H
#define _I386_ERRNO_H
#define EPERM 1 /* Operation not permitted */
#define ENOENT 2 /* No such file or directory */
#define ESRCH 3 /* No such process */
#define EINTR 4 /* Interrupted system call */
#define EIO 5 /* I/O error */
#define ENXIO 6 /* No such device or address */
#define E2BIG 7 /* Arg list too long */
#define ENOEXEC 8 /* Exec format error */
#define EBADF 9 /* Bad file number */
#define ECHILD 10 /* No child processes */
#define EAGAIN 11 /* Try again */
#define ENOMEM 12 /* Out of memory */
#define EACCES 13 /* Permission denied */
#define EFAULT 14 /* Bad address */
#define ENOTBLK 15 /* Block device required */
#define EBUSY 16 /* Device or resource busy */
#define EEXIST 17 /* File exists */
#define EXDEV 18 /* Cross-device link */
#define ENODEV 19 /* No such device */
#define ENOTDIR 20 /* Not a directory */
#define EISDIR 21 /* Is a directory */
#define EINVAL 22 /* Invalid argument */
#define ENFILE 23 /* File table overflow */
#define EMFILE 24 /* Too many open files */
#define ENOTTY 25 /* Not a typewriter */
#define ETXTBSY 26 /* Text file busy */
#define EFBIG 27 /* File too large */
#define ENOSPC 28 /* No space left on device */
#define ESPIPE 29 /* Illegal seek */
#define EROFS 30 /* Read-only file system */
#define EMLINK 31 /* Too many links */
#define EPIPE 32 /* Broken pipe */
#define EDOM 33 /* Math argument out of domain of func */
#define ERANGE 34 /* Math result not representable */
#define EDEADLK 35 /* Resource deadlock would occur */
#define ENAMETOOLONG 36 /* File name too long */
#define ENOLCK 37 /* No record locks available */
#define ENOSYS 38 /* Function not implemented */
#define ENOTEMPTY 39 /* Directory not empty */
#define ELOOP 40 /* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN /* Operation would block */
#define ENOMSG 42 /* No message of desired type */
#define EIDRM 43 /* Identifier removed */
#define ECHRNG 44 /* Channel number out of range */
#define EL2NSYNC 45 /* Level 2 not synchronized */
#define EL3HLT 46 /* Level 3 halted */
#define EL3RST 47 /* Level 3 reset */
#define ELNRNG 48 /* Link number out of range */
#define EUNATCH 49 /* Protocol driver not attached */
#define ENOCSI 50 /* No CSI structure available */
#define EL2HLT 51 /* Level 2 halted */
#define EBADE 52 /* Invalid exchange */
#define EBADR 53 /* Invalid request descriptor */
#define EXFULL 54 /* Exchange full */
#define ENOANO 55 /* No anode */
#define EBADRQC 56 /* Invalid request code */
#define EBADSLT 57 /* Invalid slot */
#define EDEADLOCK EDEADLK
#define EBFONT 59 /* Bad font file format */
#define ENOSTR 60 /* Device not a stream */
#define ENODATA 61 /* No data available */
#define ETIME 62 /* Timer expired */
#define ENOSR 63 /* Out of streams resources */
#define ENONET 64 /* Machine is not on the network */
#define ENOPKG 65 /* Package not installed */
#define EREMOTE 66 /* Object is remote */
#define ENOLINK 67 /* Link has been severed */
#define EADV 68 /* Advertise error */
#define ESRMNT 69 /* Srmount error */
#define ECOMM 70 /* Communication error on send */
#define EPROTO 71 /* Protocol error */
#define EMULTIHOP 72 /* Multihop attempted */
#define EDOTDOT 73 /* RFS specific error */
#define EBADMSG 74 /* Not a data message */
#define EOVERFLOW 75 /* Value too large for defined data type */
#define ENOTUNIQ 76 /* Name not unique on network */
#define EBADFD 77 /* File descriptor in bad state */
#define EREMCHG 78 /* Remote address changed */
#define ELIBACC 79 /* Can not access a needed shared library */
#define ELIBBAD 80 /* Accessing a corrupted shared library */
#define ELIBSCN 81 /* .lib section in a.out corrupted */
#define ELIBMAX 82 /* Attempting to link in too many shared libraries */
#define ELIBEXEC 83 /* Cannot exec a shared library directly */
#define EILSEQ 84 /* Illegal byte sequence */
#define ERESTART 85 /* Interrupted system call should be restarted */
#define ESTRPIPE 86 /* Streams pipe error */
#define EUSERS 87 /* Too many users */
#define ENOTSOCK 88 /* Socket operation on non-socket */
#define EDESTADDRREQ 89 /* Destination address required */
#define EMSGSIZE 90 /* Message too long */
#define EPROTOTYPE 91 /* Protocol wrong type for socket */
#define ENOPROTOOPT 92 /* Protocol not available */
#define EPROTONOSUPPORT 93 /* Protocol not supported */
#define ESOCKTNOSUPPORT 94 /* Socket type not supported */
#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96 /* Protocol family not supported */
#define EAFNOSUPPORT 97 /* Address family not supported by protocol */
#define EADDRINUSE 98 /* Address already in use */
#define EADDRNOTAVAIL 99 /* Cannot assign requested address */
#define ENETDOWN 100 /* Network is down */
#define ENETUNREACH 101 /* Network is unreachable */
#define ENETRESET 102 /* Network dropped connection because of reset */
#define ECONNABORTED 103 /* Software caused connection abort */
#define ECONNRESET 104 /* Connection reset by peer */
#define ENOBUFS 105 /* No buffer space available */
#define EISCONN 106 /* Transport endpoint is already connected */
#define ENOTCONN 107 /* Transport endpoint is not connected */
#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109 /* Too many references: cannot splice */
#define ETIMEDOUT 110 /* Connection timed out */
#define ECONNREFUSED 111 /* Connection refused */
#define EHOSTDOWN 112 /* Host is down */
#define EHOSTUNREACH 113 /* No route to host */
#define EALREADY 114 /* Operation already in progress */
#define EINPROGRESS 115 /* Operation now in progress */
#define ESTALE 116 /* Stale NFS file handle */
#define EUCLEAN 117 /* Structure needs cleaning */
#define ENOTNAM 118 /* Not a XENIX named type file */
#define ENAVAIL 119 /* No XENIX semaphores available */
#define EISNAM 120 /* Is a named type file */
#define EREMOTEIO 121 /* Remote I/O error */
#define EDQUOT 122 /* Quota exceeded */
#define ENOMEDIUM 123 /* No medium found */
#define EMEDIUMTYPE 124 /* Wrong medium type */
#endif

② 誰給我一個能用的殺毒軟體免費的喲

08總結--國內真正免費安全軟體大集合

年末總結一下國內的安全軟體,下面推薦的是真正意義上的完全免費的、全功能的安全軟體。

1、超級巡警:定義為輔殺,不過貌似現在翻身了,向著主殺直奔而去。
官網:http://www.sucop.com/
產品:超級巡警、暢游巡警、U盤巡警、影音巡警、暴力文件刪除工具、保險箱、首頁巡警……以上完全免費,效果不錯,在需要時會給你帶來意想不到的驚喜。

2、魔法盾:傳說中的EQ,HIPS 類的軟體,有耐心的朋友不妨試試看,教程在卡飯HIPS 專區有。
官網:http://www.eqsecure.com/
產品:EQSecure

3、完美卸載:卸載軟體的好幫手,用過的都知道,貌似現在也有點監控功能了,不過不能算專業的安軟。
官網:http://www.killsoft.cn/
產品:完美卸載完整版、簡裝版

4、360安全衛士:這個就不用我介紹了吧,我感覺很不錯,360還有殺毒軟體(有NOD32 的半年版,有BD 的監控版和綠色版)。
官網:http://www.360.cn/
產品:360安全衛士、保險箱、安全瀏覽器、ARP防火牆、時間保護器……太多了,自己去看吧,是系統輔助軟體的不錯選擇。

5、墨者安全專家:我沒用過,是新興的類似360的輔助軟體,其中附帶的趨勢完全免費。
官網:http://www.mozhe.com/
產品:墨者安全專家

6、瑞星卡卡:這個也很多人用,不用介紹了吧。
官網:http://tool.ikaka.com/
產品:瑞星卡卡上網安全助手

7、金山軟體:系統輔助類軟體,用過的都知道,還有免費的ARP 防火牆、金山密保、金山清理專家、WPS。
官網:http://www.ba.net/index.shtml
產品:金山清理專家、金山密保、ARP 防火牆、WPS(http://wps.kingsoft.com/ 特別推薦)

8、綠鷹:
官網:http://www.cnlvker.com/#EGhost
產品:綠鷹安全精靈、一鍵恢復系統……

9、windows清理助手:很不錯的輔助軟體。
官網:http://www.arswp.com/
產品:windows清理助手

10、中網S3:
官網:http://www.netchina.com.cn/users/0/151.html
下載:http://www.netchina.com.cn/users/0/151.html

11、瑞星谷歌專版:不知道可以免費多久。
官網:http://pack.google.com/intl/zh-cn/pack_installer.html
下載:http://pack.google.com/intl/zh-cn/pack_installer.html

12、光華反病毒:
官網:http://www.viruschina.com/
下載:http://www.viruschina.com/downs/index.htm

13、殺馬:
官網:http://www.xnlab.com/zh/
下載:http://www.xnlab.com/zh/defendio/

其他國內安軟:

1、費爾:極力推薦,69元終身碼,誰用誰知的,官方工作認真負責,我是深有體會,有90天試用期(只能試用一次,因為會記錄硬碟信息以防盜版)。
官網:http://www.filseclab.com/chs/default.htm
產品:費爾托斯特安全、費爾個人防火牆專業版(免費)、費爾網路監護專家

2、金山:免費37天,很久以前就有的規矩了,只免費使用37天,現在2009版出來了,值得期待。
官網:http://www.ba.net/index.shtml
產品:金山毒霸、金山網鏢

3、瑞星:現在有免費1年的活動,不知道啥時候終止,大家想用就要快哈,以前一般是試用半年還是3個月。
官網:http://www.rising.com.cn/new2008/
產品:瑞星殺毒軟體、瑞星防火牆

4、江民:一般試用30天,貌似防火牆是免費的。
官網:http://www.jiangmin.com/
產品:江民殺毒軟體、江民密保、江民防火牆……

5、微點:有預升級,具體情況自己到官網看。
官網:http://www.micropoint.com.cn/
產品:微點主動防禦軟體

6、風雲:風雲防火牆實質上是一款免費軟體,軟體免費下載安裝後沒有任何實用功能限制,官方為注冊用戶提供軟體在線升級服務(如軟體的版本更新、優化、特徵碼庫等)。您只需要花費68元,就可擁有風雲終身正版升級序列號。
官網:http://www.218.cc/ (應該是這個)
產品:風雲防火牆

7、彩影ARP防火牆:很有名的區域網防火牆,單機版授權方式(http://www.antiarp.com/reg.asp?ArticleID=83)
官網:http://www.antiarp.com/index.htm
產品:彩影ARP防火牆網路版、單機版

08總結--國外真正免費安全軟體大集合

一、殺毒軟體(antivirus)

1、PC Tools AntiVirus:有中文
官網:http://www.pctools.com/cn/
下載:http://www.pctools.com/cn/free-antivirus/

2、Avira:德國小紅傘,無中文
官網:http://www.free-av.com/
下載:http://www.free-av.com/en/downlo ... free_antivirus.html

3、avast !:捷克小a,有中文
官網:http://www.avast.com/index_cns.html
下載:
http://www.avast.com/cns/download-avast-home.html (windows)
http://www.avast.com/cnt/download-avast-for-linux-edition.html (Linux)

4、AVG :無中文
官網:http://www.avg.com/
下載:http://www.avg.com/download-trial 或者 http://free.avg.com/

5、大蜘蛛綠色版:有中文,只是一個掃描器,但是確實很不錯,當你的殺軟被病毒搞死時,這個在安全模式下的殺毒是不二選擇。
官網:http://www.drweb.com.cn/
下載:http://www.download.com/Dr-Web-CureIt-/3000-2239_4-128071.html

6、BitDefender Free Edition 8
官網:http://www.bitdefender.com/
下載:http://www.download.com/BitDefen ... 239_4-10322483.html

7、clamwin :無中文
官網:http://www.clamwin.com/
下載:http://www.clamwin.com/content/view/18/46/

二、反間諜(antispyware)

1、Ad-Aware:無中文
官網:http://lavasoft.com/
下載:http://lavasoft.com/procts/ad_aware_free.php

2、Spyware Terminator :無中文
官網:http://www.spywareterminator.com/
下載:http://www.spywareterminator.com/download/download.aspx

3、a-squared :有中文
官網:http://www.emsisoft.com/en/
下載:http://www.emsisoft.com/en/software/free/

三、主機入侵防禦系統(HIPS)

1、ThreatFire:有中文
官網:http://www.threatfire.com/
下載:http://www.threatfire.com/download/

2、System Safety :有中文
官網:http://www.syssafety.com/
下載:http://www.syssafety.com/

四、防火牆(Firewall)

1、Ashampoo :有繁體中文
官網:http://www2.ashampoo.com/webcache/html/1/home_2.htm
下載:http://www2.ashampoo.com/webcache/html/1/proct_2_0050__.htm

2、Jetico :不詳
官網:http://www.jetico.com/
下載:http://www.jetico.com/jpfirewall.htm

3、PC Tools Firewall Plus :有中文
官網:http://www.pctools.com/cn/
下載:http://www.pctools.com/cn/firewall/download/

4、Zonealarm:無中文
官網:http://www.zonealarm.com/store/content/home.jsp?dc=12bms&;ctry=CN〈=zh
下載:http://www.zonealarm.com/store/content/dotzone/freeDownloads.jsp

5、Online Armor :無中文
官網:http://www.tallemu.com/
下載:http://www.tallemu.com/free-firewall-protection-software.html

五、安全套裝( Internet Security)

1、comodo :因為現在把防火牆和殺軟組合在一起,所以以前的comodo 單純的防火牆很難看到了(無中文)
官網:http://www.comodo.com/
下載:http://www.personalfirewall.comodo.com/index.html

補充冷門:

1、Moonsecure Antivirus
基於clamwin的引擎加自己的啟發技術,開源免費,最新版本2.2.2.164beta
官網:www.moonsecure.com

2、My Free Antivirus 2.0
比較冷門的免費,簡單的簡介,不足的查殺率,可使用不推薦長時間使用
官網:http://smartpctools.com/free_antivirus/index.html

③ C語言中頭文件errno.h是什麼含義包含些什麼內容

errno.h 是C語言抄C標准函式庫里的標頭檔,定義了通過錯誤碼來回報錯誤信息的宏。

errno本身是一個整型的全局變數,當使用errno的庫函數,在執行出錯時,只通過函數返回值返回一個表示出錯的標識,如-1或NULL等,具體的出錯原因會被賦值到errno中。通過查詢errno可以確定具體的出錯原因。

在errno.h中定義了一系列常見的宏,其形式為
#define EPERM 1 /* Operation not permitted */
可以劃分為
1 定義一個宏名,以E開頭;
2 定義其值,為一個正整數;
3 一個注釋區域,說明該錯誤號出現時的具體錯誤內容。

errno.h中的條目因不同編譯器的實現而有所區別,一般在100~128條范圍內,具體內容可以在編譯器的系統標准頭文件夾下查看對應文件。

④ 怎樣寫linux下的USB設備驅動程序

寫一個USB的驅動程序最 基本的要做四件事:驅動程序要支持的設備、注冊USB驅動程序、探測和斷開、提交和控制urb(USB請求塊)
驅動程序支持的設備:有一個結構體struct usb_device_id,這個結構體提供了一列不同類型的該驅動程序支持的USB設備,對於一個只控制一個特定的USB設備的驅動程序來說,struct usb_device_id表被定義為:
/* 驅動程序支持的設備列表 */
static struct usb_device_id skel_table [] = {
{ USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID) },
{ } /* 終止入口 */
};
MODULE_DEVICE_TABLE (usb, skel_table);
對 於PC驅動程序,MODULE_DEVICE_TABLE是必需的,而且usb必需為該宏的第一個值,而USB_SKEL_VENDOR_ID和 USB_SKEL_PRODUCT_ID就是這個特殊設備的製造商和產品的ID了,我們在程序中把定義的值改為我們這款USB的,如:
/* 定義製造商和產品的ID號 */
#define USB_SKEL_VENDOR_ID 0x1234
#define USB_SKEL_PRODUCT_ID 0x2345
這兩個值可以通過命令lsusb,當然你得先把USB設備先插到主機上了。或者查看廠商的USB設備的手冊也能得到,在我機器上運行lsusb是這樣的結果:
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 002: ID 1234:2345 Abc Corp.
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
得到這兩個值後把它定義到程序里就可以了。
注冊USB驅動程序:所 有的USB驅動程序都必須創建的結構體是struct usb_driver。這個結構體必須由USB驅動程序來填寫,包括許多回調函數和變數,它們向USB核心代碼描述USB驅動程序。創建一個有效的 struct usb_driver結構體,只須要初始化五個欄位就可以了,在框架程序中是這樣的:
static struct usb_driver skel_driver = {
.owner = THIS_MODULE,
.name = "skeleton",
.probe = skel_probe,
.disconnect = skel_disconnect,
.id_table = skel_table,
};
探測和斷開:當 一個設備被安裝而USB核心認為該驅動程序應該處理時,探測函數被調用,探測函數檢查傳遞給它的設備信息,確定驅動程序是否真的適合該設備。當驅動程序因 為某種原因不應該控制設備時,斷開函數被調用,它可以做一些清理工作。探測回調函數中,USB驅動程序初始化任何可能用於控制USB設備的局部結構體,它 還把所需的任何設備相關信息保存到一個局部結構體中,
提交和控制urb:當驅動程序有數據要發送到USB設備時(大多數情況是在驅動程序的寫函數中),要分配一個urb來把數據傳輸給設備:
/* 創建一個urb,並且給它分配一個緩存*/
urb = usb_alloc_urb(0, GFP_KERNEL);
if (!urb) {
retval = -ENOMEM;
goto error;
}
當urb被成功分配後,還要創建一個DMA緩沖區來以高效的方式發送數據到設備,傳遞給驅動程序的數據要復制到這塊緩沖中去:
buf = usb_buffer_alloc(dev->udev, count, GFP_KERNEL, &urb->transfer_dma);
if (!buf) {
retval = -ENOMEM;
goto error;
}

if (_from_user(buf, user_buffer, count)) {
retval = -EFAULT;
goto error;
}
當數據從用戶空間正確復制到局部緩沖區後,urb必須在可以被提交給USB核心之前被正確初始化:
/* 初始化urb */
usb_fill_bulk_urb(urb, dev->udev,
usb_sndbulkpipe(dev->udev, dev->bulk_out_endpointAddr),
buf, count, skel_write_bulk_callback, dev);
urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
然後urb就可以被提交給USB核心以傳輸到設備了:
/* 把數據從批量OUT埠發出 */
retval = usb_submit_urb(urb, GFP_KERNEL);
if (retval) {
err("%s - failed submitting write urb, error %d", __FUNCTION__, retval);
goto error;
}
當urb被成功傳輸到USB設備之後,urb回調函數將被USB核心調用,在我們的例子中,我們初始化urb,使它指向skel_write_bulk_callback函數,以下就是該函數:
static void skel_write_bulk_callback(struct urb *urb, struct pt_regs *regs)
{
struct usb_skel *dev;

dev = (struct usb_skel *)urb->context;

if (urb->status &&
!(urb->status == -ENOENT ||
urb->status == -ECONNRESET ||
urb->status == -ESHUTDOWN)) {
dbg("%s - nonzero write bulk status received: %d",
__FUNCTION__, urb->status);
}

/* 釋放已分配的緩沖區 */
usb_buffer_free(urb->dev, urb->transfer_buffer_length,
urb->transfer_buffer, urb->transfer_dma);
}
有時候USB驅動程序只是要發送或者接收一些簡單的數據,驅動程序也可以不用urb來進行數據的傳輸,這是里涉及到兩個簡單的介面函數:usb_bulk_msg和usb_control_msg ,在這個USB框架程序里讀操作就是這樣的一個應用:
/* 進行阻塞的批量讀以從設備獲取數據 */
retval = usb_bulk_msg(dev->udev,
usb_rcvbulkpipe(dev->udev, dev->bulk_in_endpointAddr),
dev->bulk_in_buffer,
min(dev->bulk_in_size, count),
&count, HZ*10);

/*如果讀成功,復制到用戶空間 */
if (!retval) {
if (_to_user(buffer, dev->bulk_in_buffer, count))
retval = -EFAULT;
else
retval = count;
}
usb_bulk_msg介面函數的定義如下:
int usb_bulk_msg(struct usb_device *usb_dev,unsigned int pipe,
void *data,int len,int *actual_length,int timeout);
其參數為:
struct usb_device *usb_dev:指向批量消息所發送的目標USB設備指針。
unsigned int pipe:批量消息所發送目標USB設備的特定端點,此值是調用usb_sndbulkpipe或者usb_rcvbulkpipe來創建的。
void *data:如果是一個OUT端點,它是指向即將發送到設備的數據的指針。如果是IN端點,它是指向從設備讀取的數據應該存放的位置的指針。
int len:data參數所指緩沖區的大小。
int *actual_length:指向保存實際傳輸位元組數的位置的指針,至於是傳輸到設備還是從設備接收取決於端點的方向。
int timeout:以Jiffies為單位的等待的超時時間,如果該值為0,該函數一直等待消息的結束。
如果該介面函數調用成功,返回值為0,否則返回一個負的錯誤值。
usb_control_msg介面函數定義如下:
int usb_control_msg(struct usb_device *dev,unsigned int pipe,__u8 request,__u8requesttype,__u16 value,__u16 index,void *data,__u16 size,int timeout)
除了允許驅動程序發送和接收USB控制消息之外,usb_control_msg函數的運作和usb_bulk_msg函數類似,其參數和usb_bulk_msg的參數有幾個重要區別:
struct usb_device *dev:指向控制消息所發送的目標USB設備的指針。
unsigned int pipe:控制消息所發送的目標USB設備的特定端點,該值是調用usb_sndctrlpipe或usb_rcvctrlpipe來創建的。
__u8 request:控制消息的USB請求值。
__u8 requesttype:控制消息的USB請求類型值。
__u16 value:控制消息的USB消息值。
__u16 index:控制消息的USB消息索引值。
void *data:如果是一個OUT端點,它是指身即將發送到設備的數據的指針。如果是一個IN端點,它是指向從設備讀取的數據應該存放的位置的指針。
__u16 size:data參數所指緩沖區的大小。
int timeout:以Jiffies為單位的應該等待的超時時間,如果為0,該函數將一直等待消息結束。
如果該介面函數調用成功,返回傳輸到設備或者從設備讀取的位元組數;如果不成功它返回一個負的錯誤值。
這兩個介面函數都不能在一個中斷上下文中或者持有自旋鎖的情況下調用,同樣,該函數也不能被任何其它函數取消,使用時要謹慎。
我們要給未知的USB設備寫驅動程序,只需要把這個框架程序稍做修改就可以用了,前面我們已經說過要修改製造商和產品的ID號,把0xfff0這兩個值改為未知USB的ID號。
#define USB_SKEL_VENDOR_ID 0xfff0
#define USB_SKEL_PRODUCT_ID 0xfff0
還 有就是在探測函數中把需要探測的介面端點類型寫好,在這個框架程序中只探測了批量(USB_ENDPOINT_XFER_BULK)IN和OUT端點,可 以在此處使用掩碼(USB_ENDPOINT_XFERTYPE_MASK)讓其探測其它的端點類型,驅動程序會對USB設備的每一個介面進行一次探測, 當探測成功後,驅動程序就被綁定到這個介面上。再有就是urb的初始化問題,如果你只寫簡單的USB驅動,這塊不用多加考慮,框架程序里的東西已經夠用 了,這里我們簡單介紹三個初始化urb的輔助函數:
usb_fill_int_urb :它的函數原型是這樣的:
void usb_fill_int_urb(struct urb *urb,struct usb_device *dev,
unsigned int pipe,void *transfer_buff,
int buffer_length,usb_complete_t complete,
void *context,int interval);
這個函數用來正確的初始化即將被發送到USB設備的中斷端點的urb。
usb_fill_bulk_urb :它的函數原型是這樣的:
void usb_fill_bulk_urb(struct urb *urb,struct usb_device *dev,
unsigned int pipe,void *transfer_buffer,
int buffer_length,usb_complete_t complete)
這個函數是用來正確的初始化批量urb端點的。
usb_fill_control_urb :它的函數原型是這樣的:
void usb_fill_control_urb(struct urb *urb,struct usb_device *dev,unsigned int pipe,unsigned char *setup_packet,void *transfer_buffer,int buffer_length,usb_complete_t complete,void *context);
這個函數是用來正確初始化控制urb端點的。
還有一個初始化等時urb的,它現在還沒有初始化函數,所以它們在被提交到USB核心前,必須在驅動程序中手工地進行初始化,可以參考內核源代碼樹下的/usr/src/~/drivers/usb/media下的konicawc.c文件。

閱讀全文

與endpointforlinux相關的資料

熱點內容
vc修改文件名 瀏覽:149
linux65從域 瀏覽:321
用什麼東西壓縮文件 瀏覽:406
怎麼刪除ipad隱藏的APP 瀏覽:981
編程如何佔用大量內存 瀏覽:116
多個excel表格文件如何組合 瀏覽:918
ubuntu內核升級命令 瀏覽:679
pgp文件夾 瀏覽:894
一鍵還原的文件是什麼格式 瀏覽:581
女漢子微信名霸氣十足 瀏覽:65
win10手機藍屏修復 瀏覽:419
windows2008激活工具 瀏覽:259
g71的編程應注意什麼 瀏覽:572
文件路徑不符合是什麼意思 瀏覽:543
qq如何換綁微信綁定 瀏覽:67
文件包下載的安裝包在哪裡 瀏覽:811
90版本升級不送 瀏覽:186
工具箱英文 瀏覽:382
南翔嘉定編程課哪裡好 瀏覽:853
win10改變文件格式 瀏覽:475

友情鏈接