web-dev-qa-db-ja.com

rtl8812auおよびrtl8814auネットワークドングルのdkmsドライバーが17.10(カーネル4.13)でビルドに失敗する

Rtl8812au(v4.3.14)およびrtl8814au(v4.3.21)USBワイヤレスネットワークドングル用のgithub dkmsカーネルドライバーがあり、17.04で正常に動作していましたが、17.10へのアップグレード中にビルドに失敗しました。両方のドライバーは同様のコードに基づいており、同様の方法でビルドできません。

新しいgccコンパイラーなのか、それとも新しい4.13カーネルなのかは、問題を引き起こしているのかどうかわかりません。エラーを回避するには、Makefileを微調整するだけでよい場合があります。

通常のdkms add/build/installシーケンスの代わりに標準のmakeコマンドを使用すると、エラーがすぐにわかります。

以下は、rtl8812auコードバージョン4.3.14のエラーです(現在のUbuntuリポジトリで見つかったものよりも新しい)...

user@Satellite-E55:~/src/rtl8812AU$ make
make Arch=x86_64 CROSS_COMPILE= -C /lib/modules/4.13.0-16-generic/build M=/home/user/src/rtl8812AU  modules
make[1]: Entering directory '/usr/src/linux-headers-4.13.0-16-generic'
  CC [M]  /home/user/src/rtl8812AU/core/rtw_cmd.o
In file included from /home/user/src/rtl8812AU/include/drv_types.h:32:0,
                 from /home/user/src/rtl8812AU/core/rtw_cmd.c:22:
/home/user/src/rtl8812AU/include/osdep_service.h: In function ‘thread_enter’:
/home/user/src/rtl8812AU/include/osdep_service.h:343:2: error: implicit declaration of function ‘allow_signal’; did you mean ‘do_signal’? [-Werror=implicit-function-declaration]
  allow_signal(SIGTERM);
  ^~~~~~~~~~~~
  do_signal
/home/user/src/rtl8812AU/include/osdep_service.h: In function ‘flush_signals_thread’:
/home/user/src/rtl8812AU/include/osdep_service.h:353:6: error: implicit declaration of function ‘signal_pending’; did you mean ‘timer_pending’? [-Werror=implicit-function-declaration]
  if (signal_pending (current))
      ^~~~~~~~~~~~~~
      timer_pending
/home/user/src/rtl8812AU/include/osdep_service.h:355:3: error: implicit declaration of function ‘flush_signals’; did you mean ‘do_signal’? [-Werror=implicit-function-declaration]
   flush_signals(current);
   ^~~~~~~~~~~~~
   do_signal
cc1: some warnings being treated as errors
scripts/Makefile.build:302: recipe for target '/home/user/src/rtl8812AU/core/rtw_cmd.o' failed
make[2]: *** [/home/user/src/rtl8812AU/core/rtw_cmd.o] Error 1
Makefile:1546: recipe for target '_module_/home/user/src/rtl8812AU' failed
make[1]: *** [_module_/home/user/src/rtl8812AU] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-4.13.0-16-generic'
Makefile:1576: recipe for target 'modules' failed
make: *** [modules] Error 2
user@Satellite-E55:~/src/rtl8812AU$

osdep_service.hで参照されるコードは次のようになります...

#ifdef PLATFORM_LINUX
    #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0))
    daemonize("%s", name);
    #endif
    allow_signal(SIGTERM);
#endif
#ifdef PLATFORM_FREEBSD
    printf("%s", "RTKTHREAD_enter");
#endif
}

__inline static void flush_signals_thread(void) 
{
#ifdef PLATFORM_LINUX
    if (signal_pending (current)) 
    {
        flush_signals(current);
    }
#endif

Rtl8814auのエラーとコードは似ているので、リクエスト/必要がない限り投稿しません。

助けてください。ワイヤレスネットワークをオンラインに戻したいのですが。

1
heynnema

あなたが試すかもしれません:

git clone https://github.com/zebulon2/rtl8814au.git
cd rtl8814au
make
Sudo make install
Sudo modprobe 8814au

私の17.10システムで完璧に動作します。私はdkmsプロセスを推奨できると確信していないので、カーネルの更新には再コンパイルが必要です。

2
chili555

私を正しい方向に向けてくれた@ chili555に感謝します。 git cloneリンクで参照されるrtl8814auドライバーは17.10で動作し、その同じ作成者は17.10でも動作するrtl8812auドライバーも動作します。

メモリから...

rtl8812au(Edimax EW-7822UAC)

Sudo git clone https://github.com/zebulon2/rtl8812au-driver-5.2.9.git
note: dkms.conf file already included
Sudo cp -r rtl8812au-driver-5.2.9 /usr/src/rtl8812au-5.2.9
Sudo dkms add rtl8812au/5.2.9
Sudo dkms build rtl8812au/5.2.9
Sudo dkms install rtl8812au/5.2.9
dkms status

rtl8814au(Edimax EW-7833UACおよびD-Link DWA-192)

Sudo git clone https://github.com/zebulon2/rtl8814au.git

create dkms.conf and add these lines...
----
# rtl8814AU-4.3.21_17997.20160531
#
#
PACKAGE_NAME="rtl8814au"
PACKAGE_VERSION="4.3.21_17997.20160531"
MAKE[0]="'make' all KVER=${kernelver}"
BUILT_MODULE_NAME[0]="8814au"
DEST_MODULE_LOCATION[0]="/updates/dkms"
AUTOINSTALL="YES"
REMAKE_INITRD="NO"
----

Sudo cp -r rtl8814au /usr/src/rtl8814au-4.3.21
Sudo dkms add rtl8814au/4.3.21
Sudo dkms build rtl8814au/4.3.21
Sudo dkms install rtl8814au/4.3.21
dkms status
2
heynnema