LinuxSir.cn,穿越时空的Linuxsir!

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

求助:s3c2410,ASUS WL167G 无线网卡,交叉编译,make出错,得不到rt73.o

[复制链接]
发表于 2007-8-27 21:07:16 | 显示全部楼层 |阅读模式
s3c2410: kernel 2.4.18
PC: redhat linux 9.0
无线网卡:ASUS WL167G
驱动程序:RT73_Linux_STA_Drv1.0.4.0 (rt73)
内核交叉编译器:开发板自带的 armv4l-unknown-linux-gcc
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 = /HHARM2410-STUDY/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

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


请问各位大侠这是什么原因啊?如何解决?谢谢!
 楼主| 发表于 2007-8-27 21:10:46 | 显示全部楼层

求助:S3C2410,ASUS WL167G 无线网卡,换了编译器,还是交叉编译出错

s3c2410: kernel 2.4.18
PC: redhat linux 9.0
无线网卡:ASUS WL167G
驱动程序:RT73_Linux_STA_Drv1.0.4.0 (rt73)
内核交叉编译器:换成了arm-linux-gcc (2.95.3)
makefile如下:
######################################################################
# Module Name: Makefile
# Abstract: Makefile for rt73 linux driver on kernel series 2.4
######################################################################

CC := /usr/local/arm/2.95.3/bin/arm-linux-gcc
LD := /usr/local/arm/2.95.3/bin/arm-linux-ld

LINUX_SRC = /HHARM2410-STUDY/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

make之后结果如下:
/usr/local/arm/2.95.3/bin/arm-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
arm-linux-gcc: cannot specify -o with -c or -S and multiple compilations
make: *** [rtmp_main.o] Error 1

好郁闷~~~
请问各位大侠这是什么原因,如何解决?谢谢!
回复 支持 反对

使用道具 举报

发表于 2007-8-29 09:24:32 | 显示全部楼层
我觉得是你的Makefile写的有问题.
在出错的信息中, 明确说明了, -c 与 -o的选项是不可以合在一起用的.

所以你需要把Makefile的文件改一下.
主要是

  1. 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
  2. $(LD) -r $^ [color="Red"]-o[/color] $@
复制代码


你改成这样试试

  1. 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
  2. $(LD) -r $^  $@
复制代码


就是把-o的选项去掉.

Good luck.
回复 支持 反对

使用道具 举报

发表于 2007-9-17 10:47:28 | 显示全部楼层
同问,
我主机是redhat 9.0 kernel 2.4.20
目标板 s3c2410 kernel 2.4.18-rmk7
交叉编译器 2.95.3       3.3.2        3.4.1都有
我去下载了rt73-cvs的包
然后编译
现在的问题是
用arm-linux-gcc-3.4.1 能编译生成rt73.o
但是我的vmlinuz是用2.95.3编译生成的,insmod rt73.o 后提示编译的版本不对
我先用3.4.1交叉编译2.4.18内核,但是make dep 成功后 make zImage错误
没办法 用2.95.3能编译内核,但是不能编译rt73.o模块

请问大家该怎么办呢?
回复 支持 反对

使用道具 举报

发表于 2008-1-3 11:03:48 | 显示全部楼层
2.95.3能编译,不过要把所有文件中的"\"都去掉,还有一个结构体要修改,我就这么作的,不过虽然编译过去了,但是插上无线网卡不能用,一用ifconfig rausb0 up就kernel panic了.......
回复 支持 反对

使用道具 举报

发表于 2008-1-4 09:17:08 | 显示全部楼层
Post by qld001a;1802611
2.95.3能编译,不过要把所有文件中的"\"都去掉,还有一个结构体要修改,我就这么作的,不过虽然编译过去了,但是插上无线网卡不能用,一用ifconfig rausb0 up就kernel panic了.......


能说说修改哪里吗?
回复 支持 反对

使用道具 举报

发表于 2008-1-7 09:55:44 | 显示全部楼层
把rtmp.h中的
typedef struct __TX_BUFFER{
        TXD_STRUC                TxDesc;
        union         {
                UCHAR                        WirelessPacket[2342];
                HEADER_802_11        NullFrame;
                PSPOLL_FRAME        PsPollPacket;
                RTS_FRAME                RTSFrame;
        } ;
} TX_BUFFER, *PTX_BUFFER;
改为:
typedef struct __TX_BUFFER{
        TXD_STRUC                TxDesc;
        HEADER_802_11        NullFrame;
        PSPOLL_FRAME        PsPollPacket;
        RTS_FRAME                RTSFrame;
        UCHAR                        WirelessPacket[2342];
} TX_BUFFER, *PTX_BUFFER;
就是去掉中间的union,否则找不到WirelessPacket成员
回复 支持 反对

使用道具 举报

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

本版积分规则

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