Orange Pi R1 のSPIフラッシュにOSを入れてルーターにする

メニュー

RTL8189FTV

Orange Pi R1 は Wifiチップ(Realtek RTL8189FTV)を搭載しています。
これのデバイスドライバはmainlineのLinux kernelに取り込まれていないのでモジュールとして別途用意する必要があります。

kernelの準備

デバイスドライバをビルドするのにkernelをcfg80211つきでビルドしておく必要があります。
[*] Networking support  --->
  [*]   Wireless  --->
    <*>   cfg80211 - wireless configuration API
    [*]     cfg80211 wireless extensions compatibility
    <*>   Generic IEEE 802.11 Networking Stack (mac80211)
cfg80211があればビルドしてモジュールをロードすることはできるのですが、
cfg80211 wireless extensions compatibilityを有効にしておかないとネットワークアプリケーションから通信が行えないようです。
mac80211は必要かわかりませんが有効にしたほうがいいかも。

ドライバのビルド

$ git clone https://github.com/jwrdegoede/rtl8189ES_linux.git
$ cd rtl8189ES_linux.git
$ make ARCH=arm CROSS_COMPILE=arm-none-eabi- KSRC=../linux/linux-5.4.12
KSCRオプションはlinuxカーネルのソースディレクトリのpathです。
8189es.koができあがるので、Linuxシステムの、
/lib/modules/カーネルバージョン/8189es.ko
の位置に設置し、
# depmod -a
とすれば利用可能になります。
# modprobe 8189es
でモジュールがロードされてwlan0が出てきます。
Bildrootを標準設定でビルドした場合depmodはありません。BusyBoxを参照してください。

RTL8189FTVのドライバは8189esではなく8189fsだというような情報がありますが、
8189fsをビルドしたら、モジュールのロードはできるのですがwlan0が出てこない状態になりました。
上記の方法でできあがる8189esは機能します。

[↓現行版では修正されているぽいので不要ぽいです。]
上記の8189esで利用可能なのですが、APとして利用してクライアントが接続するとカーネルがエラーを出力し、wlan0がダウン不能になります。
rtl8189ES_linux/os_dep/linux/ioctl_cfg80211.c の3620行目付近
#if defined(RTW_USE_CFG80211_STA_EVENT) || defined(COMPAT_KERNEL_RELEASE)
  {
    struct station_info sinfo;
    u8 ie_offset;
    if (GetFrameSubType(pmgmt_frame) == WIFI_ASSOCREQ)
      ie_offset = _ASOCREQ_IE_OFFSET_;
    else // WIFI_REASSOCREQ
      ie_offset = _REASOCREQ_IE_OFFSET_;

sinfo.pertid = 0;
    sinfo.filled = 0;
//  cf commit 319090bf6c75e3ad42a8c
//    sinfo.filled = STATION_INFO_ASSOC_REQ_IES;
    sinfo.assoc_req_ies = pmgmt_frame + WLAN_HDR_A3_LEN + ie_offset;
    sinfo.assoc_req_ies_len = frame_len - WLAN_HDR_A3_LEN - ie_offset;
    cfg80211_new_sta(ndev, GetAddr2Ptr(pmgmt_frame), &sinfo, GFP_ATOMIC);
  }
赤字の部分を追加してビルドするとエラーが出ないようです。
[編集]   [AD]
rentafree.net