ThinkPad X220の無線LANカードをIntel 9260NGWに換装

ThinkPad X220に標準で搭載されている無線LANカードとBluetoothドーターカードでは、IEEE 802.11a/b/g/n、Bluetooth 2.0までしかサポートされていない。
そこで、これらをIntel 9260NGWに換装し、IEEE 802.11a/b/g/n/ac + Bluetooth 5に対応させる。

購入した商品

商品 価格
Intel 9260NGW $14.62
Fenvi M.2 NGFF Key A to Mini PCI E PCI Express Converter Adapter $5.99
IPEX 4 IPEX MHF4 Gen4 UFL Female to IPEX 1 Connector Jack Male Pin $3.68

最新の公式BIOSにアップデート

Intel 9260NGWを換装する前に、BIOSを最新のものにアップデートしておく。

この記事に沿って作業する。

ここからX220の最新のBIOS(1.4.6)をダウンロードする。
https://support.lenovo.com/jp/ja/downloads/DS018807

imgを作成する。

$ geteltorito.pl -o x220_bios.img 8duj31jp.iso

USBを挿してimageを書き込む。

$ sudo dd if=x220_bios.img of=/dev/sdb bs=64K

USBをX220に挿して起動する。起動画面でF12を押してUSBから起動し、「システム・プログラムの更新」を行う。
更新が終わり再起動し、F1でBIOS設定画面に入り、BIOSのバージョンが1.4.6になっていることを確認する。

もしくは以下をダウンロードしてWindows PEから実行、でもいいはず。(LinuxからのWindows PE環境の作成方法についてはこの記事を参照)
BIOS アップデート ユーティリティ (Windows 8 32bit, 64bit/ 7 32bit, 64bit/ Vista 32bit, 64bit/ XP) - ThinkPad X220, X220i, X220 Tablet - JP

Intel 9260NGWへの換装

キーボードの取り外しなどは、LenovoThinkPad X220 ハードウェア保守マニュアルに則って行う。

購入したIntel 9260NGWと、変換アダプタ、アンテナ変換ケーブル。

f:id:ryochack:20191020155536j:plain

元々挿さっている無線LANカードのIntel Centrino Advanced-N 6205とBluetoothドーターカードのBroadcom BCM2045Bを抜いて、Intel 9260NGWを挿す。
f:id:ryochack:20191002213729j:plain
f:id:ryochack:20191021002909j:plain
f:id:ryochack:20191020160530j:plain
f:id:ryochack:20191020172412j:plain

ただし、この状態で電源を入れると、公式BIOSホワイトリストに阻まれて起動できない。
f:id:ryochack:20191002214806j:plain

カスタムBIOSに変更する

公式BIOSホワイトリストを回避して、Intel 9260NGWで起動できるようにBIOSをカスタムBIOSに変更する。
以下の記事を参考にして、USB起動のWindows PEから最新のBIOS(1.46)に更新し、カスタムBIOSのパッチを当てる。
Windows PEのUSBイメージの作成方法については以下を参照する。

ryochack.hatenablog.com

Resources - ThinkPad X220 の "BIOS / FIRMWARE > WHITELIST REMOVED + ADVANCED MENU BIOS"の手順に従ってBIOSを入れ替える。

カスタムBIOSのX220_v1.46_Modified_BIOS.zipを以下からダウンロードする。
BIOS - ThinkPad X220

カスタムBIOS更新のための実行ファイルを含んだWindows PEイメージを作成する。

$ sudo mkdir /mnt/waik
$ sudo mount KB3AIK_EN.iso /mnt/waik
$ unzip X220_v1.46_Modified_BIOS.zip 
$ mv Lenovo\ X220\ v1.46\ Modified\ BIOS/ mod_bios

$ mkwinpeimg --waik-dir=/mnt/waik --overlay=${PWD}/mod_bios winpe.img
:: Copying primary boot files from the Windows Automated Installation Kit (/mnt/waik, X86
:: Extracting boot.wim from "/mnt/waik/WinPE.cab"
:: Overlaying "/home/ryo/Downloads/bios/mod_bios" on the Windows PE filesystem 
:: Rebuilding WIM with changes made 
:: Making disk image "winpe.img"
The image (winpe.img) is 139730944 bytes.

作成したイメージをUSBに焼く。

$ sudo dd if=winpe.img of=/dev/sdb bs=64K
2132+1 records in
2132+1 records out
139730944 bytes (140 MB, 133 MiB) copied, 15.3978 s, 9.1 MB/s

$ sync

Windows PEを書き込んだUSBをX220に挿したまま電源を入れ、起動画面でF12を押して、USBから起動する。
WIndows PEが立ち上がる。
f:id:ryochack:20191003014554j:plain

X直下まで移動し、LenovoカスタムBIOSディレクトリに入り、flash.batを実行する。
f:id:ryochack:20191003015035j:plain

実行中に3回くらいVerifyエラーになったが、その後通った。

f:id:ryochack:20191003015126j:plain

再起動後、BIOSを確認するとAdvancedの項目が増えており、カスタムBIOSに変更できていることがわかる。
f:id:ryochack:20191003015548j:plain
f:id:ryochack:20191003015536j:plain

Linuxのlspciコマンドから、intel 9260が見えていることがわかる。
f:id:ryochack:20191003210007j:plain

Intel 9260NGWを認識させる

lspciでIntel 9260NGWのモジュールは見えているが、ip linkでinterfaceが見えない。

$ lspci -k
03:00.0 Network controller: Intel Corporation Wireless-AC 9260 (rev 29)
        Subsystem: Intel Corporation Wireless-AC 9260
        Kernel modules: iwlwifi

$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

dmesgを確認すると、iwlwifiドライバのloadでエラーが出ているのがわかる。

$ dmesg | grep "iwlwifi"
[    5.264385] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-46.ucode failed with error -2
[    5.264407] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-45.ucode failed with error -2
[    5.264424] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-44.ucode failed with error -2
[    5.264442] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-43.ucode failed with error -2
[    5.264459] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-42.ucode failed with error -2
[    5.264474] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-41.ucode failed with error -2
[    5.264491] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-40.ucode failed with error -2
[    5.264507] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-39.ucode failed with error -2
[    5.264525] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-38.ucode failed with error -2
[    5.264542] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-37.ucode failed with error -2
[    5.264559] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-36.ucode failed with error -2
[    5.264575] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-35.ucode failed with error -2
[    5.264593] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-34.ucode failed with error -2
[    5.264609] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-33.ucode failed with error -2
[    5.264625] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-32.ucode failed with error -2
[    5.264641] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-31.ucode failed with error -2
[    5.264659] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-30.ucode failed with error -2
[    5.264662] iwlwifi 0000:03:00.0: no suitable firmware found!
[    5.265300] iwlwifi 0000:03:00.0: minimum version required: iwlwifi-9260-th-b0-jf-b0-30
[    5.266585] iwlwifi 0000:03:00.0: maximum version supported: iwlwifi-9260-th-b0-jf-b0-46
[    5.267823] iwlwifi 0000:03:00.0: check git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git

以下の情報を参考に、intel 9260NGWのFirmwareを入れる。
drivers - Ubuntu 18.04 cannot recognized Intel Wireless-AC 9260 - Ask Ubuntu

$ yay -S linux-firmware

これで再起動後に、wlp3s0のwlanインターフェースが見えるようになる。

$ lspci -k
03:00.0 Network controller: Intel Corporation Wireless-AC 9260 (rev 29)
        Subsystem: Intel Corporation Wireless-AC 9260
        Kernel driver in use: iwlwifi
        Kernel modules: iwlwifi

$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

この後に、 wicdbluetoothctl を使用してWi-Fiへの接続及び、Bluetoothバイスへのペアリングができることを確認した。

その他留意点

  • Intel 9260NGWに換装すると、ディスプレイベゼル下の無線LANBluetoothのLEDインジケータが光らなくなる。
  • 本体左にある無線ON/OFFのハードウェアスイッチは正常に機能する。

参考