LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2282|回复: 11

RT73无线网卡在开发板上的移植问题!

[复制链接]
发表于 2008-3-9 10:12:58 | 显示全部楼层 |阅读模式
驱动程序:RT73_Linux_STA_Drv1.0.4.0 (rt73)
内核交叉编译器:开发板自带的 armv4l-unknown-linux-gcc
make以后的结果如下:
/opt/host/armv4l/bin/armv4l-unknown-linux-gcc -D__KERNEL__ -I/HHARM2410-STUDY/kernel /include -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -DMODULE -DMODVERSIONS -include /HHARM2410-STUDY/kernel /include/linux/modversions.h -Wall -Wstrict-prototypes -Wno-trigraphs -c -o rtmp_main.o rtmp_main.c
armv4l-unknown-linux-gcc: cannot specify -o with -c or -S and multiple compilations
make: *** [rtmp_main.o] Error 1

makefile编写如下:

######################################################################
# Module Name: Makefile
# Abstract: Makefile for rt73 linux driver on kernel series 2.4
######################################################################

CC := /opt/host/armv4l/bin/armv4l-unknown-linux-gcc
LD := /opt/host/armv4l/bin/armv4l-unknown-linux-ld

LINUX_SRC = /HHARM9-EDU/kernel

#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
Makefile和站上那位老兄一样。错误也是那个,可是按照方法依然无发生成.o的可执行文件!急啊!
发表于 2008-3-10 08:58:22 | 显示全部楼层

我感觉你的Makefile应该没问题

我上周也移植了rt73的无线网卡,有1.0.3.6,1.0.4.0,1.1.0.0三个版本都可以。
Makefile修改跟你的的一样,修改了CC,LD,LINUX_SRC,CFLAGS四项。
我修改的Makefile如下:
######################################################################
#        Module Name: Makefile
#        Abstract: Makefile for rt73 linux driver on kernel series 2.4
######################################################################


#CC := cc
CC := /mpc8272/powerpc-gcc/bin/powerpc-linux-gcc
LD := /mpc8272/powerpc-gcc/bin/powerpc-linux-ld
LINUX_SRC := /mpc8272/kernel-2.4.26-free

#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 -mpreferred-stack-boundary=2 -DMODULE -DMODVERSIONS -include $(LINUX_SRC)/include/linux/modversions.h

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

---------------------------------------------------------------------------
我猜测会不会是你的交叉编译环境的问题?
回复 支持 反对

使用道具 举报

发表于 2008-3-10 23:50:36 | 显示全部楼层
你怎么没有-march选项呢?
我的改为了
-march=armv4

编译时的情况为
make[1]: Entering directory `/opt/kernelsource/linux-2.4.19-rmk7'
make -C  /opt/Wirelesscard/Module CFLAGS="-D__KERNEL__ -I/opt/kernelsource/linux-2.4.19-rmk7/include -Wall -Wstrict-prototypes -Wno-trigraphs -Os -fno-strict-aliasing -fno-common -Uarm -fno-common -pipe -mapcs-32 -D__LINUX_ARM_ARCH__=4 -march=armv4 -mtune=arm9tdmi -mshort-load-bytes -msoft-float -Uarm -DMODULE" MAKING_MODULES=1 modules

你把arm的编译选项放到这里就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-12 22:38:47 | 显示全部楼层
make
/opt/host/armv4l/bin/armv4l-unknown-linux-gcc -D__KERNEL__ -I/usr/src/linux-2.4.18-3/include -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mapcs-32 -march=armv4 -mtune=arm9tdmi -mshort-load-bytes -msoft-float -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.18-3/include/linux/modversions.h -Wall -Wstrict-prototypes -Wno-trigraphs   -c -o rtmp_main.o rtmp_main.c
cpp: /usr/src/linux-2.4.18-3/include/linux/modversions.h: ?????????

我也已经在-march上加了armv4了!可是加了之后又出现了上面的错误。
而且前面帖子的大虾貌似也没家-march。到底问题出在哪里?
回复 支持 反对

使用道具 举报

发表于 2008-3-13 08:46:06 | 显示全部楼层
建议你去换一个http://rt2x00.serialmonkey.com/wiki/index.php/Downloads 里面的
rt73(usb)驱动试试。
sailing_0325跟我说他用rt73-cvs驱动在arm平台移植成功过。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-13 22:40:39 | 显示全部楼层
我下了那个的驱动了!只是Makefile乱得很~没看明白!能贴出来看下吗?
回复 支持 反对

使用道具 举报

发表于 2008-3-14 12:05:56 | 显示全部楼层
我在我的ppc平台上也没有移植成功
但能交叉编译通过
我的Makefie:

###########################################################################
# RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.com      #
#                                                                         #
#   This program is free software; you can redistribute it and/or modify  #
#   it under the terms of the GNU General Public License as published by  #
#   the Free Software Foundation; either version 2 of the License, or     #
#   (at your option) any later version.                                   #
#                                                                         #
#   This program is distributed in the hope that it will be useful,       #
#   but WITHOUT ANY WARRANTY; without even the implied warranty of        #
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         #
#   GNU General Public License for more details.                          #
#                                                                         #
#   You should have received a copy of the GNU General Public License     #
#   along with this program; if not, write to the                         #
#   Free Software Foundation, Inc.,                                       #
#   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             #
#                                                                         #
#   Licensed under the GNU GPL                                            #
#   Original code supplied under license from RaLink Inc, 2004.           #
###########################################################################

###########################################################################
#      Module Name: Makefile
#
#      Abstract: Makefile for rt73 kernel module
#
#      Revision History:
#      Who             When             What
#      --------        -----------      -----------------------------
#      MarkW (rt2500)  21st Jan 06      Rewrite of Makefile
#      Amir S (rt2500) 2nd  Feb 06      Update for gmake compat
#      MarkW (rt2500)  3rd  Feb 06      Fixed permissions on directory
#      MichaIL(rt2500) 13th Feb 06      Module installation fixes
#      MarkW (rt2500)  13th Feb 06      Allow install dir override
#      OlivierC        14th May 07      Install firmware file
#      OlivierC        14th May 07      Check old config
###########################################################################



MODULE_NAME := rt73
IF_NAME :=     wlan*

FIRMWARES :=   rt73.bin
FIRM_DIR :=    /lib/firmware

OLD_IF_NAME := ra0
CONFIG_DIR :=  /etc/Wireless/RT73STA
CONFIG_FILE := rt73sta.dat

ifeq ($(PATCHLEVEL),)
PATCHLEVEL := $(shell uname -r | cut -d. -f2)
endif

$(MODULE_NAME)-objs :=  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 rt2x00debug.o

ifdef TOPDIR
obj-m += $(MODULE_NAME).o
endif

EXTRA_CFLAGS += -I$(src)
EXTRA_CFLAGS += -DAGGREGATION_SUPPORT -DWMM_SUPPORT
#EXTRA_CFLAGS += -DRALINK_ATE
#EXTRA_CFLAGS += -DSINGLE_ADHOC_LINKUP

#ifdef KERNDIR
# KERNEL_SOURCES := $(KERNDIR)
#else
# KERNEL_SOURCES := /lib/modules/$(shell uname -r)/build
#endif

#######################################
#xxf
KERNEL_SOURCES :=/mpc8272/kernel-2.4.26-free
CC := /mpc8272/powerpc-gcc/bin/powerpc-linux-gcc
LD := /mpc8272/powerpc-gcc/bin/powerpc-linux-ld

#####################################

ifdef MODDIR
MODULE_ROOT := $(MODDIR)
else
MODULE_ROOT := /lib/modules/$(shell uname -r)/extra
endif

ifdef KERNOUT
KERNEL_OUTPUT := KBUILD_OUTPUT=$(KERNOUT)
else
KERNEL_OUTPUT :=
endif

src ?= .
obj ?= .

ifeq ($(PATCHLEVEL), 4)
MODULE_OBJECT := $(MODULE_NAME).o
MODULE_CONF := /etc/modules.conf
else
MODULE_OBJECT := $(MODULE_NAME).ko
MODULE_CONF := /etc/modprobe.d/ralink
endif

all: module

ifeq ($(PATCHLEVEL), 4)
$(obj)/$(MODULE_NAME).o: $($(MODULE_NAME)-objs)
        $(LD) $(EXTRA_LDFLAGS) -r -o $@ $($(MODULE_NAME)-objs)
endif

KBUILD_PARAMS := -C $(KERNEL_SOURCES) SUBDIRS=$(CURDIR) $(KERNEL_OUTPUT)

MODULE_CHECK :=        if ! [ -f $(MODULE_OBJECT) ]; then \
                        echo "$(MODULE_OBJECT) failed to build!"; \
                        exit 1; \
                fi; \
                if [ `du -b $(MODULE_OBJECT) | sed -e 's/\t.*//g'` -gt 1000000 ]; then \
                        echo "!!! WARNING: Module file much too big (>1MB)"; \
                        echo "!!! Check your kernel settings or use 'strip'"; \
                fi; \
                echo "*** Module $(MODULE_OBJECT) built successfully"

module:
        @$(MAKE) $(KBUILD_PARAMS) 'EXTRA_CFLAGS=$(EXTRA_CFLAGS)' modules; \
        $(MODULE_CHECK)

arm:
        @$(MAKE) $(KBUILD_PARAMS) 'EXTRA_CFLAGS=$(EXTRA_CFLAGS) \
                                        -DRTMP_EMBEDDED' \
                                        modules; \
        $(MODULE_CHECK)

armdebug:
        @$(MAKE) $(KBUILD_PARAMS) 'EXTRA_CFLAGS=$(EXTRA_CFLAGS) \
                                        -DRTMP_EMBEDDED -DDBG' \
                                        modules; \
        $(MODULE_CHECK)

debug:
        @$(MAKE) $(KBUILD_PARAMS) 'EXTRA_CFLAGS=$(EXTRA_CFLAGS) \
                                        -DDBG' modules; \
        $(MODULE_CHECK)

debugfs:
        @$(MAKE) $(KBUILD_PARAMS) 'EXTRA_CFLAGS=$(EXTRA_CFLAGS) \
                                        -DDBG -DRT2X00DEBUGFS' modules; \
        $(MODULE_CHECK)

clean:
        @rm -f *.o .*.{cmd,flags}
        @rm -f $(MODULE_NAME).{o,ko,mod.{o,c}} built-in.o $(VERSION_HEADER) *~
        @rm -fr .tmp_versions Module.symvers

modules_install:
        @if ! [ -f $(MODULE_OBJECT) ]; then \
                echo "!!! $(MODULE_OBJECT) does not exist: run 'make'"; \
                exit 1; \
        fi
        @echo "*** Install module in $(MODULE_ROOT) ..."
ifeq ($(PATCHLEVEL),4)
        install -m 755 -o 0 -g 0 -d $(MODULE_ROOT)
        install -m 644 -o 0 -g 0 $(MODULE_OBJECT) $(MODULE_ROOT)
else
        @$(MAKE) $(KBUILD_PARAMS) modules_install
endif
        /sbin/depmod -a

install: modules_install
        @echo "*** Update $(MODULE_CONF) alias for $(IF_NAME)"; \
        if [ -d `dirname $(MODULE_CONF)` ]; then \
                if [ -s $(MODULE_CONF) ]; then \
                        if ! grep -q '$(IF_NAME)' $(MODULE_CONF) ; then \
                                echo "alias $(IF_NAME) $(MODULE_NAME)" >> $(MODULE_CONF) ; \
                        fi; \
                else \
                        echo "alias $(IF_NAME) $(MODULE_NAME)" >> $(MODULE_CONF) ; \
                fi; \
                if grep -q '$(OLD_IF_NAME)' $(MODULE_CONF) ; then \
                        echo "!!! -> $(OLD_IF_NAME) interface name is deprecated:" \
                                                "remove old $(MODULE_CONF) alias"; \
                fi; \
        else \
                echo "*** Config dir `dirname $(MODULE_CONF)` not found" >&2; \
        fi
        @echo "*** Install firmware in $(FIRM_DIR) ..."; \
        if ! [ -d $(FIRM_DIR) ]; then \
                mkdir $(FIRM_DIR); \
        fi; \
        cp -f $(FIRMWARES) $(FIRM_DIR)
        @echo "*** Check old config ..."; \
        if [ -d $(CONFIG_DIR) ]; then \
                echo "!!!"; \
                echo "!!! WARNING: DEPRECATED CONFIG FOUND !"; \
                echo "!!!"; \
                echo "!!! -> Update your config and remove $(CONFIG_DIR)"; \
                if [ -f $(CONFIG_DIR)/$(CONFIG_FILE) ]; then \
                        echo "!!! -> $(CONFIG_FILE) file is deprecated:" \
                                        "use iwconfig/iwpriv instead"; \
                fi; \
                if [ -f $(CONFIG_DIR)/$(FIRMWARES) ]; then \
                        echo "!!! -> $(FIRMWARES) firmware has moved to $(FIRM_DIR)"; \
                fi; \
        fi

ifeq ($(PATCHLEVEL), 4)
include $(KERNEL_SOURCES)/Rules.make
endif
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-30 09:58:23 | 显示全部楼层
在无线网卡移植的过程中,源代码应该放在什么位置?是开发板的目录下还是LINUX的根目录下?
回复 支持 反对

使用道具 举报

发表于 2008-4-8 14:14:22 | 显示全部楼层
我和楼主用的都是华恒的板子,都是移植问题,rt73-cvs驱动需要firmware.h头文件,在linux2.4.18里根本没有,无法通过补丁升级的,所以很难作啊,我在这里问过好多次了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-13 11:54:17 | 显示全部楼层
我按你的方法看了下里面带有“\”确实是没有用的,但是还是没编译通过!也修改了rtmp.h中的那个结构体,编译还是没能通过。
错误代码是
cpputput pipe has been closed
而且貌似还有很多错误,不知道是不是和这个错误有一定的关系。
急啊~我的毕业设计啊!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表