在Linux安装USB无线网卡课件.ppt

上传人:豆**** 文档编号:61317326 上传时间:2022-11-21 格式:PPT 页数:35 大小:149KB
返回 下载 相关 举报
在Linux安装USB无线网卡课件.ppt_第1页
第1页 / 共35页
在Linux安装USB无线网卡课件.ppt_第2页
第2页 / 共35页
点击查看更多>>
资源描述

《在Linux安装USB无线网卡课件.ppt》由会员分享,可在线阅读,更多相关《在Linux安装USB无线网卡课件.ppt(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、在Linux安装USB无线网卡课件 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望動機l有一張號稱支援Linux的USB無線網卡l雖然有附驅動程式但總是不能成功編譯l網路上有搜尋到幾種修改driver的方法但有待驗證USB無線網卡lPLANEX GW-US54GZL IEEE802.11g USB2.0 攜帶型無線網路卡lhttp:/.tw/product/soho/wireless/gw-us54gzl.html使用ZD1211晶片lhttp:/.tw/prod

2、uct/ZD1211.aspl支援kernel 2.4.x與2.6.xZD1211晶片Block Diagram選用哪個driver好呢?l驅動程式來源lFrom Planex(http:/.tw)lhttp:/.tw/download/wireless/gw-us54gzl.htmlDriver version:2.4.0.0lFrom ZyDas(http:/.tw)lhttp:/.tw/downloads/download-1211.asplDriver version:2.8.0.0l由於ZyDas公司提供的driver比較新,所以就選用它了沒有kernel source怎麼辦?lht

3、tp:/ devel即可ZyDas的driverl第一步:當然是把它的tarball給解開啦l第二步:必須要修改它的Makefile,將kernel source的位址寫上去l第三步:make 與 make install!l它含有兩個晶片的driver:zd1211與zd1211b。使用make ZD1211REV_B=0就只會編譯zd1211l但是在hotplug時似乎不會自動載入,必須手動modprobeZD1211的driver載入l modprobe v zd1211l lsmodlModule Size Used bylzd1211 263504 0l tail/var/log/m

4、essagesDebug工具l附有兩個debug工具lapdbglmenudbgl安裝方法l make debug目標l將USB無線網卡在Linux上成功安裝運作lhotplugl了解USB無線網卡在Linux的driver架構lsrc/zdusb.c在Linux安裝USB無線網卡Final Projecthotplug問題出在哪?l由於網路上有人抱怨使用此晶片的廠商與產品太多,driver常來不及更新l因此假設問題出在Vendor ID與Device ID取得USB裝置的基本資料(1/2)lUSB裝置在連接到電腦時,/var/log/messages 會有訊息提示,如下lusb 4-3:ne

5、w high speed USB device using ehci_hcd and address 9 lehci_hcd:USB 2.0 Enhanced Host Controllerl4:bus numberl9:device number取得USB裝置的基本資料(2/2)lUSB裝置在連接到電腦後,資訊會更新在/proc/bus/usb/devices 這個檔案lT:Bus=04 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#=9 Spd=480 MxCh=0lD:Ver=2.00 Cls=ff(vend.)Sub=ff Prot=ff MxPS=64#Cfgs

6、=1lP:Vendor=2019 ProdID=c007 Rev=47.21lS:Manufacturer=PLANEXlS:Product=PLANEX GW-US54GZLlC:*#Ifs=1 Cfg#=1 Atr=80 MxPwr=500mAlI:If#=0 Alt=0#EPs=4 Cls=ff(vend.)Sub=00 Prot=00 Driver=zd1211lE:Ad=01(O)Atr=02(Bulk)MxPS=512 Ivl=0mslE:Ad=82(I)Atr=02(Bulk)MxPS=512 Ivl=0mslE:Ad=83(I)Atr=03(Int.)MxPS=64 Ivl=1

7、25uslE:Ad=04(O)Atr=03(Int.)MxPS=64 Ivl=125usHotPlug修復 zdusb.c(1/3)static struct usb_device_id zd1211_ids =(省略)USB_DEVICE(VENDOR_3COM,PRODUCT_A727),USB_DEVICE(0 x2019,0 xc007),/加入這項 USB_DEVICE(0 x2019,0 xc008),(省略)HotPlug修復 zdusb.c(2/3)l將zdusb.c修改完成後重新編譯出模組l測試結果成功成功!HotPlug修復 zdusb.c(3/3)rootTony#tai

8、l-17/var/log/messageskernel:usb 4-3:new high speed USB device using ehci_hcd and address 11kernel:usb 4-3:configuration#1 chosen from 1 choicekernel:kernel:_ _ _ _kernel:|_ /_|_ /_|kernel:/|/_ _ kernel:/|_|_|/_ _)|kernel:/_,|_/_/_/kernel:|_/kernel:zd1211-version 2.8.0.0kernel:Release Ver=4721kernel:

9、EEPORM Ver=4330kernel:PA type:0kernel:AiroHa AL2230RFkernel:AllowedChannel=000107ffkernel:Region:48kernel:usbcore:registered new driver zd1211無線網卡運作情形(1/2)rootTony#ifconfig eth2eth2Link encap:Ethernet HWaddr 00:90:CC:CC:CE:84inet addr:192.168.1.50 Bcast:192.168.1.255 Mask:255.255.255.0inet6 addr:fe8

10、0:290:ccff:fecc:ce84/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:6 errors:0 dropped:0 overruns:0 frame:0TX packets:2 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:491(491.0 b)TX bytes:458(458.0 b)無線網卡運作情形(2/2)rootTony#iwconfig eth2 essid CD0r

11、ootTony#iwconfig eth2eth2802.11b/g NIC ESSID:CD0Mode:Managed Frequency=2.462 GHz Access Point:00:80:C8:37:BF:77Bit Rate:11 Mb/sRetry:off RTS thr=2432 B Fragment thr:offEncryption key:offPower Management:offLink Quality:75/100 Signal level:72/100 Noise level:7/100Rx invalid nwid:0 Rx invalid crypt:0

12、Rx invalid frag:0Tx excessive retries:261 Invalid misc:3 Missed beacon:0usbnet.c/drivers/usb/net/usbnet.cAuthor:David BrownellUSB Network Driver Frameworkusbnet.c(1/13)lint usbnet_get_endpoints(struct usbnet*dev,struct usb_interface*intf)l判斷endpointl方向(bEndpointAddress)(in/out)l種類(bmAttributes)(USB_

13、ENDPOINT_XFER_INT/BULK)usbnet.c(2/13)lstatic int init_status(struct usbnet*dev,struct usb_interface*intf)l初始化l讀取並設定設定最大封包、速度l包含kmalloclvoid usbnet_skb_return(struct usbnet*dev,struct sk_buff*skb)l收到封包後更新統計資料usbnet.c(3/13)lstatic void defer_bh(struct usbnet*dev,struct sk_buff*skb,struct sk_buff_head*

14、list)lDelaying(spinlock)lvoid usbnet_defer_kevent(struct usbnet*dev,int work)lDelaying(kevent)usbnet.c(4/13)lstatic int usbnet_change_mtu(struct net_device*net,int new_mtu)l改變MTUlstatic struct net_device_stats*usbnet_get_stats(struct net_device*net)l回傳usbnet結構中stat部分usbnet.c(5/13)lstatic void rx_sub

15、mit(struct usbnet*dev,struct urb*urb,gfp_t flags)l準備urb(USB Request Block)l使用usb_submit_urb()將bulk urb送出至USB core或掛到queue尾端lstatic void rx_complete(struct urb*urb,struct pt_regs*regs)l根據urb結構的status變數得知狀態並做各種處理,最後用rx_submit()將urb送出usbnet.c(6/13)lstatic int unlink_urbs(struct usbnet*dev,struct sk_buf

16、f_head*q)l使用usb_unlink_urb()lstatic int usbnet_stop(struct net_device*net)lusbnet結束時的處理l使用remove_wait_queue()與usb_kill_urb()將urb清乾淨usbnet.c(7/13)lstatic int usbnet_open(struct net_device*net)lusbnet的開啟與初始lvoid usbnet_get_drvinfo(struct net_device*net,struct ethtool_drvinfo*info)lmodinfousbnet.c(8/13

17、)lstatic void kevent(void*data)l判斷usbnet結構的flag得到狀態l對以下event狀態進行動作l#define EVENT_TX_HALT0l#define EVENT_RX_HALT1l#define EVENT_RX_MEMORY 2l#define EVENT_LINK_RESET 4usbnet.c(9/13)lstatic void tx_complete(struct urb*urb,struct pt_regs*regs)l根據urb結構status變數得狀態並做各種處理l沒有將urb送出lstatic int usbnet_start_xm

18、it(struct sk_buff*skb,struct net_device*net)lusb_fill_bulk_urb()準備bulk urblusb_submit_urb()送出urbusbnet.c(10/13)lInt usbnet_probe(struct usb_interface*udev,const struct usb_device_id*prod)l呼叫usbnet_get_endpoints()進行初始動作lusb_set_intfdata()儲存data pointerlnetif_device_attach()usbnet.c(11/13)lvoid usbnet

19、_disconnect(struct usb_interface*intf)lusb_get_intfdata()查閱資料lusb_set_intfdata()將device部份設為NULLlunregister_netdev()usbnet.c(12/13)lint usbnet_suspend(struct usb_interface*intf,pm_message_t message)lusb_get_intfdata()查閱資料lnetif_device_detach()lunlink_urbs()移除rx/tx的urbusbnet.c(13/13)lint usbnet_resume

20、(struct usb_interface*intf)lusb_get_intfdata()查閱資料lnetif_device_attach()linux/netdevice.hstatic inline void netif_device_attach(struct net_device*dev)if(!test_and_set_bit(_LINK_STATE_PRESENT,&dev-state)&netif_running(dev)netif_wake_queue(dev);netdev_watchdog_up(dev);linux/netdevice.hstatic inline void netif_device_detach(struct net_device*dev)if(test_and_clear_bit(_LINK_STATE_PRESENT,&dev-state)&netif_running(dev)netif_stop_queue(dev);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁