QCA9377ワイヤレスアダプターを備えたDell Inspiron 5570ラップトップでUbuntu 18.04.2 LTSを実行して、 Atheros CSIツール (提供されているインストール手順 こちら )をインストールしようとしています。
インストール手順の「カーネルをコンパイルする」の「準備」セクションにリストされているすべてを正常に実行できます。 (make
とgcc
のインストールなど、私が理解できた手順で指定されていないものがあります。)しかし、make menuconfig
ステップについて混乱しています以降。 Atheros-CSI-Toolフォルダーにmake menuconfig
と入力したら、すぐに[保存]を押し、.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)をインストールして発生したこれらのエラーを修正しようとしましたが、そのOSでラップトップでWi-Fiが機能しませんでした(これは、Wi-Fi接続に関するデータを収集しているため重要です)私がインストールしようとしているツールで)。オンラインアーカイブから古いLinuxカーネル(4.1.10)もインストールしましたが、上記と同じエラーが発生しました。
ここに2つの問題があります。
カーネルはコンパイル用のPICモードをサポートしていません。詳細はこの post で追跡できます。 @Joyが指摘したように、現在aptにインストールされているgcc5 +ではデフォルトでPIEが有効になっているため、-fno-pie
をgccオプションに追加する必要があります。
ここで私は this の修正に従っています。クローンしたgitリポジトリの下のMakefile
の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リポジトリの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