免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1282 | 回复: 0
打印 上一主题 下一主题

编译armlinux驱动时不要用错了linux 内核版本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-04 22:16 |只看该作者 |倒序浏览
问题描述:
--我在交叉编译arm板的demo驱动程序的时候,出现的问题和下面的很像。结果根据本文最后一行的提示,发现是用错了linux 内核版本:arm板上用的是arm-linux-2410,我的demo驱动是板子自带的。后来用了redhat9的kernel文件来编译,不通过。老是报找不到文件。
    其实主要是有两种解决办法:1.直接用arm-linux-2410内核,原驱动就是在此基础上建的,include 的好多,就是由指向纯净内核的asm-arm的asm链接和指向asm-arm/proc/的proc链接组成的。一个redhat9的内核是不是这样被改装成arm-linux的内核?(其实linux纯净内核本身是包含了一些arm的代码的)。
我的无线网卡为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
*********************网友提示:
dx, cx,edx 这些都是X86(pc)上的寄存器,你include/asm链接的目录是错误的,你连接的是X86的头文件目录,在ARM平台应该链接ARM平台目录,你应该使用交叉编译ARM的LINUX内核目录树,而不是X86的


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/61322/showart_1164855.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP