openSUSE 10.3 编译 Intel 82579v/82583v 网卡官方驱动,出现 Bash 脚本错误

(test) #1

换了新主板 双网卡 intel 82579v 和 82583v,openSUSE 10.3 安装后不能设别 eth0/eth1 只有lo0。从 intel 官网下载驱动后 按照 readme 进行解压缩和 make install 。但是 make install 发生错误。shell 检查也没找到问题点

/bin/sh: line 0: [: -ge: unary operator expected
make -C /lib/modules/2.6.22.5-31-bigsmp/build CC=gcc SUBDIRS=/root/e1000e-3.4.2.4/src modules
make[1]: Entering directory `/usr/src/linux-2.6.22.5-31-obj/i386/bigsmp'
make -C ../../../linux-2.6.22.5-31 O=../linux-2.6.22.5-31-obj/i386/bigsmp modules
/bin/sh: -c: line 0: unexpected EOF while looking for matching `"'
/bin/sh: -c: line 1: syntax error: unexpected end of file
expr: syntax error
/bin/sh: line 0: [: -ge: unary operator expected
    CC [M]  /root/e1000e-3.4.2.4/src/netdev.o
In file included from /root/e1000e-3.4.2.4/src/e1000.h:14,
             from /root/e1000e-3.4.2.4/src/netdev.c:30:
/root/e1000e-3.4.2.4/src/kcompat.h:892:31: error: operator '&&' has no right operand
/root/e1000e-3.4.2.4/src/kcompat.h:903:31: error: operator '==' has no left operand
/root/e1000e-3.4.2.4/src/kcompat.h:916:31: error: operator '==' has no left operand
/root/e1000e-3.4.2.4/src/kcompat.h:922:31: error: operator '==' has no left operand
/root/e1000e-3.4.2.4/src/kcompat.h:931:30: error: operator '&&' has no right operand
/root/e1000e-3.4.2.4/src/kcompat.h:5605:31: error: operator '>=' has no left operand


$ rpm -qa |grep ^kernel
kernel-source-2.6.22.5-31
kernel-bigsmp-2.6.22.5-31
kernel-xenpae-2.6.22.5-31

$ rpm -qa |grep ^gcc
gcc42-c++-4.2.1_20070724-17
gcc42-4.2.1_20070724-17

$ ls -l /bin/*sh
-rwxr-xr-x 1 root root 604040 Sep 22  2007 bash
lrwxrwxrwx 1 root root      4 Sep 15 13:18 sh -> bash
(test) #2

是缺少kernel 或者 gcc 吗

(hillwood) #3

为什么要用这么旧的版本?早就不支持了。

(Tommy Vercetti) #4

这版本太旧了

(llyaomo) #5

估计就像windows的驱动一样,不支持win8了。可能源码也不支持内核2.6了吧

(test) #6

因为是公司内用的工控机,里面的全部程序都是在10.3上开发的。换别的版本os 不行,所以目前只能用10.3

(Tommy Vercetti) #7

你自己电脑开个10.3虚拟机再编译呢?

(Tommy Vercetti) #8

你是不得先makemake install

(test) #9

试过了先make 再make install 一样

(test) #10

(test) #11

找了块pci网卡 目前驱动支持,先用着吧:rofl:

(Tommy Vercetti) #12

我感觉可能是bash版本的问题

(test) #13

%bash —version
GNU bash version 3.2.25
%rpm -qa |grep bash
bash-3.2-61

(runapp) #14

建议看看intel官网写的对内核的支持,虽然我也觉得是bash太旧的问题。
可以试试在Makefile里找到sh,替换成bash(也许会有更大的问题(

(marguerite) #15

提供一个思路:

这里有用 musl 静态编译 bash 各种版本的脚本。

你可以编译个静态的 bash 5.0 或者 4.4 来跑 intel 驱动里的那个脚本。就能绕过 bash 版本低的问题。

同样,我们用新版 bash 的也可以编译一个 bash 3.2.57 来看看 intel 驱动里的脚本问题出在哪里。

(marguerite) #16

https://transfer.sh/dhmKY/bash-3.2.57-static.zip

这里有一个我编译的静态的 bash-3.2.57,可以用来测试楼主的脚本

(marguerite) #17

测试了不是 bash 的原因,可能是你的 make 版本太旧。

sudo zypper in --no-recommends glibc-devel-static
cd bash-3.2.25
./configure --enable-static-link --without-bash-malloc
make
cp bash bash-3.2.25-static

编译出 bash-3.2.25-static,然后测试脚本用的这个:

#!/bin/sh
LANG=en_US.UTF-8 bash --version
if [ 1 -ge 0 ]; then
  echo "1 -ge 0: passed"
fi

运行得到:

GNU bash, version 5.0.7(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
1 -ge 0: passed 

ge lt 这种符号支持了,>= == && || 这种不至于不支持。

1赞