我正在尝试安装Atheros CSI 工具(提供安装说明这里),在配备 QCA9377 无线适配器的 Dell Inspiron 5570 笔记本电脑上运行 Ubuntu 18.04.2 LTS。
我可以成功完成安装说明中“编译内核”的“准备”部分列出的所有操作。(有些操作说明中没有指定,但我能够弄清楚如何操作,例如安装make
和gcc
。)但是,我对步骤和后续步骤感到困惑make menuconfig
。当我输入make menuconfig
Atheros-CSI-Tool 文件夹时,我立即按“保存”,保存名为 的文件.config
,然后“退出”菜单。
当我输入make -j16
(我有 8 个 CPU 核心)时,输出如下:
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CC scripts/mod/empty.o
CC scripts/mod/devicetable-offsets.s
cc1: error: code model kernel does not support PIC mode
cc1: error: code model kernel does not support PIC mode
scripts/Makefile.build:258: recipe for target 'scripts/mod/empty.o' failed
make[2]: *** [scripts/mod/empty.o] Error 1
make[2]: *** Waiting for unfinished jobs....
scripts/Makefile.build:153: recipe for target 'scripts/mod/devicetable-offsets.s' failed
make[2]: *** [scripts/mod/devicetable-offsets.s] Error 1
scripts/Makefile.build:403: recipe for target 'scripts/mod' failed
make[1]: *** [scripts/mod] Error 2
make[1]: *** Waiting for unfinished jobs....
Makefile:555: recipe for target 'scripts' failed
make: *** [scripts] Error 2
make: *** Waiting for unfinished jobs....
make: *** wait: No child processes. Stop.
当我输入时make modules
,这是输出:
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
CC arch/x86/purgatory/purgatory.o
In file included from include/linux/compiler.h:54:0,
from include/uapi/linux/stddef.h:1,
from include/linux/stddef.h:4,
from ./include/uapi/linux/posix_types.h:4,
from include/uapi/linux/types.h:13,
from include/linux/types.h:5,
from arch/x86/purgatory/sha256.h:14,
from arch/x86/purgatory/purgatory.c:13:
include/linux/compiler-gcc.h:121:1: fatal error: linux/compiler-gcc7.h: No such file or directory
#include gcc_header(__GNUC__)
^~~~
compilation terminated.
scripts/Makefile.build:258: recipe for target 'arch/x86/purgatory/purgatory.o' failed
make[1]: *** [arch/x86/purgatory/purgatory.o] Error 1
arch/x86/Makefile:185: recipe for target 'archprepare' failed
make: *** [archprepare] Error 2
我尝试通过从档案库安装旧版本的 Ubuntu (14.04) 来修复遇到的这些错误,但在该操作系统下,我的笔记本电脑上的 Wi-Fi 无法使用(这很重要,因为我正在使用尝试安装的工具收集有关 Wi-Fi 连接的数据)。我还从在线档案库安装了一个旧的 Linux 内核 (4.1.10),但遇到了与上述相同的错误。
答案1
这里有两个问题:
内核不支持 PIC 模式编译,详情可参见此处邮政。正如@Joy 所说,目前 apt 安装的 gcc5+ 默认启用了 PIE,我们需要将其添加
-fno-pie
到 gcc 选项中。我在这里关注这
Makefile
修复,从您克隆的 git repo 下的L774 开始添加以下行。# force no-pie for distro compilers that enable pie by default KBUILD_CFLAGS += $(call cc-option, -fno-pie) KBUILD_CFLAGS += $(call cc-option, -no-pie) KBUILD_AFLAGS += $(call cc-option, -fno-pie) KBUILD_AFLAGS += $(call cc-option, -no-pie) # optional, mute warnings on pointers signedness to speed up compilation KBUILD_CFLAGS += $(call cc-option, -Wno-pointer-sign)
include/linux/compiler-gcc.h:121:1: fatal error: linux/compiler-gcc7.h
,这基本上说明在您克隆的 git repo 文件夹下include/linux
,没有名为 的文件compiler-gcc7.h
。当前该文件夹下仅存在compiler-gcc5.h
。因此,一种直接的方法是安装并暂时选择gcc-5
作为默认编译器。以下:# install gcc-5 sudo apt-get install gcc-5 # use update-alternatives to switch default gcc version # register gcc-7 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60 # choose gcc-5 at prompt update-alternatives --config gcc # now check gcc version, verify is using gcc-5 gcc -v ## gcc version 5.5.0 20171010 (Ubuntu 5.5.0-12ubuntu1)
安装说明指出libnl-dev
通过以下方式安装
sudo apt-get install libnl-dev
但libnl-dev
似乎在 18.04 中不再存在。考虑使用
sudo apt-get install libnl-3-dev
如果你遇到了麻烦。
gcc-7
最后,你可以在安装后通过以下方式切换回
# choose gcc-7 at prompt
update-alternatives --config gcc
答案2
使固定:
- 在你的项目中找到“linux/compiler-gcc*.h”,“*”可能是 3 或 5 或其他
- cp “linux/compiler-gcc*.h” “linux/compiler-gcc7.h”。