QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2251|回复: 8

无线网卡驱动移植的交叉编译问题!

[复制链接]
发表于 2006-7-27 16:09:14 | 显示全部楼层 |阅读模式
我的无线网卡为asus wl-167g 驱动是官方网站下的,已在PC机的linux系统上能正常工作.系统是VMware 虚拟机上的redhat 9.0, 内核为2.4.20-8.
现在想把它交叉编译,使它能在ARM板上使用.安装了arm-linux-gcc -3.2.3 环境.我修改了Makefile,把编译器修改成了arm-linux-gcc,
make时出现问题

[root@localhost RT25USB-SRC-V2.0.7.0]# ls
assoc.c                   rt2570sw.h      rtusb_info.c
auth.c                    rt_config.h     rtusb_init.c
auth_rsp.c               md5.c        rtmp_ckipmic.h  rtusb_io.c
config.mk                md5.h        rtmp_def.h      rtusb_main.c
config.new               mlme.c       rtmp_tkip.c     sanity.c
Configure                mlme.h       rtmp_type.h     sha1.h
connect.c                oid.h        rtmp_wep.c      Stdincl.h
iwpriv_usage.txt         readme       rtusb_bulk.c    sync.c
LINUX_RACONFIG_V2.0.0.7  ReleaseNote  rtusb_data.c    wpa.c
Makefile                 rt2570.h     rtusb.h         wpa.h
[root@localhost RT25USB-SRC-V2.0.7.0]# make
arm-linux-gcc -DRT2500_DBG -D__KERNEL__ -I/usr/src/linux-2.4.20-8/include -O2 -f
omit-frame-pointer -fno-strict-aliasing -fno-common -pipe -DMODULE -DMODVERSIONS
-include /usr/src/linux-2.4.20-8/include/linux/modversions.h -Wall -Wstrict-pro
totypes -Wno-trigraphs   -c -o rtusb_main.o rtusb_main.c
rtusb_main.c: In function `CMDHandler':
rtusb_main.c:1072: warning: unused variable `i'
rtusb_main.c:1073: warning: unused variable `pkey'
/usr/src/linux-2.4.20-8/include/asm/semaphore.h:201: inconsistent operand constr
aints in an `asm'
/usr/src/linux-2.4.20-8/include/asm/semaphore.h:201: inconsistent operand constr
aints in an `asm'
/usr/src/linux-2.4.20-8/include/asm/semaphore.h:201: inconsistent operand constr
aints in an `asm'
/usr/src/linux-2.4.20-8/include/asm/semaphore.h:201: inconsistent operand constr
aints in an `asm'
/usr/src/linux-2.4.20-8/include/asm/processor.h: In function `cpuid_eax':
/usr/src/linux-2.4.20-8/include/asm/processor.h:151: unknown register name `dx'
in `asm'
/usr/src/linux-2.4.20-8/include/asm/processor.h:151: unknown register name `cx'
in `asm'
/usr/src/linux-2.4.20-8/include/asm/processor.h:151: unknown register name `bx'
in `asm'
/usr/src/linux-2.4.20-8/include/asm/processor.h: In function `cpuid_ebx':
/usr/src/linux-2.4.20-8/include/asm/processor.h:161: unknown register name `dx'
in `asm'
/usr/src/linux-2.4.20-8/include/asm/processor.h:161: unknown register name `cx'
in `asm'
/usr/src/linux-2.4.20-8/include/asm/processor.h: In function `cpuid_ecx':
/usr/src/linux-2.4.20-8/include/asm/processor.h:171: unknown register name `dx'
in `asm'
/usr/src/linux-2.4.20-8/include/asm/processor.h:171: unknown register name `bx'
in `asm'
/usr/src/linux-2.4.20-8/include/asm/processor.h: In function `cpuid_edx':
/usr/src/linux-2.4.20-8/include/asm/processor.h:181: unknown register name `cx'
in `asm'
/usr/src/linux-2.4.20-8/include/asm/processor.h:181: unknown register name `bx'
in `asm'
/usr/src/linux-2.4.20-8/include/asm/processor.h: In function `set_in_cr4':
/usr/src/linux-2.4.20-8/include/asm/processor.h:217: unknown register name `ax'
in `asm'
/usr/src/linux-2.4.20-8/include/asm/processor.h: In function `clear_in_cr4':
/usr/src/linux-2.4.20-8/include/asm/processor.h:227: unknown register name `ax'
in `asm'
/usr/src/linux-2.4.20-8/include/asm/system.h: In function `__set_64bit':
/usr/src/linux-2.4.20-8/include/asm/system.h:163: unknown register name `dx' in
`asm'
/usr/src/linux-2.4.20-8/include/asm/system.h:163: unknown register name `ax' in
`asm'
/usr/src/linux-2.4.20-8/include/asm/system.h: In function `__set_64bit_constant'
:
/usr/src/linux-2.4.20-8/include/asm/system.h:163: unknown register name `dx' in
`asm'
/usr/src/linux-2.4.20-8/include/asm/system.h:163: unknown register name `ax' in
`asm'
/usr/src/linux-2.4.20-8/include/asm/system.h: In function `__set_64bit_var':
/usr/src/linux-2.4.20-8/include/asm/system.h:163: unknown register name `dx' in
`asm'
/usr/src/linux-2.4.20-8/include/asm/system.h:163: unknown register name `ax' in
`asm'
/usr/src/linux-2.4.20-8/include/asm/rwsem.h: In function `__up_write_R70ec8bc6':
/usr/src/linux-2.4.20-8/include/asm/rwsem.h:216: unknown register name `edx' in
`asm'
/usr/src/linux-2.4.20-8/include/asm/rwsem.h: In function `up_write':
/usr/src/linux-2.4.20-8/include/asm/rwsem.h:216: unknown register name `edx' in
`asm'
{standard input}: Assembler messages:
{standard input}:382: Error: bad instruction `pushfl'
{standard input}:382: Error: bad instruction `popl [r3,#0]'
{standard input}:383: Error: bad instruction `cli'
{standard input}:395: Error: bad instruction `pushl [r3,#0]'
{standard input}:395: Error: bad instruction `popfl'
make: *** [rtusb_main.o] Error 1
[root@localhost RT25USB-SRC-V2.0.7.0]#

好象是汇编的错误,问题可能在那里啊?请高手指点!

Makefile  内容如下:
# Comment/uncomment the following line to enable/disable debugging
                                                                                                               
CC := arm-linux-gcc
                                                                                                               
include ./config.mk
                                                                                                               
WFLAGS := -Wall -Wstrict-prototypes -Wno-trigraphs
CFLAGS := -DRT2500_DBG -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 $(WFLAGS)
                                                                                                               
OBJ = rt2570.o
                                                                                                               
all: $(OBJ)
        @touch config.mk
                                                                                                               
rt2570.o: rtusb_main.o mlme.o connect.o rtusb_bulk.o rtusb_io.o sync.o assoc.o auth.o auth_rsp.o rtusb_data.o rtusb_init.o sanity.o rtmp_wep.o rtusb_info.o rtmp_tkip.o wpa.o md5.o
        $(LD) -r $^ -o $@
                                                                                                               
clean:
        rm -f *.o *~ core
                                                                                                               
install:
        @touch config.mk
        #mkdir -p $(TARGET_MODDIR)
        echo $(TARGET_MODDIR)
        install $(OBJ) $(TARGET_MODDIR)
                                                                                                               
config:
        @touch config.mk
        @./Configure
发表于 2006-7-27 21:16:33 | 显示全部楼层
里面有 x86 特有的 ASM 汇编代码,你需要修改它为 arm 的…………………
回复

使用道具 举报

 楼主| 发表于 2006-7-28 08:07:02 | 显示全部楼层
是改驱动程序吗, 还是上面错误提醒的semaphore.h\processor.h等头文件?
小弟是新手,不知道如何下手啊!
jiangtao9999老大,麻烦指点一下!!!!
回复

使用道具 举报

 楼主| 发表于 2006-7-28 09:19:08 | 显示全部楼层
:neutral: 有一种方法,将ARM内核解一份,装到PC机上,然后在PC机的这个ARM内核里
交叉编译,可行吗?  具体操作偶也不是很清楚呵
回复

使用道具 举报

 楼主| 发表于 2006-7-28 10:56:38 | 显示全部楼层
jiangtao9999老大,你意思是将指向asm-i386的asm改为指向arm 对不?
下面是一些内核信息,帮忙看看,具体要如何修改啊!

[root@localhost src]# ls
debug  linux-2.4  linux-2.4.20-8  redhat
[root@localhost src]# cd linux-2.4
[root@localhost linux-2.4]# ls
arch             Documentation  kernel       README
configs          drivers        lib          REPORTING-BUGS
COPYING          fs             MAINTAINERS  Rules.make
COPYING.modules  include        Makefile     scripts
CREDITS          init           mm           tmp_include_depends
crypto           ipc            net
[root@localhost linux-2.4]# cd arch/
[root@localhost arch]# ls
alpha  cris  ia64  mips    parisc  ppc64  s390x  sparc    x86_64
arm    i386  m68k  mips64  ppc     s390   sh     sparc64
[root@localhost arch]# cd ..
[root@localhost linux-2.4]# ls
arch             Documentation  kernel       README
configs          drivers        lib          REPORTING-BUGS
COPYING          fs             MAINTAINERS  Rules.make
COPYING.modules  include        Makefile     scripts
CREDITS          init           mm           tmp_include_depends
crypto           ipc            net
[root@localhost linux-2.4]# cd include/
[root@localhost include]# ls
asm        asm-generic  asm-mips    asm-ppc64  asm-sparc    math-emu  scsi
asm-alpha  asm-i386     asm-mips64  asm-s390   asm-sparc64  net       video
asm-arm    asm-ia64     asm-parisc  asm-s390x  asm-x86_64   pcmcia
asm-cris   asm-m68k     asm-ppc     asm-sh     linux        rxrpc
[root@localhost include]# ll
总用量 108
lrwxrwxrwx    1 root     root            8  7月 27 16:49 asm -> asm-i386
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-alpha
drwxr-xr-x   21 root     root         4096  7月 10 23:23 asm-arm
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-cris
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-generic
drwxr-xr-x    2 root     root         4096  7月 28 09:04 asm-i386
drwxr-xr-x    3 root     root         4096  7月 10 23:23 asm-ia64
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-m68k
drwxr-xr-x   18 root     root         4096  7月 10 23:23 asm-mips
drwxr-xr-x   11 root     root         4096  7月 10 23:23 asm-mips64
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-parisc
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-ppc
drwxr-xr-x    3 root     root         4096  7月 10 23:23 asm-ppc64
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-s390
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-s390x
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-sh
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-sparc
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-sparc64
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-x86_64
drwxr-xr-x   14 root     root        12288  7月 10 23:23 linux
drwxr-xr-x    2 root     root         4096  7月 10 23:23 math-emu
drwxr-xr-x    4 root     root         4096  7月 10 23:23 net
drwxr-xr-x    2 root     root         4096  7月 10 23:23 pcmcia
drwxr-xr-x    2 root     root         4096  7月 10 23:23 rxrpc
drwxr-xr-x    2 root     root         4096  7月 10 23:23 scsi
drwxr-xr-x    2 root     root         4096  7月 10 23:23 video
[root@localhost include]#
回复

使用道具 举报

 楼主| 发表于 2006-7-28 15:45:58 | 显示全部楼层
jiangtao9999老大,我将指向asm-i386的asm改为指向arm,
        #rm -rf asm
        #ln -s -d asm-arm asm

结果如下:
[root@localhost include]# ll
总用量 108
lrwxrwxrwx    1 root     root            7  7月 28 14:48 asm -> asm-arm
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-alpha
drwxr-xr-x   21 root     root         4096  7月 28 14:47 asm-arm
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-cris
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-generic
drwxr-xr-x    2 root     root         4096  7月 28 14:46 asm-i386
drwxr-xr-x    3 root     root         4096  7月 10 23:23 asm-ia64
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-m68k
drwxr-xr-x   18 root     root         4096  7月 10 23:23 asm-mips
drwxr-xr-x   11 root     root         4096  7月 10 23:23 asm-mips64
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-parisc
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-ppc
drwxr-xr-x    3 root     root         4096  7月 10 23:23 asm-ppc64
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-s390
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-s390x
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-sh
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-sparc
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-sparc64
drwxr-xr-x    2 root     root         4096  7月 10 23:23 asm-x86_64
drwxr-xr-x   14 root     root        12288  7月 10 23:23 linux
drwxr-xr-x    2 root     root         4096  7月 10 23:23 math-emu
drwxr-xr-x    4 root     root         4096  7月 10 23:23 net
drwxr-xr-x    2 root     root         4096  7月 10 23:23 pcmcia
drwxr-xr-x    2 root     root         4096  7月 10 23:23 rxrpc
drwxr-xr-x    2 root     root         4096  7月 10 23:23 scsi
drwxr-xr-x    2 root     root         4096  7月 10 23:23 video
[root@localhost include]#

对网卡驱动程序make之后,又出现如下错误了

[root@localhost RT25USB-SRC-V2.0.7.0]# ls
assoc.c                     rt2570sw.h      rtusb_info.c
auth.c                      rt_config.h     rtusb_init.c
auth_rsp.c               md5.c        rtmp_ckipmic.h  rtusb_io.c
config.mk                md5.h        rtmp_def.h      rtusb_main.c
config.new               mlme.c       rtmp_tkip.c     sanity.c
Configure                mlme.h       rtmp_type.h     sha1.h
connect.c                oid.h        rtmp_wep.c      Stdincl.h
iwpriv_usage.txt         readme       rtusb_bulk.c    sync.c
LINUX_RACONFIG_V2.0.0.7  ReleaseNote  rtusb_data.c    wpa.c
Makefile                 rt2570.h     rtusb.h         wpa.h
[root@localhost RT25USB-SRC-V2.0.7.0]# make
arm-linux-gcc -DRT2500_DBG -D__KERNEL__ -I/usr/src/linux-2.4.20-8/include -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.20-8/include/linux/modversions.h -Wall -Wstrict-prototypes -Wno-trigraphs   -c -o rtusb_main.o rtusb_main.c
In file included from /usr/src/linux-2.4.20-8/include/linux/prefetch.h:13,
                 from /usr/src/linux-2.4.20-8/include/linux/list.h:6,
                 from /usr/src/linux-2.4.20-8/include/linux/module.h:12,
                 from rt_config.h:60,
                 from rtusb_main.c:38:
/usr/src/linux-2.4.20-8/include/asm/processor.h:39:1: warning: "EISA_bus" redefined
In file included from /usr/src/linux-2.4.20-8/include/linux/modversions.h:900,
                 from <command line>:1:
/usr/src/linux-2.4.20-8/include/linux/modules/i386_ksyms.ver:92:1: warning: this is the location of the previous definition
In file included from /usr/src/linux-2.4.20-8/include/linux/prefetch.h:13,
                 from /usr/src/linux-2.4.20-8/include/linux/list.h:6,
                 from /usr/src/linux-2.4.20-8/include/linux/module.h:12,
                 from rt_config.h:60,
                 from rtusb_main.c:38:
/usr/src/linux-2.4.20-8/include/asm/processor.h:40:1: warning: "MCA_bus" redefined
In file included from /usr/src/linux-2.4.20-8/include/linux/modversions.h:900,
                 from <command line>:1:
/usr/src/linux-2.4.20-8/include/linux/modules/i386_ksyms.ver:226:1: warning: this is the location of the previous definition
In file included from /usr/src/linux-2.4.20-8/include/asm/pci.h:19,
                 from /usr/src/linux-2.4.20-8/include/linux/pci.h:657,
                 from rt_config.h:68,
                 from rtusb_main.c:38:
/usr/src/linux-2.4.20-8/include/asm/io.h:147:1: warning: "iounmap" redefined
In file included from /usr/src/linux-2.4.20-8/include/linux/modversions.h:900,
                 from <command line>:1:
/usr/src/linux-2.4.20-8/include/linux/modules/i386_ksyms.ver:159:1: warning: this is the location of the previous definition
In file included from /usr/src/linux-2.4.20-8/include/asm/semaphore.h:10,
                 from /usr/src/linux-2.4.20-8/include/linux/fs.h:200,
                 from /usr/src/linux-2.4.20-8/include/linux/capability.h:17,
                 from /usr/src/linux-2.4.20-8/include/linux/binfmts.h:4,
                 from /usr/src/linux-2.4.20-8/include/linux/sched.h:10,
                 from /usr/src/linux-2.4.20-8/include/linux/skbuff.h:19,
                 from /usr/src/linux-2.4.20-8/include/linux/netdevice.h:147,
                 from rt_config.h:69,
                 from rtusb_main.c:38:
/usr/src/linux-2.4.20-8/include/linux/rwsem.h:29:65: asm/rwsem.h: 没有那个文件或目录
In file included from /usr/src/linux-2.4.20-8/include/asm/semaphore.h:10,
                 from /usr/src/linux-2.4.20-8/include/linux/fs.h:200,
                 from /usr/src/linux-2.4.20-8/include/linux/capability.h:17,
                 from /usr/src/linux-2.4.20-8/include/linux/binfmts.h:4,
                 from /usr/src/linux-2.4.20-8/include/linux/sched.h:10,
                 from /usr/src/linux-2.4.20-8/include/linux/skbuff.h:19,
                 from /usr/src/linux-2.4.20-8/include/linux/netdevice.h:147,
                 from rt_config.h:69,
                 from rtusb_main.c:38:
/usr/src/linux-2.4.20-8/include/linux/rwsem.h: In function `down_read':
/usr/src/linux-2.4.20-8/include/linux/rwsem.h:46: warning: implicit declaration
of function `__down_read_R6ebd46a5'
/usr/src/linux-2.4.20-8/include/linux/rwsem.h: In function `down_read_trylock':
/usr/src/linux-2.4.20-8/include/linux/rwsem.h:57: warning: implicit declaration
of function `__down_read_trylock_Ra1529dcc'
/usr/src/linux-2.4.20-8/include/linux/rwsem.h: In function `down_write':
/usr/src/linux-2.4.20-8/include/linux/rwsem.h:68: warning: implicit declaration
of function `__down_write_R7fd54c5c'
/usr/src/linux-2.4.20-8/include/linux/rwsem.h: In function `down_write_trylock':/usr/src/linux-2.4.20-8/include/linux/rwsem.h:79: warning: implicit declaration
of function `__down_write_trylock_R99c5de2a'
/usr/src/linux-2.4.20-8/include/linux/rwsem.h: In function `up_read':
/usr/src/linux-2.4.20-8/include/linux/rwsem.h:90: warning: implicit declaration
of function `__up_read_R5783e8ec'
/usr/src/linux-2.4.20-8/include/linux/rwsem.h: In function `up_write':
/usr/src/linux-2.4.20-8/include/linux/rwsem.h:100: warning: implicit declaration of function `__up_write_R70ec8bc6'
In file included from /usr/src/linux-2.4.20-8/include/linux/fs.h:298,
                 from /usr/src/linux-2.4.20-8/include/linux/capability.h:17,
                 from /usr/src/linux-2.4.20-8/include/linux/binfmts.h:4,
                 from /usr/src/linux-2.4.20-8/include/linux/sched.h:10,
                 from /usr/src/linux-2.4.20-8/include/linux/skbuff.h:19,
                 from /usr/src/linux-2.4.20-8/include/linux/netdevice.h:147,
                 from rt_config.h:69,
                 from rtusb_main.c:38:
/usr/src/linux-2.4.20-8/include/linux/ext3_fs_i.h: At top level:
/usr/src/linux-2.4.20-8/include/linux/ext3_fs_i.h:75: field `truncate_sem' has incomplete type
In file included from /usr/src/linux-2.4.20-8/include/linux/capability.h:17,
                 from /usr/src/linux-2.4.20-8/include/linux/binfmts.h:4,
                 from /usr/src/linux-2.4.20-8/include/linux/sched.h:10,
                 from /usr/src/linux-2.4.20-8/include/linux/skbuff.h:19,
                 from /usr/src/linux-2.4.20-8/include/linux/netdevice.h:147,
                 from rt_config.h:69,
                 from rtusb_main.c:38:
/usr/src/linux-2.4.20-8/include/linux/fs.h:757: field `s_umount' has incomplete
type
/usr/src/linux-2.4.20-8/include/linux/fs.h:1054: confused by earlier errors, bailing out
make: *** [rtusb_main.o] Error 1
[root@localhost RT25USB-SRC-V2.0.7.0]#

jiangtao9999老大,帮忙看看哪里出错的啊!!
回复

使用道具 举报

发表于 2006-7-28 21:10:51 | 显示全部楼层
    
我不会 ASM ,准确的说,我根本就没又怎么学过计算机。
我是学金融的……………会计………………

我只是告诉你我的想法………………

你只能修改你的代码里的 asm 语句,改为 arm 用的。
不然就算你能编译出来,也只能在 i386 系列上运行的。

而且牵扯到硬件级的读写………………

C 语言可以跨平台,但 asm 肯定没戏。
我觉得主要是寄存器代号不同。
导致了编译器不能识别你的代码。
回复

使用道具 举报

 楼主| 发表于 2006-7-29 08:47:01 | 显示全部楼层
呵呵,我也不是计算机的,改代码肯定挂,准备升级一下版本试试呵
回复

使用道具 举报

发表于 2006-8-1 15:14:42 | 显示全部楼层
楼主,你好,我现在也正在调试这个驱动,不过我用的内核是2.6的,所以Makefile的写法也是不一样的,能交流下吗?
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-2 12:37 , Processed in 0.042844 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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