CentOS8でTL-WDN7200HワイヤレスUSBネットワークカードをサポートするにはどうすればよいですか?

ノートブックコンピュータの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

CentOS8でTL-WDN7200HワイヤレスUSBネットワークカードをサポートするにはどうすればよいですか?
CentOSにPHP7.4をインストールする方法
Centos7.2にHDP2.6をインストールする方法
centos7にAndroidSDKをインストールする方法
centos8カスタムディレクトリにphp7.3をインストールする方法
VMwareでCentOS仮想マシンを作成する方法
Ubuntuで詳細なネットワークルーティングテーブルを表示する方法
VMwareでCentOS仮想マシンを作成する方法
CentOSのNTPプールプロジェクトに参加するようにNTPを構成する方法
CentOS8ネットワークカード構成ファイル
CentOS8でタイムゾーンを設定または変更する方法
virtualboxのCentosネットワーク設定
gccをcentosで6.4.0に更新します
UbuntuにHelmをインストールする方法
centOS7にjdk1.8をインストールする方法
CentOS8にMySQLをインストールする方法
CentOS7をCentOS8にアップグレードする方法(詳細な手順)
ubuntuでhanlpを使用する方法
CentOS8にRをインストールする方法
CentOS8にFFmpegをインストールする方法
CentOS8にVirtualboxをインストールする方法
CentOS8にTensorFlowをインストールする方法
Centos7でgcc4.9.xに更新する方法
CentOS8にTeamViewerをインストールする方法
pythonコードでラップする方法
CentOS8にGradleをインストールする方法
CentOS8にElasticsearchをインストールする方法
CentOS8にJenkinsをインストールする方法
CentOS8にGoをインストールする方法
CentOS8にGCCをインストールする方法
Ubuntu14.04にmysqlをインストールする方法
CentOS8にYarnをインストールする方法
CentOS7はネットワークカード名を変更します
CentOS8にNginxをインストールする方法
CentOS7にAsteriskをインストールする方法
CentOS8にJenkinsをインストールする方法
CentOS8にVagrantをインストールする方法
pythonでクラスを書く方法
pythonで数値をフィルタリングする方法
PythonでExcelを読む方法
CentOS8にSkypeをインストールする方法
CentOS8にhtopをインストールする方法
CentOS8にPythonをインストールする方法
CentOS8にElasticsearchをインストールする方法
CentOS8にPostgresqlをインストールする方法
CentosにWordpressをインストールする方法
Centos7はネットワークカード名を変更します
pythonでエラーを表示する方法
CentOS8にhtopをインストールする方法
Ubuntu14.04にmysqlをインストールする方法
CentOS8にTeamViewerをインストールする方法
pythonでreturnを書く方法
CentOS7にスワップを追加する方法
CentOS8にMariaDBをインストールする方法
CentOS7にMongoDBをインストールする方法
CentOS8にOdoo13をインストールする方法
CentOS8にApacheをインストールする方法
Pythonで変数を理解する方法
pythonで変数をクリアする方法
CentOS8でSELinuxを無効にする方法
CentOS8にOpenCVをインストールする方法