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は必要かわかりませんが有効にしたほうがいいかも。
ドライバのビルド
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);
}
赤字の部分を追加してビルドするとエラーが出ないようです。