どのようにAndroidのポーティングwpa_supplicantのと無線LANドライバ

、wpa_supplicantのプロフィール

1. wpa_supplicantのは何ですか

wpa_supplicantのは、WPAとWPA2(IEEE 802.11i規格/ RSN)のためのサポートされているLinux、BSD、Mac OS Xの、およびWindows用のWPAサプリカントです。これは、デスクトップ/ラップトップコンピュータ、組み込みシステムの両方に適しています。サプリカントは、クライアントステーションで使用されているIEEE 802.1X / WPAコンポーネントです。これは、WPA認証とキーネゴシエーションを実装し、それがローミングおよびWLANドライバのIEEE 802.11認証/関連付けを制御します。

wpa_supplicantのは、バックグラウンドで実行され、無線接続を制御するバックエンドコンポーネントとして機能する「デーモン」プログラムであるように設計されます。wpa_supplicantのはwpa_supplicantのに含まれている別個のフロントエンドプログラム、テキストベースのフロントエンド(wpa_cli)およびGUI(wpa_gui)をサポートします。

wpa_supplicantのが含まれている機能を選択するために使用することができる柔軟なビルド構成を使用します。これは、ほとんどの機能と完全なデバッグをサポートした450 KBにコードをデバッグすることなく、WPA / WPA2パーソナルおよびWPA / WPA2-Enterpriseの130 kbのバイナリのための約50 kbのバイナリからの最低限のコードサイズを(ことができます。これらの例のサイズは、ビルドのためにありますx86のターゲット)。

WPA /されたIEEE 802.11i機能2.サポート

CCMP、TKIP、WEP104、WEP40WPAフルIEEE 802.11i規格/ RSN / WPA2RSN用(RADIUS認証サーバと、例えば)EAP( "WPA-エンタープライズ")とWPA-PSK( "WPAパーソナル")WPAキー管理:PMKSAキャッシング、事前authenticationIEEE 802.11rIEEE 802.11wWi-FiのProtected Setupの(WPS)

3.サポート無線カードとドライバ

nl80211 / cfg80211(最も新しいドライバを)サポートするLinuxドライバWPA / WPA2 extensionsWiredイーサネットdriversBSD net80211層(例えば、アセロス・ドライバー)(FreeBSDの6-CURRENTとNetBSD電流)とLinuxのワイヤレス拡張機能V19以降をサポートするLinuxドライバWindowsのNDISドライバ( Windowsの、少なくともXPおよび2000、他のテストされていません)

4. WPAと接触APを確立する方法

wpa_supplicantの隣接BSSeswpa_supplicantをスキャンするカーネルドライバがそのconfigurationwpa_supplicantに基づくBSSは、カーネルドライバが選択BSSif WPA-EAPに関連付ける要求を選択要求:集積IEEE 802.1Xサプリカントは、(APに認証によってプロキシ認証サーバとEAP認証を完了します)WPA-EAP場合:マスターキーは、IEEE 802.1X SupplicantIf WPA-PSKから受信された:マスターセッションkeywpa_supplicantは、オーセンティケータ(AP)とWPA 4ウェイハンドシェイクおよびグループキーハンドシェイクを完了するとwpa_supplicantのは、PSKを使用しています。WPA2は、4ウェイHandshake.wpa_supplicantに最初のグループキーハンドシェイクを統合しましたが、送信および受信することができ、ユニキャストとbroadcastnormalデータパケットの暗号化キーを設定します

第二に、移植片と無線LAN駆動ステップwpa_supplicantの

1.コピーHALソースベンダーは、次のディレクトリにハードウェアを提供し、Makefileを修正します

たとえば、次のようにrealteck、ブロードコム、TI、qcomm好き。

2.変更ANDROID_SDK /デバイス/ <soc_vendor_name> / <board_nameに> BoardConfig.mkに/ディレクトリ

例えば:

BOARD_WIFI_VENDOR:= Realtekの
ifeq($(BOARD_WIFI_VENDOR)、リアルテック)
WPA_SUPPLICANT_VERSION:= VER_0_8_X
BOARD_WPA_SUPPLICANT_DRIVER:= NL80211
CONFIG_DRIVER_WEXT:= Y
BOARD_WPA_SUPPLICANT_PRIVATE_LIB:= lib_driver_cmd_rtl
BOARD_HOSTAPD_DRIVER:= NL80211
BOARD_HOSTAPD_PRIVATE_LIB:= lib_driver_cmd_rtl
BOARD_WLAN_DEVICE:= rtl8192cu
#BOARD_WLAN_DEVICE:= rtl8192du
#BOARD_WLAN_DEVICE:= rtl8192ce
#BOARD_WLAN_DEVICE:= rtl8192de
#BOARD_WLAN_DEVICE:= rtl8723as
#BOARD_WLAN_DEVICE:= rtl8723au
#BOARD_WLAN_DEVICE:= rtl8189es
#BOARD_WLAN_DEVICE:= rtl8723bs
#BOARD_WLAN_DEVICE:= rtl8723bu
WIFI_DRIVER_MODULE_NAME:= "無線LAN"
WIFI_DRIVER_MODULE_PATH:= "/system/lib/modules/wlan.ko"
WIFI_DRIVER_MODULE_ARG:= "ifnameの= wlan0 if2name = p2p0"
ENDIF

3.変更ANDROID_SDK /デバイス/ <soc_vendor_name> / <board_nameに> init.xxx.rcに/ディレクトリ

例えば:

サービスrtw_suppl_con /システム/ binに/ wpa_supplicantの\
-ip2p0 -Dnl80211 -c /データ/ miscの/無線LAN / p2p_supplicant.conf \
-e /データ/ miscの/無線LAN / entropy.bin -N \
-iwlan0 -Dnl80211 -c /データ/その他/ WIFI / wpa_supplicant.confの\
-O /データ/ miscの/無線LAN /ソケット\
-g @アンドロイド:wpa_wlan0
クラスメイン
ソケットは660無線LAN無線LAN DGRAM wpa_wlan0
無効に
ワンショットを

サービスrtw_suppl /システム/ binに/ wpa_supplicantの\
-iwlan0 -Dnl80211 -c /データ/ miscの/無線LAN / wpa_supplicant.conf \
-O /データ/ miscの/無線LAN /ソケット\
-e /データ/ miscの/ WIFI / entropy.bin
-グラム@アンドロイド:wpa_wlan0
クラスメイン
ソケット660無線LAN無線LANをDGRAM wpa_wlan0は
無効

サービスdhcpcd_wlan0 /システム/ binに/ dhcpcdを-aABDKL
クラスのメイン
無効
ワンショット

サービスdhcpcd_p2p /システム/ binに/ dhcpcdを-aABKL
クラスのメイン
無効
ワンショット

サービスiprenew_wlan0 /システム/ binに/ dhcpcdを-n
クラスのメイン
無効
ワンショット

サービスiprenew_p2p /システム/ binに/ dhcpcdを-n
クラスのメイン
無効
ワンショット

4.変更ANDROID_SDK /デバイス/ <soc_vendor_name> / <board_nameに> device.mkディレクトリ/

例えば:

PRODUCT_COPY_FILES + = \
フレームワーク/ネイティブ/データは/ etc / android.hardware.wifi.xml:システムの/ etc /パーミッション/ android.hardware。
wifi.xml
PRODUCT_COPY_FILES + = \
フレームワーク/ネイティブ/データは/ etc / android.hardware.wifi.direct.xml:システムの/ etc /パーミッション/ android.hard
ware.wifi.direct.xml
PRODUCT_PROPERTY_OVERRIDES + = \
wifi.interface = wlan0

5.変更ANDROID_SDK /フレームワーク/ベース/コア/ RESの/のRES /値/ config.xmlに、無線LANネットワークの構成プロパティ

配列、翻訳= "false"の名前= "networkAttributes"> "無線LAN、1,1,1、-1、真の" "ブルートゥース、7,7,0、-1、真の"「イーサネット、9,9,2、 - 1、真の"</ストリング] 配列>

配列、翻訳= "false"の名前= "radioAttributes"> "1,1" "7,1" "9,1" </ストリング] 配列>

配列、翻訳= "false"の名前= "config_tether_wifi_regexs"> "wlan0" </ストリング] 配列>

アレイの並進= "false"の名= "config_tether_upstream_types"> 1 9 </ INTEGER- アレイ>

下ANDROID_SDK /外部/ wpa_suppliant_8ディレクトリを交換する6. wpa_supplicantのベンダー

7.ロードするように構成された駆動モードモジュールを駆動する無線LANをコンパイルし、BoardConfig.mk、一貫した内部に設けられたファイルパスに格納されたKO KOファイルを生成し、駆動モジュール名を確認

第三に、一般的なデバッグコマンドやトリック

1.デバッグコマンド

     これは、動作状態wpa_supplicantのコマンドによって検出することができるwpa_cli

  • PING:ハートビートのコマンド。クライアントは、それがWPASが正常に動作しているかを決定するために使用します。WPASは「PING」コマンドを受け取った後、「PONG」を返信する必要があります。
  • MIB:MIBのクライアントは、このコマンドを使用して、デバイスに関する情報を取得します。
  • STATUS:コマンドを使用して、ジョブステータスを取得するWPASクライアント。
  • ADD_NETWORK:新しいワイヤレスネットワークWPASを追加します。これは、この新しいワイヤレスネットワークID(0から始まる)を返します。注:このネットワークIDは非常に重要な、クライアントは、彼らがそれを介して無線ネットワークを操作したい示すために従います。
  • SET_NETWORK <ネットワークID> <変数> <値>:ネットワークIDは、無線ネットワークのIDです。このコマンドは、ワイヤレスネットワークを特定するための情報を設定します。どこパラメータ名として変数、値はパラメータの値です。
  • ENABLE_NETWORK <ネットワークID>:ワイヤレスネットワークを有効にします。このコマンドは、最終的にWPASは、無線ネットワークに参加するための一連の作業を開始しましたプロンプトが表示されます。

2.トラブルシューティングのヒント

    いくつかの増加は、命令の流れを追跡するために発行したwpa_supplicantの中にログインすることができます。

    wpa_supplicantのプロセスが実行されているチェックするinit.svc.wpa_servernameは、getPropコマンドライン入力端子で。

    wpa_supplicantのアップ後、正常またはwpa_cliのping wpa_cli状態であるwpa_suppliantチャンネルを見ることによって検出することができます。

    ctrl_interfaceで/system/etc/wifi/wpa_supplicant.confと/data/misc/wifi/wpa_supplicant.confが正しいか確認してください。

    DEV /ソケット/ wpa_wlan0、/データ/ miscの/無線LAN /ソケット/ wlan0、/データ/ miscの/無線LAN /ソケット/ P2P /ことを確認し、正常に作成wpa_ctrl_ *ピア。

    成功裏にドライバモジュールlsmodのかどうかをチェックすることによってロードされます。

    閲覧/ SYSが/ノードは、ロード・プロセスでOKクラス/のRFKill /ディレクトリをドライブ*のRFKillを生成するかどうかを決定します。

おすすめ

転載: www.cnblogs.com/cute/p/11430372.html