我正在尝试为 Startech USB31000SW 构建驱动程序。其中包含一个 Linux 驱动程序,但必须对其进行编译和安装。运行时make
出现以下错误:
make -C /lib/modules/3.2.0-52-generic-pae/build SUBDIRS=/home/lars/Hämtningar/usbnet/Linux/Kernel 2.6.x_3.x modules
make[1]: Går till katalogen "/usr/src/linux-headers-3.2.0-52-generic-pae"
make[1]: *** Ingen regel för att skapa målet "2.6.x_3.x". Stannar.
make[1]: Lämnar katalogen "/usr/src/linux-headers-3.2.0-52-generic-pae"
make: *** [default] Error 2
第三行翻译为:没有创建目标的规则
根据自述文件,需要内核源,因此我从 Synaptic 安装了它。
这是 makefile:
CURRENT = $(shell uname -r)
TARGET = ax88179_178a
OBJS = ax88179_178a.o
MDIR = drivers/net/usb
KDIR = /lib/modules/$(CURRENT)/build
SUBLEVEL= $(shell uname -r | cut -d '.' -f 3 | cut -d '.' -f 1 | cut -d '-' -f 1 | cut -d '_' -f 1)
USBNET = $(shell find $(KDIR)/include/linux/usb/* -name usbnet.h)
ifneq (,$(filter $(SUBLEVEL),14 15 16 17 18 19 20 21))
MDIR = drivers/usb/net
#USBNET = $(shell find $(KDIR)/$(MDIR)/* -name usbnet.h)
endif
#ifneq (,$(filter $(SUBLEVEL),21 22 23 24))
#USBNET = $(shell find $(KDIR)/$(MDIR)/* -name usbnet.h)
#endif
#$(if $(USBNET),,$(error $(KDIR)/$(MDIR)/usbnet.h not found. please refer to readme file for the detailed description))
EXTRA_CFLAGS = -DEXPORT_SYMTAB
PWD = $(shell pwd)
DEST = /lib/modules/$(CURRENT)/kernel/$(MDIR)
obj-m := $(TARGET).o
default:
make -C $(KDIR) SUBDIRS=$(PWD) modules
$(TARGET).o: $(OBJS)
$(LD) $(LD_RFLAG) -r -o $@ $(OBJS)
pw
install:
su -c "cp -v $(TARGET).ko $(DEST) && /sbin/depmod -a"
clean:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
.PHONY: modules clean
-include $(KDIR)/Rules.make
欢迎任何想法
答案1
在此构建目录树中,目录名称中不能有空格。删除目录名称中的空格/home/lars/Hämtningar/usbnet/Linux/Kernel 2.6.x_3.x
(“Kernel”和“2.6.x_3.x”之间的空格)后,它应该可以正常工作。
这是因为“make”命令无法识别选项“2.6.x_3.x”。“Make”必须制作(编译)“模块”,但由于命令中有空格,它试图制作“2.6.x_3.x”。
答案2
从 Synaptic,请安装 linux-headers-generic 和 build-essential 并重试。如果仍然无法编译,请提供驱动程序链接,以便我们进一步排除故障。另外,发布:
lsusb