Guide on adding WiFi drivers to Android - 4. 正しいパスとパーミッションをinit.rcで設定する

パーミッションの設定を誤ると、wpa_supplicantは、制御ソケットを作成したり開いたりすることができず、libhardware_legacy/wifi/wifi.cは接続ができなくなります。
wpa_supplicantは、Googleによって、wifiユーザーとグループで動作するように修正されているので、ファイルとディレクトリ構造のオーナーをwifiに設定しておく必要があります(wpa_supplicant/os_unix.cのos_program_init()関数を確認のこと)。


そのように設定しない場合は、以下のようなエラーになります:

E/WifiHW ( ): Unable to open connection to supplicant on "/data/system/wpa_supplicant/wlan0": No such file or directory will appear.


また、wpa_supplicantが修正するので、wpa_supplicant.confもwifiユーザー/グループに設定されている必要があります。もし、システムが置かれている/Systemが読み取り専用であり、このファイルが/data/misc/wifi/wpa_supplicant.conf に置かれている場合は、init.rcのwpa_supplicant serviceを修正して、読み書き可能な場所を設定してください。


init.rcの中で正しいパスが設定されていることを確認する:

mkdir /system/etc/wifi 0770 wifi wifi
chmod 0770 /system/etc/wifi
chmod 0660 /system/etc/wifi/wpa_supplicant.conf
chown wifi wifi /system/etc/wifi/wpa_supplicant.conf

# wpa_supplicant socket
mkdir /data/system/wpa_supplicant 0771 wifi wifi
chmod 0771 /data/system/wpa_supplicant

#wpa_supplicant control socket for android wifi.c
mkdir /data/misc/wifi 0770 wifi wifi
mkdir /data/misc/wifi/sockets 0770 wifi wifi
chmod 0770 /data/misc/wifi
chmod 0660 /data/misc/wifi/wpa_supplicant.conf