开发板内核:
linux2.4.18-rmk7-pxa1
无线网卡驱动:
RT73_Linux_STA_Drv1.0.4.0.tar.gz
开发板:
SBC2410(s3c2410)
宿主平台:
RedHat 9 (linux-2.4.20-8)
交叉编译器:
2.95.3
以下过程安步骤说明:
2.
将
RT73_Linux_STA_Drv1.0.4.0.tar.gz
下载到
LINUX
的
/opt/redhat9/wifi
目录下
;
3.
在终端中运行
cd /opt/redhat9/wifi;
4.
#tar -xvzf RT73_Linux_STA_Drv1.0.4.0.tar.gz
5.
#cd ./RT73_Linux_STA_Drv1.0.4.0/Module
6.
#cp Makefile.4 ./Makefile
(如果是
2.6
的内核就
$cp Makefile.6 ./Makefile
)
7.
将
Module
目录拷贝到开发板内核所在目录,并更名为
rt73
#cp –r Module /home/kernel/2.4.18/drivers/usb/rt73
8.
修改
config.mk
和
Makefile
--config.mk—
LINUX_SRC=/usr/src/linux-2.4.18-3
改为
LINUX_SRC=/home/kernel/2.4.18
TARGET_MODDIR=/lib/modules/2.4.18-3
改为
TARGET_MODDIR=/home/kernel/2.4.18
Makefile
修改后的内容如下:
######################################################################
# Module Name: Makefile
# Abstract: Makefile for rt73 linux driver on kernel series 2.4
######################################################################
CC := arm-linux-gcc
CXX := arm-linux-g++
LD := arm-linux-ld
include ./config.mk
WFLAGS := -Wall -Wstrict-prototypes -Wno-trigraphs
CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/include -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -DMODULE -DMODVERSIONS -include $(LINUX_SRC)/include/linux/modversions.h
## Comment/uncomment the following line to enable/disable debugging
#CFLAGS += -DDBG
CFLAGS += $(WFLAGS)
OBJ = rt73.o
rt73.o: rtmp_main.o mlme.o connect.o rtusb_bulk.o rtusb_io.o sync.o assoc.o auth.o auth_rsp.o rtusb_data.o rtmp_init.o sanity.o rtmp_wep.o rtmp_info.o rtmp_tkip.o wpa.o md5.o
$(LD) -r $^ -o $@
## NDDIR/ifcfg-rausb0
ND_CONF=/etc/sysconfig/network-scripts/ifcfg-rausb0
ifdef NDDIR
NDDIR := $(NDDIR)
else
NDDIR := /etc/sysconfig/network-scripts
endif
ifdef MOD_CONF
MOD_CONF := $(MOD_CONF)
else
MOD_CONF := /etc/modules.conf
endif
ifdef MODDIR
MOD_ROOT := $(MODDIR)
else
MOD_ROOT := /lib/modules/$(shell uname -r)/extra
endif
all: $(OBJ)
@touch config.mk
clean:
rm -rf *.o *~ core .*.cmd *.ko *.mod.c .tmp_versions built-in.o
install:
@touch config.mk
install -m 755 -o 0 -g 0 -d $(MOD_ROOT)
install -m 644 -o 0 -g 0 $(OBJ) $(MOD_ROOT)
@echo "Network device directory $(NDDIR)";
@echo "Module configuration file $(MOD_CONF)";
@if [ -d "$(NDDIR)" ] ; then /
if [ ! -f "$(ND_CONF)" ]; then /
echo "Create 'ifcfg-rausb0' in $(NDDIR)/"; /
cp ifcfg-rausb0 $(NDDIR)/ ; /
fi; /
fi
@if ! grep -q 'rausb0' $(MOD_CONF) ; then /
echo "append 'alias rausb0 rt73' to $(MOD_CONF)"; /
echo "alias rausb0 rt73" >> $(MOD_CONF) ; /
fi
/sbin/depmod -a
config:
@touch config.mk
@./Configure
9
.由于
2.95.3
比较弱智,不能识别代码中的换行符
”/”
,所以还需要格式转换一下
,
否则会报一堆错误。
# cd /home/kernel/2.4.18/drivers/usb/rt73
# dos2unix *.c *.c
# dos2unix *.h *.h
10
.
修改内核配置文件
Config.in
和
Makefile
# cp /home/kernel/2.4.18/drivers/usb
在
Config.in
文件的
comment ‘USB Network adaptors’
项的最下面加上
……
dep_tristate ‘ Support rt73 wireless usb network device’ CONFIG_USB_RT73 $CONFIG_USB $CONFIG_NET $CONFIG_USB_USBNET $CONFIG_EXPERIMENTAL
fi
在
Makefile
文件的中修改如下:
11.
然后开始配置内核编译文件
# cd /home/kernel/2.4.18
# make menuconfig
先加载原来已经定义好的配置文件
然后到相关的目录下设置
rt73
以上两项都需要选上。
先把设置保存到原来的配置文件中
退出的时候再保存到
.Config
文件中
12.
现在开始编译内核
# make clean
# make bzImage
13.
如果不出意外将会出现以下问题
这个问题的根源是由于在
2.4.18
的内核文件
/include/linux/netdevice.h
文件中没有定义
wireless_handlers
和
weight
。
在网上发现有些人采用如下的办法解决:
1)
直接将
rtmp_main.c
文件中的这两项注释掉。结果是编译通过了,也生成了
rt73.o
,但是下到板子上却不能正常工作。
2)
将内核
2.4.20
-8
的
netdevice.h,wireless.h,
和
iwhandler.h
文件覆盖掉
2.4.18
的内核文件。结果是内核文件都产生不了,而且
rt73.o
同样不能在开发板上工作,原因是内核结构和开发板的不一致了。
后来我又详细阅读了
rt73
驱动里带的
README
文件,发现这个驱动必须在
RedHat( kernel 2.4.18-3)
以上的版本上运行。难道
linux2.4.18-rmk7-pxal
的版本比
2.4.18-3
还低吗?后来我又去下载
diff-2.4.18-rmk7-pxa2.gz
和
diff-2.4.18-rmk7-pxa3.gz
文件,希望在其中能找到关于
wireless
的补丁,但是没有找到,也就是说即使内核升级成了
linux2.4.18-rmk7-pxa3
也不能够解决这个问题。所以得出结论,
RT73_Linux_STA_Drv1.0.4.0.tar.gz
驱动在内核为
2.4.18
的开发板上是不可能运行起来的,除非有针对
wireless
的补丁出现。同样
ZD1211
的驱动也是不行的。最好的办法是将开发板的内核升级到
2.6
。