Centos
編譯驅動程序時出現問題:“沒有製定目標的規則”
首先,我正在執行 CentOS 6.4 安裝。我的電腦是一台筆記型電腦,我正在嘗試為我的乙太網卡安裝驅動程序,因為這個週末我失去了連接到 Internet 的能力。
所以我下載了驅動程序:jmebp-1.0.8.5
我安裝了 gcc、kernel-devel,但由於它不起作用,我最終安裝了開發工具組(以防我忘記了什麼)。
當我
make install
我收到此錯誤:
*** No rule to make target `internet/jmebp-1.0.8.5'. Stop. Leaving directory `/lib/modules/2.6.32-358.6.1.el6.x86_64/build'
我的makefile是:
MODNAME := jme obj-m := $(MODNAME).o ifneq ($(KERNELRELEASE),) ######################### # kbuild part of makefile ######################### EXTRA_CFLAGS += -Wall -O3 #EXTRA_CFLAGS += -DTX_DEBUG #EXTRA_CFLAGS += -DREG_DEBUG else ######################### # Normal Makefile ######################### TEMPFILES := $(MODNAME).o $(MODNAME).mod.c $(MODNAME).mod.o Module.symvers .$(MODNAME).*.cmd .tmp_versions modules.order Module.markers Modules.symvers ifeq (,$(KVER)) KVER=$(shell uname -r) endif KSRC ?= /lib/modules/$(KVER)/build MINSTDIR ?= /lib/modules/$(KVER)/kernel/drivers/net all: modules @rm -rf $(TEMPFILES) modules: @$(MAKE) -C $(KSRC) M=$(shell pwd) modules checkstack: modules objdump -d $(obj-m) | perl $(KSRC)/scripts/checkstack.pl $(shell uname -m) @rm -rf $(TEMPFILES) namespacecheck: modules perl $(KSRC)/scripts/namespace.pl @rm -rf $(TEMPFILES) install: modules install -m 644 $(MODNAME).ko $(MINSTDIR) depmod -a $(KVER) patch: @/usr/bin/diff -uar -X dontdiff ../../trunc ./ > bc.patch || echo > /dev/null buildtest: SRCDIRS=`find ~/linux-src -mindepth 1 -maxdepth 1 -type d -name 'linux-*' | sort -r -n`; \ SRCDIRS="$${SRCDIRS} `find ~/linux-src/centos -mindepth 2 -maxdepth 2 -type d -name 'linux-*' | sort -r -n`"; \ SRCDIRS="$${SRCDIRS} `find ~/linux-src/fedora -mindepth 2 -maxdepth 2 -type d -name 'linux-*' | sort -r -n`"; \ for d in $${SRCDIRS}; do \ $(MAKE) clean && $(MAKE) -C . KSRC=$${d} modules; \ if [ $$? != 0 ]; then \ exit $$?; \ fi; \ done $(MAKE) clean clean: @rm -rf $(MODNAME).ko $(TEMPFILES) %:: $(MAKE) -C $(KSRC) M=`pwd` $@ endif
有什麼建議麼 ?
首要問題
你錯過了
kernel-headers
包裹。您需要這些來編譯核心模組。yum install kernel-headers
假設這是您從哪裡下載驅動程序的。當我在 CentOS 6.4 系統上解壓它們時,出現以下錯誤:
$ cd jmebp-1.0.8.5 $ ls CHANGELOG jme.c jme.h Makefile scripts $ make make: *** /lib/modules/2.6.32-279.14.1.el6.x86_64/build: No such file or directory. Stop. make: *** [modules] Error 2
安裝完
kernel-headers
包後,我又跑make
了第二次:$ make make: *** /lib/modules/2.6.32-279.14.1.el6.x86_64/build: No such file or directory. Stop. make: *** [modules] Error 2
還是有問題?進一步調試它我發現了我的另一個問題,你也可能遇到,所以我在下面記錄它,以防萬一。
第二期
核心目錄中的連結似乎已損壞。
$ pwd /lib/modules/2.6.32-279.14.1.el6.x86_64 $ ls -l | grep build lrwxrwxrwx 1 root root 51 Dec 15 14:49 build -> ../../../usr/src/kernels/2.6.32-279.14.1.el6.x86_64 lrwxrwxrwx 1 root root 5 Dec 15 14:50 source -> build $ ls -l build/ ls: cannot access build/: No such file or directory
哎呀,錯誤的版本
kernel-headers
和kernel-devel
我們的核心版本。我們目前正在執行這個版本的核心:$ uname -r 2.6.32-279.14.1.el6.x86_64
但是我們只是為這個版本安裝了
kernel-headers
和kernel-devel
包:2.6.32-358.6.1.el6.x86_64
因此,讓我們也安裝該版本的核心並重新啟動,以便我們可以使用較新的核心:
$ yum update kernel
重新啟動後,一切看起來好多了:
$ ls CHANGELOG jme.c jme.h Makefile scripts $ make make[1]: Entering directory `/usr/src/kernels/2.6.32-358.6.1.el6.x86_64' CC [M] /home/sam/jmebp/jmebp-1.0.8.5/jme.o Building modules, stage 2. MODPOST 1 modules CC /home/sam/jmebp/jmebp-1.0.8.5/jme.mod.o LD [M] /home/sam/jmebp/jmebp-1.0.8.5/jme.ko.unsigned NO SIGN [M] /home/sam/jmebp/jmebp-1.0.8.5/jme.ko make[1]: Leaving directory `/usr/src/kernels/2.6.32-358.6.1.el6.x86_64' $ ls CHANGELOG jme.c jme.h jme.ko jme.ko.unsigned Makefile scripts
現在我們看到了 jme.ko 核心模組。要安裝它:
make install