ノートブックコンピュータのThinkBook14IMLに接続されたTP-LINKを備えたTL-WDN7200HAC 1900デュアルバンドハイゲインワイヤレスUSBネットワークカードは、現在2.4GHz 600Mbps + 5GHz1300Mbpsをサポートしています。
Windows 10は、ドライバーをインストールせずに直接サポートされます。ただし、CentOS Linux 8システムに問題があり、関連するドライバーサポートがなかったため、使用できませんでした。
現在のカーネルバージョンを表示します。
[ root@centos ~]# uname -aLinux centos 4.18.0-147.6.el8.x86_64 #1 SMP Tue Oct 1515:19:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
注:バージョン番号4.18.0を覚えておいてください。これは、後でコンパイルするときにコードを変更するために使用されます。
ドライバーを自分でコンパイルしてアイデアを見つけるには、まずチップメーカーのモデルを見つける必要があります。
リストUSB:
[ root@centos ~]# lsusbBus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hubBus 001 Device 005: ID 5986:2113 Acer, Inc Bus 001 Device 004: ID 27c6:55a4 Bus 001 Device 003: ID 18f8:1286[Maxxter] Bus 001 Device 002: ID 2357:0106 TP-Link Bus 001 Device 006: ID 8087:0aaa Intel Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002:ID 2357:0106 TP-Linkを参照し、ID 2357:0106を抽出し、情報を調べて、ワイヤレスUSBネットワークカードチップの製造元がrealtekであり、モデルが8814auであることを確認します。
githubでRealtek8814AU USB WiFiドライバーを見つけ、ダウンロードしてコンパイルします。
注:このバージョンrtl8814au v4.3.21_17997.20160531を見つけるには、最新バージョンを探しないでください。
コンパイル中に最初のエラーが発生しました:
/tmp/rtl8814au/os_dep/linux/os_intfs.c:914:22: error: initialization of‘u16(*)(struct net_device *, struct sk_buff *, struct net_device *,u16(*)(struct net_device *, struct sk_buff *, struct net_device *))’ {aka ‘short unsigned int(*)(struct net_device *, struct sk_buff *, struct net_device *, short unsigned int(*)(struct net_device *, struct sk_buff *, struct net_device *))’}from incompatible pointer type ‘u16(*)(struct net_device *, struct sk_buff *,void*,u16(*)(struct net_device *, struct sk_buff *, struct net_device *))’ {aka ‘short unsigned int(*)(struct net_device *, struct sk_buff *,void*, short unsigned int(*)(struct net_device *, struct sk_buff *, struct net_device *))’}[-Werror=incompatible-pointer-types].ndo_select_queue = rtw_select_queue,^~~~~~~~~~~~~~~~/tmp/rtl8814au/os_dep/linux/os_intfs.c:914:22: note:(near initialization for ‘rtw_netdev_ops.ndo_select_queue’)cc1: some warnings being treated as errorsmake[2]:***[scripts/Makefile.build:313:/tmp/rtl8814au/os_dep/linux/os_intfs.o] Error 1make[1]:***[Makefile:1547: _module_/tmp/rtl8814au] Error 2make[1]: Leaving directory '/usr/src/kernels/4.18.0-147.6.el8.x86_64'make:***[Makefile:1699: modules] Error 2
rtl8814auディレクトリにあるos_dep / linux / os_intfs.cファイルを開き、rtw_select_queue関数を見つけます。
static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb#if LINUX_VERSION_CODE >=KERNEL_VERSION(3,13,0),void*accel_priv#if LINUX_VERSION_CODE >=KERNEL_VERSION(3,14,0), select_queue_fallback_t fallback#endif
# endif)
次のように変更します。
static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb#if LINUX_VERSION_CODE >=KERNEL_VERSION(3,13,0) #if LINUX_VERSION_CODE >=KERNEL_VERSION(4,18,0), struct net_device *sb_dev #else,void*accel_priv #endif #if LINUX_VERSION_CODE >=KERNEL_VERSION(3,14,0)& LINUX_VERSION_CODE <KERNEL_VERSION(5,2,0), select_queue_fallback_t fallback #endif#endif)
コンパイルを続行し、2番目のエラーを見つけます。
/tmp/rtl8814au/os_dep/linux/rtw_android.c: In function ‘rtw_android_priv_cmd’:/tmp/rtl8814au/os_dep/linux/rtw_android.c:615:62: error: macro "access_ok" passed 3 arguments, but takes just 2if(!access_ok(VERIFY_READ, priv_cmd.buf, priv_cmd.total_len)){^/tmp/rtl8814au/os_dep/linux/rtw_android.c:615:7: error: ‘access_ok’ undeclared(first use inthisfunction)if(!access_ok(VERIFY_READ, priv_cmd.buf, priv_cmd.total_len)){^~~~~~~~~/tmp/rtl8814au/os_dep/linux/rtw_android.c:615:7: note: each undeclared identifier is reported only once for each function it appears inmake[2]:***[scripts/Makefile.build:313:/tmp/rtl8814au/os_dep/linux/rtw_android.o] Error 1make[1]:***[Makefile:1547: _module_/tmp/rtl8814au] Error 2make[1]: Leaving directory '/usr/src/kernels/4.18.0-147.6.el8.x86_64'make:***[Makefile:1699: modules] Error 2
rtl8814auディレクトリにあるos_dep / linux / rtw_android.cファイルを開き、rtw_android_priv_cmd関数を見つけます。
if(!access_ok(VERIFY_READ, priv_cmd.buf, priv_cmd.total_len)){
次のように変更します。
# if(LINUX_VERSION_CODE >=KERNEL_VERSION(4,18,0))if(!access_ok(priv_cmd.buf, priv_cmd.total_len)){#elseif(!access_ok(VERIFY_READ, priv_cmd.buf, priv_cmd.total_len)){#endif
コンパイルを続行し、通常どおり合格します。
最後に、8814au.koが生成されたことがわかります。
LD [M]/tmp/rtl8814au/8814au.o Building modules, stage 2. MODPOST 1 modules CC /tmp/rtl8814au/8814au.mod.o LD [M]/tmp/rtl8814au/8814au.komake[1]: Leaving directory '/usr/src/kernels/4.18.0-147.6.el8.x86_64'
インストール後にロードモジュールを使用します。
modprobe 8814au
cat / proc / kmsgは以下を見ることができます:
<4>[19967.549960] RTL871X: module init start<4>[19967.549961] RTL871X: rtl8814au v4.3.21_17997.20160531<4>[19967.671171] RTL871X:rtw_ndev_init(wlan0) if1 mac_addr=08:1f:71:24:64:8a<6>[19967.671505] usbcore: registered newinterface driver rtl8814au<4>[19967.671507] RTL871X: module init ret=0<6>[19967.682791] rtl8814au 1-3:1.0 wlp0s20f0u3: renamed from wlan0<6>[19967.697724] IPv6:ADDRCONF(NETDEV_UP): wlp0s20f0u3: link is not ready<6>[19968.104292] IPv6:ADDRCONF(NETDEV_UP): wlp0s20f0u3: link is not ready<6>[19968.106996] IPv6:ADDRCONF(NETDEV_UP): wlp0s20f0u3: link is not ready<6>[19968.121708] IPv6:ADDRCONF(NETDEV_UP): wlp0s20f0u3: link is not ready<4>[19971.176837] RTL871X: nolinked power save enter<6>[19971.191472] IPv6:ADDRCONF(NETDEV_UP): wlp0s20f0u3: link is not ready<4>[19971.617442] RTL871X: nolinked power save leave<4>[19974.653364] RTL871X:rtw_set_802_11_connect(wlp0s20f0u3) fw_state=0x00000008<4>[19974.859910] RTL871X: start auth<4>[19974.862100] RTL871X: auth success, start assoc<4>[19974.880289] RTL871X:rtw_cfg80211_indicate_connect(wlp0s20f0u3) BSS not found !!<4>[19974.880316] RTL871X: assoc success<4>[19975.010392] RTL871X: recv eapol packet<4>[19975.010619] RTL871X: send eapol packet<4>[19975.013448] RTL871X: recv eapol packet<4>[19975.013527] RTL871X: send eapol packet<4>[19975.013596] RTL871X:set pairwise key camid:4, addr:74:05:a5:01:23:45, kid:0, type:AES<6>[19975.013730] IPv6:ADDRCONF(NETDEV_CHANGE): wlp0s20f0u3: link becomes ready<4>[19975.014452] RTL871X:set group key camid:5, addr:74:05:a5:01:23:45, kid:2, type:AES
すでにWIFIに正常に接続できます!
注:この記事はToyo Lauによるオリジナルであり、許可なくプラットフォーム上で複製することはできません。再印刷が必要な場合は、作者に連絡してください〜。または、直接技術交換グループ:734638086を使用できます。詳細については、WeChat公式アカウント:Technical Training Camp(WeChat ID:TechBootcamp)に注意してください〜
Recommended Posts