無線網卡設備驅動系統構成
主控制器採用atmel 9261,工作頻率180 mhz,具有16 kb數據cache和16 kb指令cache,外接64 mbnand flash和64 mb sdram,外圍接口由10/100 mb/s自適應乙太網卡,3個usb 2.0接口,2個通用異步收發器(uart),lcd接口以及串列外圍接口(spi)等組成,可以方便地外接工作設備。作業系統採用linux 2.6.15;bootloader採用u-boot;根檔案系統採用ramdisk。系統啟動後掛載yaffs檔案系統,該系統採用ateml公司的atmel 9261開發板,外圍接口包括2個usb host接口,其中一個外接usb無線網卡。無線路由器採用cisco-linksys的wrtl60n,支持802.11g標準、tcp協定和tftp協定,如圖1所示。
usb無線網卡驅動
對於接入系統中的usb無線網卡,從cpu的角度首先看到的是usb匯流排,然後才是網卡晶片,所以usb驅動要先於網卡驅動實現。usb設備接口有主機端與設備端區別,因而usb驅動程式也有usb主機端驅動程式與usb設備端驅動程式之分。在主控機方面,主要有uhci和ohci兩種規範。 上層的套用軟體對系統的usb設備進行訪問是通過檔案系統的形式進行的。每個連線到系統匯流排上的usb設備可以同時對應一個或多個驅動程式,即每個usb設備可以在linux系統上設定一個或多個節點供應用程式使用。 由於usb接口為主從方式和多設備連線的樹狀網路結構,所以usb主機必須具備對所有連線在匯流排上不同類型的usb設備進行配置管理的功能。linuxusb主機驅動程式可以同時支持多路usb匯流排功能,每路usb匯流排獨立工作。usb主機驅動由usb主機控制器驅動(hcd),usb驅動(usbd)和不同的usb設備類型驅動三部分組成。圖2描述了linux usb驅動程式的結構。linux定義了通用請求塊(universalreqlaest block,urb),用來在usb設備類驅動程式與usbd,usbd與hcd間進行數據傳輸。
無線網卡驅動編譯
該系統的linux核心版本為2.6.15,在宿主機上進行核心配置,通過“make menuconfig"將核心中不必要的功能去掉,增加對wlan的支持。依次點擊de-vice driver→network device suppor→wireless lan(non-hamradio)→選中wireless lan driners(non-hamradio)&wireless extensions;然後進入通用usb-wlan驅動程式源碼,修改makefile,將核心資料夾選項重新定位在剛才編譯好的linux核心下,通過“make"在該資料夾下編譯生成rt73.ko驅動模組。 在arm嵌入式linux開發中檔案的傳輸方式有多種,比如tftp服務和nfs檔案系統。在此採用將rt73.ko驅動模組下載至開發板,由於linux支持模組的動態載入,所以可以很方便地將該模組用“insmod”載入至核心,通過“lstood”查看載入的模組,之後rt73模組已經被成功載入。 在開發板檔案系統中添加無線管理應用程式,和iwconfig,iwapy,iwlist等,用於配置頻率、網路、id、es-sid、接受靈敏度、接人模式、無線網路標準、加密開關。 最後編寫無線網路啟動和自配置程式,實現自動配置ip地址和無線網卡。至此整個無線網卡驅動程式全部編譯完成。
linux
linux作為當今市場上嵌入式系統使用比例最高的作業系統,其驅動模式支持模組堆疊技術,核心開發者已提供了一些通用模組。現從工程套用出發,研究並移植了linux下usb無線網卡的設備驅動,以此為基礎既可以構建嵌入式無線區域網路,又可以用於有線網路無法延伸或難以安裝,以及有可靈活移動和臨時性使用等要求的、諸如外加攝像頭和圖像處理晶片的場合,還可以用於工業現場中的遠程無線視頻監控。