iwlwifi
iwlwifi は Intel の現行の無線チップのための無線ドライバです。
カーネル
動作させるためにはカーネルコンフィグが必要です。ドライバは 802.11a/b/g/n/ac(デバイスによって異なります)をサポートしているので、IEEE 802.11 を有効にする必要があります。
IEEE 802.11
少なくとも cfg80211 と mac80211 を有功にしてください。
[*] Networking support ---> [*] Wireless ---> <M> cfg80211 - wireless configuration API [ ] nl80211 testmode command [ ] enable developer warnings [ ] cfg80211 certification onus [*] enable powersave by default [ ] cfg80211 DebugFS entries [ ] support CRDA [ ] cfg80211 wireless extensions compatibility <M> Generic IEEE 802.11 Networking Stack (mac80211) [ ] Minstrel *** Some wireless drivers require a rate control algorithm *** [ ] Enable mac80211 mesh networking (pre-802.11s) support -*- Enable LED triggers [ ] Export mac80211 internals in DebugFS [ ] Trace all mac80211 debug messages [ ] Select mac80211 debugging features ----
iwlwifi は固有の輻輳制御アルゴリズム iwl-agn-rs を提供します、#dmesg を確認してください。
wireless configuration API (CONFIG_CFG80211) をモジュールとしてビルド (
<M>
) するのではなく、カーネルに組み込む (<*>
) 場合、ドライバが regulatory.db を /lib/firmware からロードできず、規制ドメインサポートが機能しなくなるでしょう。CONFIG_CFG80211=m を設定するか、regulatory.db と regulatory.db.p7s を CONFIG_EXTRA_FIRMWARE に設定してください。
iwlwifi デバイスドライバ
Intel の現行の無線チップにはこのドライバを使用してください。次に示すとおり、モジュール <M>
として設定してください。加えて、DVM または MVM のうち正しいほうをファームウェアの表の Module の列を見て選択する必要があります。
Device Drivers ---> [*] Network device support ---> --- Network device support [*] Wireless LAN ---> --- Wireless LAN [ ] mac80211-based legacy WDS support [ ] ADMtek devices [ ] Atheros/Qualcomm devices [ ] Atmel devices [ ] Broadcom devices [ ] Cisco devices [*] Intel devices < > Intel PRO/Wireless 2100 Network Connection < > Intel PRO/Wireless 2200BG and 2915ABG Network Connection < > Intel Wireless WiFi 4965AGN (iwl4965) < > Intel PRO/Wireless 3945ABG/BG Network Connection (iwl3945) <M> Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi) <M> Intel Wireless WiFi DVM Firmware support <M> Intel Wireless WiFi MVM Firmware support Debugging Options ---> [ ] Intersil devices [ ] Marvell devices [ ] MediaTek devices [ ] Ralink devices [ ] Realtek devices [ ] Redpine Signals Inc devices [ ] STMicroelectronics devices [ ] Texas Instrument devices [ ] ZyDAS devices [ ] Quantenna wireless cards support < > Simulated radio testing tool for mac80211 < > Wireless RNDIS USB support
ドライバをモジュールとしてビルドする(
<M>
)のではなく、カーネルに組み込む(<*>
)場合は、ファームウェアもカーネルに組み込む必要があります。カーネルに組み込む場合の節を見てください。
カーネルコンフィグを変更した後は忘れずにカーネルを再ビルドしてください。
カーネルを再ビルドし、このカーネルで再起動したら、選択は次のように確認できます:
user $
zgrep 'IWLWIFI\|IWLDVM\|IWLMVM' /proc/config.gz
ファームウェア
この表にある通り、各デバイス毎に追加の firmware も必要です。これは sys-linux/linux-firmware で利用可能です。もし linux-firmware に存在しない場合は、デバイス個別の sys-firmware/iwlxxxx-*ucode パッケージで見つかるかもしれません。
root #
emerge --ask sys-kernel/linux-firmware
カーネルに組み込む場合
ドライバをモジュールとしてビルドする(<M>
)のではなく、カーネルに組み込む(<*>
)場合は、ファームウェアもカーネルに組み込む必要があります。
Device Drivers ---> Generic Driver Options ---> Firmware loader ---> -*- Firmware loading facility (iwlwifi-xxxx.ucode) Build named firmware blobs into the kernel binary (/lib/firmware) Firmware blobs root directory [ ] Enable the firmware sysfs fallback mechanism
iwlwifi-xxxx.ucode
を実際のファームウェア名に置き換えてください。FW_LOADER_USER_HELPER_FALLBACK にも注意してください。
追加可能: savedconfig
/lib/firmware に不要なものがインストールされるのを防ぐために、Linux firmware の savedconfig
USE フラグを設定することができます。
例えば、 Intel® Centrino® Advanced-N 6205 が iwlwifi-6000g2a-ucode を必要としている一方で、他はすべてコメントアウト、あるいは削除できます。
/etc/portage/savedconfig/sys-kernel/linux-firmware
バージョン番号が取り除かれていることに注意してくださいiwlwifi-6000g2a-5.ucode iwlwifi-6000g2a-6.ucode
次のファームウェアアップデート時にこれらの設定が失われないようにするには、バージョン番号を取り除く必要があります。
user $
cd /etc/portage/savedconfig/sys-kernel
root #
mv linux-firmware{-20200316,}
ネットワークデバイス名
カーネルによって提供される eth0 や wlan0 のようなネットワークデバイス名は、通常は /lib/udev/rules.d/80-net-name-slot.rules での udev ルールによってシステムの起動時に変更されます (dmesg 参照)。
旧来の命名ルールを維持するには、/etc/udev/rules.d ディレクトリ内に、同じ名称のファイルを空で作成することで上書きします:
root #
touch /etc/udev/rules.d/80-net-name-slot.rules
テスト
新しいカーネルで再起動するかモジュールを読み込んだ後で、以下の方法を使ってデバイスが利用可能かテストできます:
- /sys ファイルシステムを使用する
- ip コマンドを使用する
- ifconfig コマンドを使用する
- iw コマンドを使用する
/sys ファイルシステム
/sys/class/net ディレクトリの内容を ls -al や(app-text/tree パッケージに入っている)tree コマンドで一覧表示させます:
user $
tree /sys/class/net
/sys/class/net/ ├── enp2s14 -> ../../devices/pci0000:00/0000:00:1e.0/0000:02:0e.0/net/enp2s14 ├── lo -> ../../devices/virtual/net/lo ├── sit0 -> ../../devices/virtual/net/sit0 └── wlp8s0 -> ../../devices/pci0000:00/0000:00:1c.0/0000:08:00.0/net/wlp8s0
ip コマンド
デバイス名を取得したりワイヤレスカードが認識されているか検証するには、以下の ip コマンドを実行します:
user $
ip addr
3: wlan0: ...
ifconfig コマンド
ifconfig コマンドは sys-apps/net-tools パッケージを通じて提供されています。まだ有効化されていないものやアクティブになっていないものも含め、認識されているすべてのネットワークカードのリストを表示するには ifconfig -a を使用してください:
user $
ifconfig -a
wlan0 ...
以下のようにして、ネットワークカードをアクティブにできます:
root #
ifconfig -v wlan0 up
SIOCSIFFLAGS: Operation not possible due to RF-kill WARNING: at least one error occurred. (-1)
この例では、(通常はベイの電力消費を抑え、また偶然ワイヤレスネットワークに接続してしまわないようにする目的で) radio frequency kill state がセットされているため、ワイヤレスカードの有効化は失敗しています。
iw コマンド
ワイヤレスネットワークカードのドライバーが nl80211 スタックをサポートしていれば、 net-wireless/iw パッケージで提供される iw コマンドで、認識されているワイヤレスカードを表示できます:
root #
iw dev
phy#0 Interface wlan0 ifindex 4 type managed
modprobe と modinfo
modprobe は何も出力しないはずです:
root #
modprobe iwlwifi
ドライバモジュールに関するほとんどの情報は modinfo iwlwifi から得られます
user $
modinfo iwlwifi
lspci
lspci は Kernel driver in use:
と Kernel modules:
の欄に iwlwifi
と表示するはずです:
root #
lspci -nnkv | sed -n '/Network/,/^$/p'
03:00.0 Network controller [0280]: Intel Corporation Centrino Advanced-N 6205 [Taylor Peak] [8086:0082] (rev 34) Subsystem: Intel Corporation Centrino Advanced-N 6205 AGN [8086:1321] Flags: bus master, fast devsel, latency 0, IRQ 33 Memory at f7d00000 (64-bit, non-prefetchable) [size=8K] Capabilities: [c8] Power Management version 3 Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+ Capabilities: [e0] Express Endpoint, MSI 00 Capabilities: [100] Advanced Error Reporting Capabilities: [140] Device Serial Number confidential Kernel driver in use: iwlwifi Kernel modules: iwlwifi
xx:xx.x
形式の識別名は dmesg からの特定の情報を grep するのに役立ちます。
dmesg
dmesg の出力を確認してください。03:00.0
を lspci から得られた識別名で読み替え、wlp
をネットワークインターフェース名で読み替えてください。
user $
dmesg | grep -i -E '03:00.0|wlp|iwl|80211'
[ 0.251986] pci 0000:03:00.0: [8086:0082] type 00 class 0x028000 [ 0.252146] pci 0000:03:00.0: reg 0x10: [mem 0xf7d00000-0xf7d01fff 64bit] [ 0.252863] pci 0000:03:00.0: PME# supported from D0 D3hot D3cold [ 3.621978] cfg80211: Loading compiled-in X.509 certificates for regulatory database [ 3.629362] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7' [ 3.634986] iwlwifi 0000:03:00.0: enabling device (0100 -> 0102) [ 3.635111] iwlwifi 0000:03:00.0: can't disable ASPM; OS doesn't have ASPM control [ 3.644480] iwlwifi 0000:03:00.0: loaded firmware version 18.168.6.1 op_mode iwldvm [ 3.659269] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEBUG disabled [ 3.659270] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEBUGFS disabled [ 3.659271] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEVICE_TRACING enabled [ 3.659273] iwlwifi 0000:03:00.0: Detected Intel(R) Centrino(R) Advanced-N 6205 AGN, REV=0xB0 [ 3.694543] ieee80211 phy0: Selected rate control algorithm 'iwl-agn-rs' [ 3.695812] iwlwifi 0000:03:00.0 wlp3s0: renamed from wlan0 [ 5.060307] iwlwifi 0000:03:00.0: Radio type=0x1-0x2-0x0 [ 5.352853] iwlwifi 0000:03:00.0: Radio type=0x1-0x2-0x0 [ 5.431804] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready [ 8.908518] wlp3s0: authenticate with <my WLAN AP> [ 8.912238] wlp3s0: send auth to <my WLAN AP> (try 1/3) [ 9.016437] wlp3s0: send auth to <my WLAN AP> (try 2/3) [ 9.120455] wlp3s0: send auth to <my WLAN AP> (try 3/3) [ 9.125773] wlp3s0: authenticated [ 9.126019] wlp3s0: waiting for beacon from <my WLAN AP> [ 9.148418] wlp3s0: associate with <my WLAN AP> (try 1/3) [ 9.191232] wlp3s0: RX AssocResp from <my WLAN AP> (capab=0x1431 status=0 aid=2) [ 9.211860] wlp3s0: associated [ 9.242532] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready [ 9.249856] wlp3s0: Limiting TX power to 20 (20 - 0) dBm as advertised by <my WLAN AP>
トラブルシューティング
カーネルがロードされない
正しいカーネルがロードされているか確認してください。次のようにして行えます(IKCONFIG 機能が必要です):
user $
zgrep CONFIG_IWL /proc/config.gz
ファームウェアの問題
- 無線カードにファームウェアの読み込みが必要な場合、udevもしくはsystemdを使っているシステムに対して、バイナリを読み込むようにカーネルを設定することは必須事項です。カーネルの設定に関するさらなる詳細は、以下のGentoo forumsのスレッドを参照してください: FW_LOADER_USER_HELPER_FALLBACK.
無線が動作していない
- Intel Corporation Wireless 8260 (rev 3a) 書き込み制限のされたRSA semaphoreにアクセスできない
- Intel Wireless-AC 9560 iwlwifi not working kernel 5.4.0
- Linux kernel 5.6.0 iwlwifi bug
- Intel Corporation Wi-Fi 6 AX200 (rev 1a). pci_enable_msi failed - -38 という dmesg のメッセージが表示されて、正しいファームウェアが読み込まれているにもかかわらずカードが Input/output エラーを表示する場合は、Message Signaled Interrupts (MSI and MSI-X) カーネルオプション (CONFIG_PCI_MSI) の有効化を試してください
Device Drivers ---> [*] PCI support ---> [*] Network device support ---> [*] Message Signaled Interrupts (MSI and MSI-X)
インターネットに接続されていない
アクセスポイントに接続済みであるが、未だにどのサーバーもしくはインターネットにアクセスできない場合は、802.11nを無効化して、(もしくは)software encryptionを有効化することが良いかもしれません。iwlwifi
モジュールに11n_disable=1
または11n_disable=8
と(もしくは)swcrypto=1
のオプションを設定することができます。モジュールを読み込む時に自動的にオプションを適応するには、以下のように次のファイル(/etc/modprobe.d/iwlwifi.conf)を設定してください。
/etc/modprobe.d/iwlwifi.conf
802.11nを無効化して、software cryptoを有効化するoptions iwlwifi 11n_disable=1 swcrypto=1
より新しいカーネルでは、5.3.7 で確認されていますが、11n_disable=1 を設定する (または 0x01 でマスクされる) と 802.11ac が無効化されてしまいます。これは最大スループット 54Mbit にデバイスを制限するでしょう。
参照
- Handbook:AMD64/Networking/Wireless
- Wifi — WiFi(無線)ネットワークデバイスのセットアップについて説明します。
- Wpa_supplicant — ネットワーク認証を取り扱う wifi サプリカントです。
- Network management using DHCPCD
- Netifrc — Gentoo's default framework for configuring and managing network interfaces on systems running OpenRC.
- Troubleshooting