Intel SoCFPGA を WiFi に接続する

# 1. 概要

Linux や Android などを動作させるアプリケーションプロセッサはネットワークへの接続は不可欠です。
さらに言うと、ワイヤーラインよりワイヤレス(WiFi)での接続は重要な要素になっています。
そこで、Intel SoCFPGA に Debian 9 や Ubuntu 18.04 をインストールし、USB Wireless Network Adapter (俗に言う WiFi ドングル) を使用し、WiFi に接続する方法を紹介します。
なお、USB WiFi Adapter は他の物でも可能とは思われますが、その場合、Kernel の Config 設定に変更が必要になる可能性があります。

今回は２つのデバイスで確認しました。
１つは随分昔に購入し机の中に眠っていたもの、もう１つは最近でも購入は可能で、千円以下で購入できるものです。

![1-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/63d3062e-74c9-8ffc-8dd6-ee7113eed394.jpeg)


## 1-1. 適用条件

OS : Debian 9 / Ubuntu 18.04

Kernel : 5.4 以上

# 2. Kernel の作成

## 2-1. make の準備

Tool Chain や Kernel ソースを取得し、任意の Config 設定をします。

詳細はこちらを参照ください。https://rocketboards.org/

## 2-2. Wireless Network の設定

    $ make menuconfig

メニューで Wireless Network の設定を有効にします。
下記の項目を Enable にします。

    [*]Networking support
        -*- Wireless --->
            <*> cfg80211 - wireless configuration API
            <*> Generic IEEE 802.11 Networking Stack (mac80211)
    Device Driver
        [*] Network device support --->
            [*] Wireless LAN --->
                <*> Realtek rtlwifi famiry of devices (NEW) --->
                    <*> Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter
        [*] Staging drivers --->
            [M] Realtek RTL8188EU Wireless LAN NIC driver
			    [*] Realtek RTL8188EU AP mode (NEW)

<　共通 >
![2-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/768ab8f0-2d8c-017b-cdb4-dac51b14aa05.png)

< RTL8188CUSを使用する場合 >

![2-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/2727628b-944a-76fe-ddcf-32d37a2e2190.png)

![2-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/a08bc0e9-0bbc-c6d3-6c57-3a89aa071e2b.png)

< RTL8188EUSを使用する場合 >

![2-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/a72dbba8-0010-a04c-7b24-41bcb9b01289.png)


## 2-3. make の実行

    $ make zImage

zImage が arc/arm/boot に作成出来たら、SD カードの FAT パーティションの zImage と置き換え、準備完了です。

# 3. Debian 9 への組み込み 

USB ポートに USB WiFi Adapter を挿入して起動します。

## 3-1. USB の認識確認

USB WiFi Adapter が認識されていることを確認します。

    # lsusb

![3-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/b8153a45-6b86-4d55-2e7b-e544cf9ad76c.jpeg)


## 3-2. IP アドレスの確認

    # ip a

![3-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/c4ffa6ac-58ce-7e09-8b71-aeb15313ac4e.jpeg)

### 3-2-1. 起動ログの確認

    # dmesg | grep fail

起動ログに下記のようなメッセージが表示されている場合、Firmware のインストールが必要です。

![3-2-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/66df6cad-c2f4-6f35-52d9-bcad6bb49baa.jpeg)


### 3-2-2. Firmware のインストール

一旦、Ethrnet ケーブルを挿入し下記でインストールします。

    # apt install firmware-realtek

![3-2-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/ee8a5f18-3819-f27b-c23b-b01a86c91229.jpeg)


reboot します。

## 3-3. ネットワークマネージャの設定

### 3-3-1. デバイス一覧を表示

    # nmcli dev

![3-3-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/5467736e-109f-4da7-6fd4-1d9cca57435b.jpeg)


※ wlan0 が "unavailable" と表示されている場合は、下記のモジュールを削除してください。

![3-3-1A.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/d6f471fb-6a3f-1dd3-e888-b78e719b2b22.jpeg)


    # apt remove openresolv dhcpcd5

TYPE が wifi で STATE が disconnected のデバイスが存在している事を確認し、On にします。

    # nmcli r wifi on

### 3-3-2. AP 一覧を表示

接続可能な AP の一覧が表示されますので、この中から接続する AP の SSID を調べます。

    # nmcli dev wifi

![3-3-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/62033a29-3156-faa7-5bef-92a8fbf0b855.jpeg)


### 3-3-3. AP に接続する

AP の SSID とパスワードを指定して接続します。

    # nmcli dev wifi connect "<SSID>" password "<Password>"

![3-3-3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/89c027dd-3b3c-e6db-3858-9c7ec4a2211f.jpeg)


## 3-4. 接続の確認

    # ip a
    # apt update

IP アドレスが取得出来ていて、ネットワークに接続出来ている事を確認します。


# 4. Ubuntu 18.04 への組み込み

zImage を置き換え、USB ポートに USB WiFi Adapter を挿入して起動します。

## 4-1. USB の認識確認

USB WiFi Adapter が認識されていることを確認します。

    # lsusb

## 4-2. ネットワークマネージャの設定

### 4-2-1. デバイス一覧を表示

    # nmcli dev

![4-2-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/24fa605f-65ab-9622-eaa1-74d498270859.jpeg)


TYPE が wifi で STATE が disconnected のデバイスが存在している事を確認し、On にします。

    # nmcli r wifi on

### 4-2-2. AP 一覧を表示

    # nmcli dev wifi

![4-2-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/a693797f-a0ee-63a6-74d8-1398b45891ef.jpeg)


### 4-2-3. AP に接続する

AP の SSID とパスワードを指定して接続します。

    # nmcli dev wifi connect "<SSID>" password "<Password>"

![4-2-3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/0a8242a4-9b0e-a975-7efd-ee8fe70b1884.jpeg)


## 4-3. 接続の確認

    # ip a

![4-3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/4be8ebd3-e1c4-d333-32c1-547999fcf048.jpeg)


IP アドレスが取得出来ている事を確認します。

### 4-3-1. 外部への接続確認

DNS の設定が書き換わってしまい、外部サイトへの接続に失敗する可能性があります。

    # apt update

apt update で下記のようにエラーになる場合は以下の対処をしてください。

![4-3-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/6fdc4068-8c4a-5844-130e-4c1e0e627338.jpeg)


### 4-3-2. DSN 設定ファイルの変更

resolv.conf のリンク先ファイルを特定し、リンクを切り離してファイルをコピーします。

    # ls -l /etc/resolv.conf
    # rm /etc/resolv.conf
    # cp /run/connman/resolv.conf /etc/

![4-3-2A.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/83c96fa8-f65b-7b19-1d06-736d512157d9.jpeg)


    # vi /etc/resolv.conf

nameserver の後を "8.8.8.8" に変更します。

    nameserver 8.8.8.8

![4-3-2B.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386292/a4a522fa-7756-eb81-5c5c-52f64bcb3e92.jpeg)


### 4-3-3. ネットワークマネージャ設定の変更

ネットワークマネージャの設定ファイルの \[main\] セクションに "dns=none" を追加して DNS の書き換えを抑止します。

    # vi /etc/NetworkManager/NetworkManager.conf
    
    [main]
    plugins=ifupdown,keyfile
    dns=none

### 4-3-4. 接続の確認

Ping を打って外部への接続が正しく行われるか確認します。

    # ping google.com

### 4-3-5. Reboot 後の再接続

Reboot すると DNS が書き換えられ、外部への接続が出来なくなる場合がありますが、再度 "4-3-2. DSN 設定ファイルの変更" を行う事で接続出来るようになります。