最近要在一塊老闆子上面移植openwrt,需要擴充網口,於是選擇了qf9700這款USB網卡,附贈的光碟片裡面有提供在linux下面安裝的驅動原始碼,所以我們要自己編譯驅動原始碼產生核心載入模組,載入模組成功後才能正常使用網卡。下面介紹一下qf9700在x86和arm上的驅動的安裝和配置。
x86(使用ubuntu10.04):
1.首先要確認使用的linux的核心的版本號碼,在終端裡面輸入 uname -r 獲得。
2.下載與你目前使用的核心版本一致的原始碼, 可以到這個連結處下載http://www.kernel.org/,在ubuntu裡面有個簡便的操作方式,sudo apt-get install linux-source,下載到的原始碼儲存在/usr/src/下。
3.擷取目前你所使用核心的設定檔config-2.6.xx-xx-generic,該檔案儲存在/boot檔案夾下(xx是它的小版本號碼)。
4.進入到/usr/src/下,解壓縮linux核心原始碼,拷貝設定檔到解壓縮後的核心原始碼樹根目錄裡面,這幾步操作的命令如下:tar zxvf linux-xxx.tar.gz -C /home/linux ,cp /boot/config-2.6.xx-xx-generic /home/linux/.config。
5.進入解壓縮獲得的linux核心樹檔案夾下編譯,命令如下:cd /home/linux && make,然後進入漫長的編譯等待時間。
************************************************************************************************************************************************************
以上屬於通用的編譯核心的過程,有基礎的兄弟們可以略過,下面幾步很重要。
6.待核心編譯完成後,解壓縮驅動的原始碼,修改裡面MAKEFILE,有關路徑的操作和前面步驟的論述保持一致:
KERNEL_DIR := /home/linux/
MODULE_NAME := qf9700
obj-m := $(MODULE_NAME).o
all:
@echo "Building QF9700 USB2NET chip driver..."
@(cd $(KERNEL_DIR) && make -C $(KERNEL_DIR) SUBDIRS=$(PWD) CROSS_COMPILE=$(CROSS_COMPILE) modules)
clean:
-rm -f *.o *.ko .*.cmd .*.flags .mii.mod.o.d *.mod.c Module.symvers Module.markers modules.order version.h
-rm -rf .tmp_versions
7.修改MAKEFILE確認無誤後,make
在x86上面編譯沒有錯誤的提示,有關在arm平台上面的錯誤我會在後面描述,編譯產生的qf9700.ko檔案就是我們需要的核心模組。
8.這是比較重要的一步,使用USB網卡對核心的usbnet和mii模組有依賴關係,所以在載入qf9700.ko模組之前要確認usbnet.ko和mii.ko模組已經載入到了核心之中,可以使用lsmod |grep -e usbnet -e mii這一命令查詢,在確認到兩個模組已經成功載入後,調用命令 insmod qf9700.ko 載入qf9700.ko。
9.最後一步,調用命令 cat /var/log/syslog | grep -e usb -e qf9700 來確認添加的usb網卡的裝置名稱,一般情況是你現在使用網卡名的編號加1,如你現在的網卡是eth0,那麼新添加的網卡就是eth1。調用ifconfig命令啟動,配置網卡,至此USB網卡可以正常使用。
arm(使用s3c2410)
1~6,和x86的核心編譯過程基本一致,需要注意的是要修改linux核心樹下的MAKEFILE檔案和qf9700驅動的MAKEFILE檔案以支援交叉編譯器。
7.在編譯qf9700的驅動時候會提示有__udelay()_的錯誤,查閱資料得知,arm不支援udelay()裡面的參數大於2000的情況,需要修改qf9700.c裡面的幾句,把udelay(20*1000)改為mdelay(20),udelay(2*1000)改為mdelay(2)即可成功編譯。
8.載入核心模組的操作也是相同的,但是和x86不同的是完成模組的載入後,並沒有找到對應的網卡裝置,調用dmesg命令後,發現如下代碼:
usb 1-2: new full speed USB device using qf9700 and address 3
usb 1-2: rejected 1 configuration due to insufficient available bus-power
usb 1-2: no configuration chosen from 1 choice
說明由於USB介面電流不足不能使USB網卡正常配置,可以調用下面命令
echo -n 1 > /sys/bus/usb/devices/1-2/bConfigurationValue 裝置ID和你在dmesg下查看到的要保證一致(紅色標註的)
9.上述操作完成後,調用ifconfig命令啟動配置USB網口後,就可以在arm板上使用了。
參考連結:
http://mquin.livejournal.com/178482.html
http://ubuntuforums.org/showthread.php?p=11104624
http://www.linuxquestions.org/questions/linux-newbie-8/usb-insufficient-available-bus-power-764463/
http://blog.chinaunix.net/space.php?uid=11391497&do=blog&id=1988854
http://hi.baidu.com/fwmf/blog/item/e380ad0e6662c1eb37d1223e.html