📄 tl-wn321g无线网卡for2.6.14移植详细步骤.rtf
字号:
1.进入无线网卡驱动目录 #cp Makefile.6 Makefile2.修改Makefile:NDDIR=/WirelessCard/busybox-1.2.1/_install/etc/sysconfig/networkMOD_CONF=/WirelessCard/busybox-1.2.1/_install/etc/modprobe.d/module-renames## NDDIR/ifcfg-rausb0ND_CONF=/WirelessCard/busybox-1.2.1/_install/etc/sysconfig/network-scripts/ifcfg-rausb0还需修改其它的3.#make all3.#cp rt73.bin busybox的主目录/_install/etc/Wireless/RT73STA/ 4.#dos2unix rt73sta.dat #cp rt73sta.dat busybox的主目录/_install/etc/Wireless/RT73STA/rt73sta.dat5.6.进入开发板系统 # insmod rt73.ko以上问题解决后,无线网卡工作正常。但还需移植无线扩充以便使用无线配置命令。从http://www.hpl.hp.co.uk/personal/Jean_Tourrilhes/Linux/Tools.html处下载无线扩充包修改无线扩充包的Makefile(可参照wireless tools 26),然后编译,出现下列提示:/include -o iwconfig iwconfig.o libiw.a/WirelessCard/arm-cross-3.4.1/usr/local/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/../../../../arm-linux/bin/ld: cannot find -lgcc_s解决方法:在Makefile文件的CFLAGS中添加-L /WirelessCard/arm-cross-3.4. 1/usr/local/arm/3.4.1/arm-linux/lib -lm -lc -lgcc_s然后进入交叉编译器的lib目录 ,输入:ln -s libgcc_s.so.1 libgcc_s.a$make$make install 成功______________________________________________________________________4.无线网卡配置a.先执行一下这个命令看一下rausb0设备是否注册:cat /proc/net/dev如果显示rausb0表已注册b. $/sbin/insmod rt73.ko 然后插入网卡输入: $/sbin/ifconfig rausb0 inet YOUR_IP netmask 255.255.255.0 up$route add default gw 10.1.41.2$/usr/local/sbin/iwconfig rausb0 essid "TP-LINK" (不能成功设置)$/usr/local/sbin/iwconfig rausb0 mode "ad-hoc" (能成功设置)$/usr/local/sbin/iwconfig rausb0 channel 54 (能成功设置)所以无法进行无线通信问题解决:为了解决问题,重新在PC机上进行试验。按照驱动的README文件的说明,发现关键的一点是必须用命令$dos2unix rt73sta.dat 保证rt73sta.dat是二进制文件。而且必须用vi -b rt73sta.dat 对rt73sta.dat进行必要的修改。# Copy this file to /etc/Wireless/RT73STA/rt73sta.dat
# This file is a binary file and will be read on loading rt.o module.通过上述方法PC可以成功和AP通信,但在嵌入式板子上进行试验发现把rt73sta.dat文件删除与否效果一致,表明在装入驱动时根本没有读这个二进制文件,这就是问题的症结所在。问题解决: 1.i can't see the SSID - after I had it set with iwpriv oder iwconfig.Ony if i compile the driver with Debug option (CFLAGS += -DDBG) $insmod rt73.ko $ifconfig rausb0 inet 10.1.41.222 netmask 255.255.255.0 然后出现debug信息,观察发现**RT2573**<7>--> NICLoadFirmware**RT2573**<7>--> Error 2 opening /friendly-arm/root/etc/Wireless/RT73STA/rt73.bn**RT2573**<7>NICLoadFirmware failed, used local Firmware(v 1.7) instead**RT2573**<7><-- NICLoadFirmware (src=/friendly-arm/root/etc/Wireless/RT73STA/r)**RT2573**<7>--> NICInitializeAsic**RT2573**<7>BBP version = 22**RT2573**<7><-- NICInitializeAsic**RT2573**<7>--> Error 2 opening /friendly-arm/root/etc/Wireless/RT73STA/rt73stt**RT2573**<7>--> NICReadEEPROMParameters也就是说NICLoadFirmware去装载的配置文件的位置不对搜索驱动源文件目录:grep 'friendly-arm' * 修改 vi rt_config.h中以下各行:#define PROFILE_PATH "/friendly-arm/root/etc/Wireless/RT73STA/rt73sta.dat"#define RT2573_IMAGE_FILE_NAME "/friendly-arm/root/etc/Wireless/RT73STA/rt73.bin"经过以上修改,仍有以下错误:ERROR!!! <7>MlmeEnqueueForRecv: frame too large, size = 3083分别到网卡驱动源程序目录中:make all > /zxh/NetCardForPC 2>&1 ;make all > /zxh/NetCardForArm 2>&1对比对驱动进行本机编译和交叉编译过程的对比,发现交叉编译中有以下警告信息:/WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/mlme.c: In function `AsicS witchChannel': 32 /WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/mlme.c:3822: warning: comp arison is always false due to limited range of data type 33 /WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/mlme.c:3828: warning: comp arison is always true due to limited range of data type 34 /WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/mlme.c:3880: warning: comp arison is always false due to limited range of data type/WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/mlme.c: In function `AsicA djustTxPower': 36 /WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/mlme.c:4439: warning: comp arison is always false due to limited range of data type/WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/rtmp_init.c: In function ` NICReadEEPROMParameters': 96 /WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/rtmp_init.c:1053: warning: comparison is always false due to limited range of data type 97 /WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/rtmp_init.c:1066: warning: comparison is always false due to limited range of data type 98 /WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/rtmp_init.c:1083: warning: comparison is always false due to limited range of data type 99 /WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/rtmp_init.c:1183: warning: comparison is always false due to limited range of data type 100 /WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/rtmp_init.c:1187: warning: comparison is always false due to limited range of data type 101 /WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/rtmp_init.c:1195: warning: comparison is always false due to limited range of data type 102 /WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/rtmp_init.c:1199: warning: comparison is always false due to limited range of data type 103 /WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/rtmp_init.c: In function ` RTMPCckBbpTuning': 104 /WirelessCard/RT73_Linux_STA_Drv1.0.3.6/debug/rtmp_init.c:3207: warning: comparison is always true due to limited range of data type分析:on x86 char defaults to signed char, but on the ppc (and ARM, don't know aboutsparc) char =3D=3D unsigned char.gcc has the options -fsigned-char and -funsigned-char to change the signedness of type char通过以上设置与ap的通信依然有点问题,在debug模式下出现的提示信息中有如下内容:(以下信息是在ad-hoc模式下与acer笔记本通信时的信息)PeerBeaconAndProbeRspSanity - missing field, Sanity=0x00可用diff -u -b rt_config.h /download/RT73_Linux_STA_Drv1.0.3.6/ARM-Module/rt_config.h来比较两个文件的内容用diff -u -b debug /download/RT73_Linux_STA_Drv1.0.3.6/ARM-Module/比较两个目录的文件在rtmp_init.c的第2775行加入语句if (Length ==0) return; IN PVOID pSrc, IN ULONG Length) {+ if (Length ==0) return;+ #ifdef RTMP_EMBEDDED(rt_config.h中包含了i386的头文件,改成arm后编译链接可以通过,但不能正常建立无线连接
后来我使用printk不断地跟进代码的执行路径, 最终才发现在ARM板上向网卡
下的配置数据流和在PC机上向网卡下的配置数据流不一致才确认是结构定义的修饰问题
还有一个空指针问题如果只修改上面两点, 在ARM上运行时会发生oops原因是使用中存在空指针访问)__________________________________________________________________________________________________________________________________________________________________________If you want for rt73 driver to auto-load at boot time:A) choose rausb0 for first RT73 WLAN card, rausb1 for second RT73 WLAN card, etc. B) create(edit) 'ifcfg-rausb0' file in /etc/sysconfig/network-scripts/, edit( or add the line) in /etc/modules.conf: alias rausb0 rt73C) edit(create) the file /etc/sysconfig/network-scripts/ifcfg-rausb0 DEVICE='rausb0' ONBOOT='yes'_______________________________________配置:iwconfig ath0 essid XXXXXXiwconfig ath0 key open YYYYYYYifconfig ath0 up然后就是配ip和网关,我用的dhcpdhcpclient ath0然后就ok了(essid等信息和AP的设置有关,将AP设置中的essid等信息修改一下,就可以在无线网卡的信息中列出来(如果在测试区域内只有一个AP的话)用iwconfig设置无线物理参数:1.网络标识:[root@Jack ~]# iwconfig ath0 essid “jack”2.网络频率:[root@Jack ~]# iwconfig ath0 freq 5.2G3.网络频道:[root@Jack ~]# iwconfig ath0 channel 114.网络速率:[root@Jack ~]# iwconfig ath0 rate 54M auto5.WEP加密:[root@Jack ~]# iwconfig ath0 key DEAD-BEFF-AA (可选,默认不加密)6.发射功率: [root@Jack ~]# iwconfig ath0 txpower 30 (可选, 以dBm为单位,自动使用默认值)最常用的工具是 iwconfig,它的用法类似 ifconfig。没有接口名称之外的参数的 iwconfig 命令可以得到网卡的工作状态:gnawux@APTITUDE:~$ /sbin/iwconfig wlan0wlan0 unassociated ESSID:off/any Nickname:"ipw2100" Mode:Managed Channel=0 Access Point: 00:00:00:00:00:00 Bit Rate=0 kb/s Tx-Power:off Retry:on RTS thr:off Fragment thr:off Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0使用“mode”参数,你可以更改无线网卡的工作模式APTITUDE:/home/gnawux# iwconfig wlan0 mode 1APTITUDE:/home/gnawux# iwconfig wlan0wlan0 unassociated ESSID:off/any Nickname:"ipw2100" Mode:Ad-Hoc Channel=0 Cell: 00:00:00:00:00:00 Bit Rate=0 kb/s Tx-Power:off Retry:on RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0这里,我们把网卡的工作模式改成了 Ad Hoc 模式(点对点)了。使用 essid 参数,还可以改动网络的名称:APTITUDE:/home/gnawux# iwconfig wlan0 essid gnawuxAPTITUDE:/home/gnawux# iwconfig wlan0wlan0 IEEE 802.11b ESSID:"gnawux" Nickname:"ipw2100" Mode:Ad-Hoc Frequency:2.412 GHz Cell: 02:0C:F1:0F:11:2A Bit Rate=0 kb/s Tx-Power:off Retry:on RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality=60/100 Signal level=-83 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0你可能注意到了,现在我们的很多状态参数都有了有意义的值,这是因为我们有了一个合法的 ESSID 了。对于其他参数,可以参考 iwconfig(8)。另一个常用工具是 iwlist,这个工具可以用来列出可用资源。使用 scanning 参数,可以看到所有的 AP:gnawux@APTITUDE:~$ /sbin/iwlist wlan0 scanningwlan0 Scan completed : Cell 01 - Address: 00:0D:BD:6F:B4:48 ESSID:"" Protocol:IEEE 802.11b Mode:Master Channel:6 Encryption key:on Bit Rate:11 Mb/s Extra: Rates (Mb/s): 1 2 5.5 11 Extra: Signal: -70 dBm Extra: Last beacon: 59ms ago Cell 02 - Address: 86:CF:C1:34:12:06 ESSID:"gnawux" Protocol:IEEE 802.11b Mode:Ad-Hoc Channel:11 Encryption key:off Bit Rate:11 Mb/s Extra: Rates (Mb/s): 1 2 5.5 11 Extra: Signal: -37 dBm Extra: Last beacon: 2ms ago而使用 frequency 参数,我们可以得到频率列表:gnawux@APTITUDE:~$ /sbin/iwlist wlan0 freqwlan0 14 channels in total; available frequencies : Channel 01 : 2.412 GHz Channel 02 : 2.417 GHz Channel 03 : 2.422 GHz Channel 04 : 2.427 GHz Channel 05 : 2.432 GHz Channel 06 : 2.437 GHz Channel 07 : 2.442 GHz Channel 08 : 2.447 GHz Channel 09 : 2.452 GHz Channel 10 : 2.457 GHz Channel 11 : 2.462 GHz Channel 12 : 2.467 GHz Channel 13 : 2.472 GHz Channel 14 : 2.484 GHz Current Channel=1你同样可以通过 iwlist(8) 得到更多信息。除了上面的两个,还有很多其他工具,包括 iwevent, iwgetid, iwpriv, iwspy, 用来获取网卡工作状态、对网卡进行管理。 四、备份文件用cp在不同的盘中复制往往会出问题,最好用tar打包a.tar cvf aa.tar aa ;(aa为目录)b.对复制进行验证无论使用 cp 还是 tar,您始终都应该验证复制过程是否成功完成。尽管 tar 对所复制的文件进行了证实(使用 v 选项),但是您应该确保在新的文件系统中正确地创建了这些文件。首先,检查 du 对旧的和新的系统的输出$ du -sk /usr3923068 /usr$ du -sk /mnt/usr.tmp3923068 /mnt/usr.tmp这两个数字应该是相等的,然而,根据新文件系统的类型以及旧文件系统/目录和新文件系统/目录中对应的文件和目录的分配大小的不同,您可能会发现它们在大小上有些细微的差异。另一种好的测试方法是,比较源和目标文件/目录的数目。您可以使用简单的 find command 来完成这项工作$ find /usr |wc -l347001$ find /mnt/usr.tmp |wc -l347001_________________________________________________________________
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -