Guide on adding WiFi drivers to Android - 6. WiFiドライバをモジュール、もしくはkernelに組み込みで構築し、対応するAndroidのソースコードを修正する

はじめに、使っているkernelでCONFIG_PACKETとCONFIG_NET_RADIO(wireless extensionsにある)が有効になっているかを確認してください。
ドライバは、モジュール形式(Androidでの一般的なやり方)もしくは、kernel組み込み(USB WiFiのような複数デバイスへの対応をkernelの自動認識にまかせるのであれば)でビルドされている必要があります。どちらもソースコードの変更が必要になります(後述)。

  • kernelモジュールの場合:

BoardConfig.mkで以下の項目を定義します。
1. WIFI_DRIVER_MODULE_PATH := (モジュール名をパスとともに記載します。一般的な例では/system/lib/modules/wlan.ko)
2. WIFI_DRIVER_MODULE_NAME:= (たとえば、wlan0)
3. WIFI_DRIVER_MODULE_ARG:= (たとえば、nohwcrypt)
Androidをビルドする時に、正しい位置にモジュールが置かれているか確認してください。

  • kernel組み込みの場合:

最初に、init.rcを変更する必要があります。ドライバがすでに読み込まれ、wpa_supplicantのステイタスが動作中に設定されている、hardware/libhardware_legacy/wifi/wifi.cで定義されたインターフェース名を知らせる必要があります。

setprop wifi.interface "wlan0"
setprop wlan.driver.status "ok"
setprop init.svc.wpa_supplicant "running"

次に、insmod/rmmod操作で0を返し(単純に0を返すだけです。kernelに組み込む場合は関数の最初の行は不要です)、 check_driver_loaded()関数で/proc/modulesを確認する前に戻るように、hardware/libhardware_legacy/wifi/wifi.cを書き換える必要があります。