日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android环境下通过C框架层控制WIFI【转】

發布時間:2025/5/22 Android 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android环境下通过C框架层控制WIFI【转】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文轉載自:https://blog.csdn.net/edw200/article/details/52192631

本人是從事Linux嵌入式開發的,安卓wifi控制在安卓JAVA層已經做得非常成熟了,但我需要寫一個控制wifi的程序,需要寫一堆JAVA,我本是就不懂JAVA,所以決定跳過JAVA框架和應用層,直接從C框架層入手。

?

1.Android WIFI框架

?

WIFI的基本架構 :

1、wifi用戶空間的程序和庫:

??????external/wpa_supplicant/

??????生成庫libwpaclient.so和守護進程wpa_supplicant

2、hardware/libhardware_legary/wifi/是wifi管理庫

3、JNI部分:

??????frameworks/base/core/jni/android_net_wifi_Wifi.cpp

4、JAVA部分:

??????frameworks/base/services/java/com/android/server/

??????frameworks/base/wifi/java/android/net/wifi/

5、WIFI Settings應用程序位于:

??????packages/apps/Settings/src/com/android/settings/wifi/

6、WIFI?驅動模塊??wlan.ko

??????wpa_supplicant通過wireless_ext?接口和驅動通信

7、WIFI?硬件模塊

2.Hardware層

2.1.加載卸載驅動

?

加載:insmod /system/lib/modules/bcmdhd.ko ?iface_name=wlan0

卸載:rmmod bcmdhd

?

2.2.啟動wpa_supplicant

執行setprop ctl.start wpa_supplicant

說明:執行上面命令時,安卓系統會調用到/init.macallan.rc下語句:

service wpa_supplicant /system/bin/wpa_supplicant \

????-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \

????-I/system/etc/wifi/wpa_supplicant_overlay.conf \

????-O/data/misc/wifi/sockets \

????-e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0

????# we will start as root and wpa_supplicant will switch to user wifi

????# after setting up the capabilities required for WEXT

????# user wifi

????# group wifi inet keystore

????class main

????socket wpa_wlan0 dgram 660 wifi wifi

????disabled

? ? oneshot

?

為防止wpa_supplicant已經啟動導致wifi無法正常工作,這里之后先關閉一下wpa_supplicant再啟動。

?

2.3.關閉wpa_supplicant

執行setprop ctl.stop wpa_supplicant

詳細查看Wifi.c (\android\hardware\libhardware_legacy\wifi)

?

2.4.搜索AP

執行wpa_cli ?-iwlan0 ?IFNAME=wlan0 ?scan?開始搜索

執行wpa_cli ?-iwlan0 ?IFNAME=wlan0 ?scan_result?顯示搜索結果

說明:這句命令和標準的(Linux系統)wpa_supplicant有區別,標準的是執行:

wpa_cli ?-iwlan0 ?scan?因為安卓系統的wpa_supplicant工具是剪裁過的。

搜索結果如下:

bssid ? ? ? ? ? ? ? ?/ frequency ?/ signal level ??????/ flags ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? / ssid

MAC地址 ???????頻率 ?信號 ?????加密模式 ? ? ? ? ? ? ? ? ? ? ? ?AP名稱 ?

30:fc:68:19:57:70 ?2462 ?-41 ??[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] ???aaaa

30:fc:68:72:36:d2 ?2462 ?- 44 ?[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] ?TP-LINK_dd

b8:20:e7:00:32:9e ?2437 ?-46 ?[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] ??ccc

b8:20:e7:00:0c:ce ?2422 ?-46 ??[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] ??dd

e0:05:c5:ac:6d:fc ??2472 ?-49 ??[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] ??Tee

14:cf:92:6e:1d:5e ?2437 ??-50 ?[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] ???Xdaf

bc:46:99:73:1d:42 ?2412 ?-80 ??[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] ???Testdfege

00:0c:43:30:52:a8 ??????2437 ???-43 ????[WEP][ESS] ?????G5000_JOYKOLN

b8:20:e7:00:0a:62 ??????2437 ???-65 ????[WEP][ESS] ?????G5000_JOYKOLN

28:f0:76:18:c1:16 ??????2462 ???-48 ????[ESS] ??iMacQIU\xe7\x9a\x84iMac

?

2.5.wpa_supplicant.conf配置文件

位于/data/misc/wifi/wpa_supplicant.conf ??

????

沒有啟動wifi時(wpa_supplicant沒有開啟)文件顯示:

ctrl_interface=/data/misc/wifi/sockets

disable_scan_offload=1

update_config=1

device_name=macallan

manufacturer=NVIDIA

model_name=Macallan

model_number=Macallan

serial_number=JKD01V20030000022

device_type=10-0050F204-5

config_methods=physical_display virtual_push_button

p2p_disabled=1

?

開啟wifi時文件顯示:

ctrl_interface=/data/misc/wifi/sockets

disable_scan_offload=1

update_config=1

device_name=macallan

manufacturer=NVIDIA

model_name=Macallan

model_number=Macallan

serial_number=JKD01V20030000022

device_type=10-0050F204-5

config_methods=physical_display virtual_push_button

p2p_disabled=1

?

network={

????????ssid="JET-1"

????????psk="abcd1234"

????????key_mgmt=WPA-PSK

????????priority=1

}

?

2.6.重啟wpa_supplicant

執行wpa_cli ?-iwlan0 ?IFNAME=wlan0 ?reconfigure

說明:當初始化啟動wpa_supplicant時,因還沒有連接AP信息,必須通過scan_result命令獲取到當前搜索的AP,并自定AP寫入配置文件中,再執行reconfigure命令重啟wpa_supplicant。

?

2.7.啟動DHCP和啟動關閉網絡

在啟動wpa_supplicant之前需要啟動一下網絡

執行netcfg wlan0 up

啟動DHCP,當已經連接到AP時,這里需要設置一下IP,一般情況下是使用動態IP的

執行netcfg wlan0 dhcp

關閉wpa_supplicant后這里需要同時關閉網卡網絡

執行netcfg wlan0 down

?

這樣一個流程就完成了。當然這里還需要編寫一個小程序,以搜索所有的AP信息,并把需要連接的AP信息,并寫入配置文件。

?

這種方法是繞過安卓JAVA框架層和JAVA應用層,直接和C框架層通訊的控制WIFI功能例子,這樣可以完全讓用戶可以自己控制wifi功能,與有線網卡運用自動切換功能。

版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/edw200/article/details/52192631 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Android环境下通过C框架层控制WIFI【转】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。