求助:关于嵌入式linux下编译网卡驱动程序?

时间:2022-07-12 18:52:44
    我拿到一个网卡的驱动,该网卡型号为AX88180,它的linux驱动压缩包里有一个.h和.c文件和一个makefile文件。该文件可从
http://www.asix.com.tw/download.php?sub=searchresult下载到

    我先在linux上装了个交叉编译环境,用cross-3.3.2.tar装的,就是将该文件解压到/usr/local/arm/路径下。
   然后make驱动压缩文件,但报错:
    make -C /work SUBDIRS=/home/LinuxSource/v1.1.0 modules
   make [1]:Entering directory '/work'
   make [1]:**no rule to make target 'modules',stop
   make [1]:Leaving directory '/work'
   make   [default] Error 2
    其中/home/LinuxSource/v1.1.0是我放驱动解压文件的路径
    驱动的MakeFile文件为:
   TARGET = ax88180
   OBJS = ax88180.o

EXTRA_CFLAGS = -DEXPORT_SYMTAB

# <path-to-your-target-Linux2.6.x-kernel>
CURRENT = 2.6.x
KDIR = /work

# <path-to-your-target-Linux2.4.x-kernel>
#CURRENT = 2.4.20
#KDIR = /work/s3c2440_kernel2.4.20_cee31_rel1.0/include

ifneq (,$(findstring 2.4.,$(CURRENT)))
# <specify-your-CrossCompiler-for-kernel-version-2.4.x>
CROSS_COMPILE = /usr/local/arm/3.3.2/bin/arm-linux-
HOSTCC   = gcc
CC = $(CROSS_COMPILE)gcc

CCFLAGS = -DMODULE
CCFLAGS += -D__KERNEL__
CCFLAGS += -I$(KDIR)
CCFLAGS += -Wall
CCFLAGS += -Wstrict-prototypes
CCFLAGS += -Os
CCFLAGS += -g
CCFLAGS += -D__LINUX_ARM_ARCH__=4
CCFLAGS += -march=armv4
CCFLAGS += -mtune=arm9tdmi
CCFLAGS += -DKBUILD_BASENAME=ax88180
else

PWD = $(shell pwd)

endif

obj-m      := $(TARGET).o

ifneq (,$(findstring 2.4.,$(CURRENT)))
default: %.o: %.c %.h
@echo " "
@echo "Making $<"
$(CC) $(CCFLAGS) -c $< $(TARGET).c
else
default:
make -C $(KDIR) SUBDIRS=$(PWD) modules
$(TARGET).o: $(OBJS)
$(LD) $(LD_RFLAG) -r -o $@ $(OBJS)
endif

clean:
-rm -f *.o *.ko .*.cmd .*.flags *.mod.c

-include $(KDIR)/Rules.make
 
        为什么不能成功make啊?请大侠指点!!!!谢谢!!!!!!!!!!!!!
     

6 个解决方案

#1


Have you compile the kernel before you compile this module??

#2


上面做的编译网卡我只能在台式机上进行,不能在硬件上进行,硬件的内核好像不支持GCC。

#3


LZ还没有搞清楚嵌入式的开发环境问题呀
一般来说嵌入式的板子被称为目标板或目标机,而开发环境则安装在PC机上,被称为宿主机.程序需要在宿主机上开发和编译,编译要使用交叉编译环境,使用特定的编译器将程序编译为目标板能识别的格式,在目标板上一般是不会配置GCC 等编译环境的.
在你编译相应模块之前,一般会要求内核代码树,而内核代码树需要对linux内核进行配置和编译

#4


#  <path-to-your-target-Linux2.6.x-kernel> 
CURRENT = 2.6.x 
KDIR = /work 


2.6内核的编译,可以把驱动模块目录包含进内核的编译目录去

上面这两个环境变量需要设置吧 

一个是内核的版本号,还有一个是你驱动程序所在目录

#5


3楼说的对。需要交叉编译环境才能进行编译的。

#6


# <path-to-your-target-Linux2.6.x-kernel>
CURRENT = 2.6.x
KDIR = /work

这句是需要指定你将要移植的内核
如在你的/work下有2.6.15的linux内核源码,你应该改为
CURRENT = 2.6.25
KDIR = /work/linux-2.6.25

#1


Have you compile the kernel before you compile this module??

#2


上面做的编译网卡我只能在台式机上进行,不能在硬件上进行,硬件的内核好像不支持GCC。

#3


LZ还没有搞清楚嵌入式的开发环境问题呀
一般来说嵌入式的板子被称为目标板或目标机,而开发环境则安装在PC机上,被称为宿主机.程序需要在宿主机上开发和编译,编译要使用交叉编译环境,使用特定的编译器将程序编译为目标板能识别的格式,在目标板上一般是不会配置GCC 等编译环境的.
在你编译相应模块之前,一般会要求内核代码树,而内核代码树需要对linux内核进行配置和编译

#4


#  <path-to-your-target-Linux2.6.x-kernel> 
CURRENT = 2.6.x 
KDIR = /work 


2.6内核的编译,可以把驱动模块目录包含进内核的编译目录去

上面这两个环境变量需要设置吧 

一个是内核的版本号,还有一个是你驱动程序所在目录

#5


3楼说的对。需要交叉编译环境才能进行编译的。

#6


# <path-to-your-target-Linux2.6.x-kernel>
CURRENT = 2.6.x
KDIR = /work

这句是需要指定你将要移植的内核
如在你的/work下有2.6.15的linux内核源码,你应该改为
CURRENT = 2.6.25
KDIR = /work/linux-2.6.25