在 linux 安裝 u sb 無線網卡
Post on 21-Mar-2016
79 Views
Preview:
DESCRIPTION
TRANSCRIPT
USB 無線網卡PLANEX GW-US54GZL IEEE802.11g U
SB2.0 攜帶型無線網路卡 http://www.planex.com.tw/product/soho/wireless/gw-us54gzl.htm
使用 ZD1211 晶片 http://www.zydas.com.tw/product/ZD1211.asp
支援 kernel 2.4.x 與 2.6.x
選用哪個 driver 好呢?驅動程式來源
From Planex (http://www.planex.com.tw) http://www.planex.com.tw/download/wireless/gw-us54gzl.htm Driver version : 2.4.0.0
From ZyDas (http://www.zydas.com.tw) http://www.zydas.com.tw/downloads/download-1211.asp Driver version : 2.8.0.0
由於 ZyDas 公司提供的 driver 比較新,所以就選用它了
ZyDas 的 driver
第一步:當然是把它的 tarball 給解開啦 第二步:必須要修改它的 Makefile ,將 kernel
source 的位址寫上去 第三步: make 與 make install !!
它含有兩個晶片的 driver : zd1211 與 zd1211b 。使用 make ZD1211REV_B=0 就只會編譯 zd1211
但是在 hotplug 時似乎不會自動載入,必須手動modprobe
ZD1211 的 driver 載入> modprobe –v zd1211> lsmod
Module Size Used byzd1211 263504 0
> tail /var/log/messages
取得 USB 裝置的基本資料 (1/2)
USB 裝置在連接到電腦時, /var/log/messages 會有訊息提示,如下usb 4-3: new high speed USB device using
ehci_hcd and address 9 ehci_hcd : USB 2.0 Enhanced Host Controll
er4 : bus number9 : device number
取得 USB 裝置的基本資料 (2/2)
USB 裝置在連接到電腦後,資訊會更新在 /proc/bus/usb/devices 這個檔案 T: Bus=04 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 9 Spd=48
0 MxCh= 0 D: Ver= 2.00 Cls=ff(vend.) Sub=ff Prot=ff MxPS=64 #Cfgs= 1 P: Vendor=2019 ProdID=c007 Rev=47.21 S: Manufacturer=PLANEX S: Product=PLANEX GW-US54GZL C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA I: If#= 0 Alt= 0 #EPs= 4 Cls=ff(vend.) Sub=00 Prot=00 Driver=z
d1211 E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=83(I) Atr=03(Int.) MxPS= 64 Ivl=125us E: Ad=04(O) Atr=03(Int.) MxPS= 64 Ivl=125us
HotPlug 修復 – zdusb.c (1/3)
static struct usb_device_id zd1211_ids [] = {……( 省略 )……
{ USB_DEVICE(VENDOR_3COM, PRODUCT_A727) },{ USB_DEVICE(0x2019, 0xc007) }, // 加入這項{ USB_DEVICE(0x2019, 0xc008) },
……( 省略 )……
HotPlug 修復 – zdusb.c (3/3)[root@Tony ~]# tail -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: EEPORM Ver = 4330kernel: PA type: 0kernel: AiroHa AL2230RFkernel: AllowedChannel = 000107ffkernel: Region:48kernel: usbcore: registered new driver zd1211
無線網卡運作情形 (1/2)
[root@Tony ~]# ifconfig eth2eth2 Link encap:Ethernet HWaddr 00:90:CC:CC:CE:84
inet addr:192.168.1.50 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::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)
[root@Tony ~]# iwconfig eth2 essid CD0[root@Tony ~]# iwconfig eth2eth2 802.11b/g NIC ESSID:"CD0"
Mode:Managed Frequency=2.462 GHz Access Point: 00:80:C8:37:BF:77
Bit 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 Rx invalid frag:0Tx excessive retries:261 Invalid misc:3 Missed beacon:0
usbnet.c (1/13)
int usbnet_get_endpoints(struct usbnet *dev, struct usb_interface *intf)判斷 endpoint
方向 (bEndpointAddress) (in/out)種類 (bmAttributes) (USB_ENDPOINT_XFER_I
NT/BULK)
usbnet.c (2/13)
static int init_status (struct usbnet *dev, struct usb_interface *intf)初始化讀取並設定設定最大封包、速度包含 kmalloc
void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb)收到封包後更新統計資料
usbnet.c (3/13)
static void defer_bh(struct usbnet *dev, struct sk_buff *skb, struct sk_buff_head *list)Delaying (spinlock)
void usbnet_defer_kevent (struct usbnet *dev, int work)Delaying (kevent)
usbnet.c (4/13)
static int usbnet_change_mtu (struct net_device *net, int new_mtu)改變 MTU
static struct net_device_stats *usbnet_get_stats (struct net_device *net)回傳 usbnet 結構中 stat 部分
usbnet.c (5/13)
static void rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags)準備 urb(USB Request Block)使用 usb_submit_urb() 將 bulk urb 送出至 U
SB core 或掛到 queue 尾端static void rx_complete (struct urb *urb, s
truct pt_regs *regs)根據 urb 結構的 status 變數得知狀態並做各種處理,最後用 rx_submit() 將 urb 送出
usbnet.c (6/13)
static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q)使用 usb_unlink_urb()
static int usbnet_stop (struct net_device *net)usbnet 結束時的處理使用 remove_wait_queue() 與 usb_kill_urb()將 urb 清乾淨
usbnet.c (7/13)
static int usbnet_open (struct net_device *net)usbnet 的開啟與初始
void usbnet_get_drvinfo (struct net_device *net, struct ethtool_drvinfo *info)modinfo
usbnet.c (8/13)
static void kevent (void *data)判斷 usbnet 結構的 flag 得到狀態對以下 event 狀態進行動作
#define EVENT_TX_HALT 0#define EVENT_RX_HALT1#define EVENT_RX_MEMORY 2#define EVENT_LINK_RESET 4
usbnet.c (9/13)
static void tx_complete (struct urb *urb, struct pt_regs *regs)根據 urb 結構 status 變數得狀態並做各種處理沒有將 urb 送出
static int usbnet_start_xmit (struct sk_buff *skb, struct net_device *net)usb_fill_bulk_urb() 準備 bulk urbusb_submit_urb() 送出 urb
usbnet.c (10/13)
Int usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)呼叫 usbnet_get_endpoints() 進行初始動作usb_set_intfdata() 儲存 data pointernetif_device_attach()
usbnet.c (11/13)
void usbnet_disconnect (struct usb_interface *intf)usb_get_intfdata() 查閱資料usb_set_intfdata() 將 device 部份設為 NULLunregister_netdev()
usbnet.c (12/13)
int usbnet_suspend (struct usb_interface *intf, pm_message_t message)usb_get_intfdata() 查閱資料netif_device_detach()unlink_urbs() 移除 rx/tx 的 urb
usbnet.c (13/13)
int usbnet_resume (struct usb_interface *intf)usb_get_intfdata() 查閱資料netif_device_attach()
linux/netdevice.h
static 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);
}}
top related