技術コラム Vol.3

組込みでPCI Expressを活用!高速無線LANカード編

公開日:2022/04/22

PCI Expressは、現在、PCの拡張スロットで主流となっているインタフェース規格です。
組込みシステムにおいても、ハイエンドの組込みプロセッサやFPGAなどで、PCI Expressをサポートしている製品が珍しくなくなってきており、PCI Expressの高速インタフェースを活かした、さまざまな高性能な機能を実現することが可能になっています。

今回は、PCI Expressを活用し、高速無線LANカードを利用する方法として

  1. PCI Expressとハードウェアの概要
  2. 無線LAN制御用ソフトウェア
  3. ソフトウェアの実装から動作確認

をご紹介いたします。

1. PCI Expressとハードウェアの概要

PCI Expressは、2002年に策定されたPC用の拡張バス規格で、省略形でPCIeとも表記されます。
2022年現在では、Gen6まで規格が策定されおり、最大転送速度は理論値で256GByte/sです。
信号は、プラス、マイナスの2本1組の差動信号で、基本的にCLK、TX、RXで構成されます。TXとRXの1対をレーンと呼び、複数組の構成では、x1,x2,x3,x4と表記されます。

今回は、SMARC® 2.1準拠SoM「αSMARC-RZ/G2E」とキャリアボード「αSMARC-EVB1」を使用します。
「αSMARC-RZ/G2E」は、Arm® Cortex®-A53 Dualコアを内蔵するルネサス エレクトロニクス社製「RZ/G2E」を搭載したSoM(システムオンモジュール)で、PCIe Gen2(x1)をサポートしています。「αSMARC-EVB1」と組み合わせることで、mini PCIeカードを利用することができます。

使用する無線LANカードは、Intel®製のmini PCIeカード「Dual Band Wireless-AC 7260」です。
AC 7260は、802.11ac/a/b/g/nに対応し、最大転送速度867Mbpsの高速転送が可能で、Bluetooth4.0にも対応しています。
この無線LANカードは一般に販売されているPC用の製品ですが、ドライバさえあればPC用の製品でも組込みシステムで利用できることが、PCI Expressのメリットの1つです。

mini PCIeカードはフルサイズとハーフサイズの2種類の規格がありますが、今回使用するカードはハーフサイズとなります。

「αSMARC-RZ/G2E」+「αSMARC-EVB1」外観
mini PCIe 無線LANカード

2. 無線LAN制御用ソフトウェア

組込みシステムで無線LANを動作させるために、接続を制御するソフトウェアが必要となります。
今回は、Linuxで広く利用されているフリーソフトウェアのwpa_supplicantを使用します。
wpa_supplicantは、主に以下の機能があり実行中のサプリカントと対話型でやり取りするためのコマンドラインインターフェース等も含まれています。

  • WPA-PSK、WPA2-PSK(パーソナルモード)
  • EAP付きのWPA(エンタープライズモード)
  • CCMP・TKIP・WEPの鍵の管理 等

なお、αSMARC-RZ/G2EのLinux BSP(Board Support Package)には、デフォルトでwap_supplicantが含まれていますので、パッケージを追加インストールする必要はありません。

3. ソフトウェアの実装から動作確認

それでは、実際にLinuxカーネルへの実装から、動作までの手順を説明します。

(1)Linuxカーネルへの実装

① 無線LANファームウェアの設定
以下のサイトより、「iwlwifi-7260-17.ucode」を入手します。

次に、入手した「iwlwifi-7260-17.ucode」をカーネルソースの該当フォルダにコピーします。
以下のコマンドをターミナルから入力します。

$cp iwlwifi-7260-17.ucode ~/user_work/build/tmp/work-ahared/asmarc-rzg2e/kernel-source/firmware/

Linuxカーネルのmenuconfigにより、必要な設定をおこないます。
以下のコマンドをターミナルから入力し、menuconfigを起動します。

$ cd ~/user_work
$ source poky/oe-init-build-env
$ bitbake -c menuconfig linux-renesas

menuconfigが起動したら、DeviceDriverに無線LAN用ファームウェアを追加します。
menuconfig内の以下の項目に記載されているファームウェアの最後に、今回追加するファームウェア(iwlwifi-7260-17.ucode)を追記します。

Device Drivers   --->
 Generic Driver Options   --->
  Firmware loader   --->
   (r8a779x_usb3_v2.dlmem r8a779x_usb3_v3.dlmem regulatory... iwlwifi-7260-17.ucode ← 最後尾に追加
config-Linux_arm64

② 無線LANカードドライバの追加
続いて、無線LANカードのドライバを追加します。menuconfigで以下の項目をチェックします。

Device Drivers   --->
[*]    Network device support   --->
[*]       Wireless LAN   --->
[*]          Intel devices
<*>           Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/...
<*>              Intel Wireless WiFi MVM Firmware support
config-Linux_arm64___wireless_LAN

③ Linuxカーネルのビルド
設定が完了したら、BitBakeを実行してLinuxカーネルをビルドします。
ビルド方法の詳細に関しては、「SMARC-RZ/G2E LinuxBSP スタートアップガイド」をご参照ください。
ビルドが正常に終了したら、αSMARC-RZ/G2Eを出来上がったLinuxカーネルに書き換えます。

(2)無線LANカードの取り付け

αSMARC-EVB1のmini PCIeスロットは、ハーフサイズ、フルサイズ両方に対応していますが、今回は変換アダプタ(ハーフサイズからフルサイズに変換)を使用して取り付けます。

  1. ① キャリアボードのmini PCIeスロットに斜めに差し込みます。
  2. ② キャリアボードと並行になるように押し付けます。
mini PCIeスロットへの差し込み

(3)動作確認

Linuxを起動して、アクセスポイントに接続して実際に通信を行ってみます。
今回の例では、アクセスポイントの設定は以下となっています。

アクセスポイントの設定
設定項目 設定値
SSID test_ssid
セキュリティ WPA2
暗号化キー test_pass

動作確認の様子

αSMARC-RZ/G2Eのコンソールで以下のコマンドを順番に入力します。

① wpa_supplicant用の設定ファイルを作成します。
設定の変更がなければ、2回目以降は必要ありません。

# mkdir /etc/wpa_supplicant
# wpa_passphrase "test_ssid" "test_pass" >> /etc/wpa_supplicant/wpa_supplicant.conf

② wpa_supplicantを再起動します。

# rfkill unblock wifi
# killall wpa_supplicant
# wpa_supplicant -B -P /run/wpa_supplicant.wlp1s0.pid -i wlp1s0 -c /etc/wpa_supplican t/wpa_supplicant.conf

③ IPアドレスを設定します。今回はDHCPを使用します。

# udhcpc -i wlp1s0

④ Pingで通信を確認します。任意のIPアドレスにpingを送信してください。

# ping -I wlp1s0 192.168.1.50

正常にPingの応答が返ってくれば、動作確認は完了です。

製品のご案内

本コラム以外にも開発にお役立ていただける技術情報をアプリケーションノートとして公開しております。興味のある方は、ぜひ製品をご利用ください。

  • ※ArmおよびCortexは、米国および/またはその他の地域におけるArm Limited(またはその子会社)の登録商標です。
  • ※記載されている会社名、製品名は、各社の登録商標または商標です。
  • ※記載の内容は改良のため、予告なく変更する場合がございます。