国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Hi3516如何連接Wifi(二)

系統(tǒng)
文章由鴻蒙社區(qū)產(chǎn)出,想要了解更多內(nèi)容請前往:51CTO和華為官方戰(zhàn)略合作共建的鴻蒙技術(shù)社區(qū)https://harmonyos.51cto.com

[[390308]]

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

書承上回(Hi3516如何連接Wifi(一)),上一篇聊了一下怎樣在Hi3516中用wpa_supplicant連接到Wifi熱點,本文講一下如何通過編程實現(xiàn)。

一、總體思路

首先我們需要搞清楚Hi3516中Wifi的相關(guān)模塊,以及他們之間的關(guān)系,其實和linux是很相似的。首先,我們需要運行一個的Daemon,也就是上文提到的wpa_supplicant,負責對網(wǎng)卡的硬件調(diào)用,比如連接wifi、斷開wifi、啟動熱點等等。這個Daemon開放一個socket端口,外部程序可以通過本地連接向其發(fā)送指令實現(xiàn)間接對wifi的調(diào)用,這無疑是給我們提供了很大的便利,不用從底層重新造輪子了。

鴻蒙OS代碼中,有一個示例,在//applications/sample/camera/communication/wpa_cli,實現(xiàn)了連接Daemon、掃描熱點、連接熱點等功能。

現(xiàn)在方案就很明確了,第一啟動Daemon,第二向Daemon發(fā)送命令。下面我們就來詳細分析如何實現(xiàn)。

二、啟動Daemon

查看代碼//applications/sample/camera/communication/wpa_supplicant/src/wpa_sample.c,找到main函數(shù),發(fā)現(xiàn)它只做了一件事情,那就是調(diào)用pthread_create創(chuàng)建了一個線程,線程執(zhí)行的函數(shù)是ThreadMain。而ThreadMain也只做了一件事情,那就是加載/usr/lib/libwpa.so,然后執(zhí)行了其中的wpa_main函數(shù),同時把命令行參數(shù)傳遞了進去。而wpa_main函數(shù)具體調(diào)用網(wǎng)卡就是通過hdf框架向內(nèi)核態(tài)發(fā)送消息了,這里就不再贅述。

  1. static void* ThreadMain() 
  2.     printf("[WpaSample]init wpa_supplicant.\n"); 
  3.  
  4.     void *handleLibWpa = dlopen("/usr/lib/libwpa.so", RTLD_NOW | RTLD_LOCAL); 
  5.     if (handleLibWpa == NULL) { 
  6.         printf("[WpaSample]dlopen libwpa failed.\n"); 
  7.         return NULL
  8.     } 
  9.     int (*func)(intchar **) = NULL
  10.     func =  dlsym(handleLibWpa, "wpa_main"); 
  11.     if (func == NULL) { 
  12.         dlclose(handleLibWpa); 
  13.         printf("[WpaSample]dlsym wpa_main failed.\n"); 
  14.         return NULL
  15.     } 
  16.     int ret = func(g_wpaArgc, g_wpaArg); 
  17.  
  18.     printf("[WpaSample]run wpa_main failed, ret:%d.\n", ret); 
  19.     for (int i = 0; i < g_wpaArgc; i++) { 
  20.         printf("[WpaSample]arg %d:%s.\n", i, g_wpaArg[i]); 
  21.     } 
  22.  
  23.     if (dlclose(handleLibWpa) != 0) { 
  24.         printf("[WpaSample]dlclose libwpa failed.\n"); 
  25.         return NULL
  26.     } 
  27.     return NULL
  28.  
  29. int main(int argc, char *argv[]) 
  30.     g_wpaArgc = argc; 
  31.     for (int i = 0; i < g_wpaArgc; i++) { 
  32.         g_wpaArg[i] = argv[i]; 
  33.     } 
  34.  
  35.     int ret = pthread_create(&g_wpaThread, NULL, ThreadMain, NULL); 
  36.     if (ret != 0) { 
  37.         printf("[WpaSample]create thread failed error:%s.\n", strerror(ret)); 
  38.         return 1; 
  39.     } 
  40.     pthread_join(g_wpaThread, NULL); 
  41.     return 0; 

我們要做的就是仿照main函數(shù)寫自己的代碼,把參數(shù)固定就可以了。我們的參數(shù)是這樣的:g_wpaArg[0]="",g_wpaArg[1]="-iwlan0",g_wpaArg[2]="-c/etc/wpa_supplicant.conf",其中第0個參數(shù)是可執(zhí)行文件的名稱,這里可以隨意填或者直接留空。

如果只是想啟動Daemon,不連接到任何Wifi熱點,那這里第二個參數(shù)-c指向的.conf文件中,不應該包含ssid和psk,也就是直接使用系統(tǒng)自帶的默認conf就可以。我們在上一篇文章中修改了wpa_supplicant.conf,加入了ssid和psk。這里做一個改進,原wpa_supplicant.conf保持不變,新增一個wpa_supplicant_(你的熱點名稱).conf,加入ssid和psk,然后修改//applications/sample/camera/communication/wpa_supplicant/BUILD.gn,添加需要copy的文件:

  1. copy("config2") { 
  2.     sources = [ 
  3.         "config/wpa_supplicant_(xxx).conf" 
  4.     ] 
  5.     outputs = [ 
  6.         "$root_out_dir/etc/wpa_supplicant_(xxx).conf" 
  7.     ] 

這樣我們wpa_supplicant就有兩種操作了,只啟動Daemon,和啟動Daemon且連接到指定熱點,只需要改變-c指定的conf文件。

補充一下,我曾嘗試過使用system函數(shù)執(zhí)行wpa_supplicant的方式啟動Daemon,但是失敗了,原因是鴻蒙暫時還不支持system函數(shù)。具體可以看一下system的代碼實現(xiàn)\\third_party\musl\src\process\system.c

  1. int system(const char *cmd) 
  2.     pid_t pid; 
  3.     sigset_t old, reset; 
  4.     struct sigaction sa = { .sa_handler = SIG_IGN }, oldint, oldquit; 
  5.     int status = -1, ret; 
  6.     posix_spawnattr_t attr; 
  7.  
  8.     unsupported_api(__FUNCTION__);//不受支持的api 
  9. ... 

另外,嘗試了用fork創(chuàng)建線程也是可行的。

還有一個文件權(quán)限問題。如果你用上述方法編寫一個控制臺程序來運行是沒有問題的,無非就是重寫了一個sample里的wpa_supplicant。但是當你在hap中通過ace調(diào)用時就出現(xiàn)了錯誤:

  1. OHOS # 01-01 00:40:03.661 17 59 I 03900/ACE: InitWifi invoked! 
  2. [WpaSample]init wpa_supplicant. 
  3. 01-01 00:40:03.661 17 59 I 03900/ACE: InitDaemon2 
  4. Successfully initialized wpa_supplicant 
  5. [HDF:E/hdf_syscall_adapter]Open file node failed: /dev/hdfwifi 
  6. [HDF:E/HDF_LOG_TAG]WpaMsgServiceInit: fail to get remote service! 

看樣子是打開/dev/hdfwifi失敗了,這個問題我研究了很久,最后意識到hap的執(zhí)行用戶可能和shell不同,shell是root用戶在執(zhí)行,而hap肯定不是root在執(zhí)行,這導致了權(quán)限不足。我看了一下/dev/hdfwifi的權(quán)限

  1. OHOS # ls /dev 
  2. Directory /dev: 
  3. (略) 
  4. -rw-rw-r-- 0        u:0     g:99    hdfwifi 
  5. (略) 

其他用戶是r權(quán)限,顯然我們也需要w權(quán)限。執(zhí)行chmod 0666 /dev/hdfwifi就可以了,但燒寫后通過連接shell做這件事很不方便,最好能自動化。

這里我們可以借助鴻蒙系統(tǒng)初始化階段執(zhí)行的job來實現(xiàn)我們的目的,在\\base\startup\services\init_lite\src\main.c負責執(zhí)行系統(tǒng)啟動后的任務,包括各種job和service,job分為pre-init,init,post-init三個階段。具體要執(zhí)行哪些命令,都寫在\\vendor\huawei\camera\init_configs\init_liteos_a_3516dv300.cfg配置文件中,我們要做的就是在job中找到post-init,然后在cmds添加我們的指令chmod 0666 /dev/hdfwifi

  1.     "jobs" : [{ 
  2.             "name" : "pre-init"
  3.             "cmds" : [ 
  4.                 "mkdir /storage/data/log"
  5.                 (略) 
  6.             ] 
  7.         }, { 
  8.             "name" : "init"
  9.             "cmds" : [ 
  10.                 "start shell"
  11.                 (略) 
  12.             ] 
  13.         }, { 
  14.             "name" : "post-init"
  15.             "cmds" : [ 
  16.                 "chown 0 99 /dev/dev_mgr"
  17.                 "chown 0 99 /dev/hdfwifi"
  18.                 "chmod 0666 /dev/hdfwifi",//這里 

下一篇再將如何連接Daemon,真正實現(xiàn)連接Wifi,以及如何通過ACE在UI界面中操作連接Wifi。

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-04-09 09:45:21

鴻蒙HarmonyOS應用

2021-03-16 09:49:16

鴻蒙HarmonyOS應用

2021-07-09 14:20:23

鴻蒙HarmonyOS應用

2022-04-15 14:45:49

Hi3516系統(tǒng)類型燒錄鴻蒙

2021-11-09 15:28:41

鴻蒙HarmonyOS應用

2021-05-25 14:47:43

鴻蒙HarmonyOS應用

2021-12-03 09:50:39

鴻蒙HarmonyOS應用

2021-06-25 09:28:46

鴻蒙HarmonyOS應用

2021-09-24 10:20:42

鴻蒙HarmonyOS應用

2021-07-21 09:58:50

鴻蒙HarmonyOS應用

2021-07-19 15:34:05

鴻蒙HarmonyOS應用

2021-10-09 10:12:39

鴻蒙HarmonyOS應用

2021-03-02 14:30:20

鴻蒙HarmonyOS應用

2022-02-16 16:01:02

Hi3516開發(fā)板鴻蒙

2021-08-06 15:09:22

鴻蒙HarmonyOS應用

2021-07-07 09:45:20

鴻蒙HarmonyOS應用

2020-10-16 09:50:37

Hi3861WiFi熱點

2022-03-14 15:26:59

Hi3516Ark子系統(tǒng)鴻蒙

2021-07-05 09:35:36

鴻蒙HarmonyOS應用

2021-07-08 16:16:59

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術(shù)棧公眾號

久久久久久久久免费视频| 免费白浆视频| 久久国产日本精品| 丁香五月网久久综合| 欧美一区不卡| 久久视频在线观看中文字幕| 日韩视频免费| 欧美激情亚洲天堂| 91麻豆产精品久久久久久| 无人在线观看的免费高清视频 | 日本精品中文字幕| 成人情趣视频| 欧美一卡2卡3卡4卡无卡免费观看水多多| 国产精品一区二区黑丝| 黄色网址入口| 欧美日韩国产天堂| 高清不卡亚洲| 热久久免费国产视频| 国产精品大片| 国产精品igao| 欧美亚洲国产一区在线观看网站| 蜜桃视频在线观看播放| 97在线看福利| 蜜桃视频一区二区| 亚洲图区欧美| 精品国产欧美一区二区五十路 | 久久av高潮av| 欧美一区二区三区成人| 免费看日产一区二区三区| 97欧洲一区二区精品免费| 国产午夜久久久久| 青青在线视频| 亚洲一区二区中文字幕| 91啪亚洲精品| 免费在线国产视频| 国产精品情侣自拍| 91欧美一区二区| 国产精品99久久久久久董美香| 亚洲xxxxx性| 国产精品美女久久久久高潮| 国产盗摄在线观看| 国产精品扒开腿做爽爽爽男男 | 日本美女在线中文版| 国产精品第一第二| 久久精品人人做人人爽人人| 99riav视频在线观看| 国产一区二区中文字幕免费看| 一区av在线播放| 国产精品网址| 欧美丰满熟妇xxxxx| 色综合天天综合网国产成人网| 精品亚洲porn| 久草在线视频网站| 在线免费观看一区二区三区| 欧美日韩美少妇| 老司机午夜精品视频在线观看| 国产精品秘入口| 97免费资源站| 欧美一区中文字幕| 日产欧产美韩系列久久99| 91.xxx.高清在线| 视频在线99re| 亚洲欧美国产另类| 国产欧美综合在线| 日韩精选在线| 电影av一区| 亚洲第一导航| 久久伊人色综合| 中文字幕一区在线| 欧美黄色aaaa| 性国裸体高清亚洲| 无套内精的网站| 91文字幕巨乱亚洲香蕉| 欧美精品在线视频| 国产做a爰片久久毛片| 日韩欧美另类一区二区| 日本精品一区二区三区四区| 国产精品一二三视频| 色诱视频网站一区| 99久久久国产精品| 欧美大人香蕉在线| aaa在线播放视频| 丁香花高清电影在线观看完整版| 国产亚洲情侣一区二区无| 亚洲欧美日韩爽爽影院| 亚洲一区二区在线免费观看视频| 好看的亚洲午夜视频在线| 四虎地址8848精品| 视频一区二区在线播放| 成人黄色大片网站| 成人午夜两性视频| 成人av电影免费在线播放| 一区二区三区四区五区在线| 黄毛片在线观看| 日韩写真福利视频在线| 久在线观看视频| 日本黄网免费一区二区精品| 国内精品久久影院| 亚洲成avwww人| 日韩一区二区三区四区五区六区| 亚洲国产色一区| 欧美极品另类videosde| 亚洲欧美日韩视频二区| 国产综合在线观看| 自拍偷拍21p| 日本wwwcom| 日韩三级av在线播放| 欧美男男青年gay1069videost| 亚洲欧美国产77777| 国产亚洲欧美一区在线观看| 人人狠狠综合久久亚洲| 国内精品久久久久久久97牛牛 | 国产精品毛片高清在线完整版| 国产精品综合二区| 日韩电影免费在线| 日韩**一区毛片| 国产精品亚洲专一区二区三区 | 少妇一级淫免费放| 成人性生交大片免费看视频r| 黑鬼大战白妞高潮喷白浆| jizzjizz国产精品喷水| 免费看毛片的网址| 日韩一级在线免费观看| 91香蕉视频导航| 天天激情综合| 亚洲无限乱码一二三四麻| www.av在线播放| av人人综合网| 日本成人在线网站| 日韩精品视频一区二区三区| 奇米777国产一区国产二区| 亚洲综合小说图片| 成人3d精品动漫精品一二三| 97精品在线| 韩日欧美一区二区三区| 欧美韩日亚洲| 国产亚洲精品美女久久| 亚洲+变态+欧美+另类+精品| 视频一区国产视频| 久久天天做天天爱综合色| 亚洲综合区在线| 69p69国产精品| 国外色69视频在线观看| 国产精品麻豆免费版| 日韩小视频在线播放| 中文av在线播放| 欧美另类激情| 午夜日韩电影| 国产视频一区二区在线| 欧美日韩国产首页| 久久综合88中文色鬼| 国产自产精品| 99精品视频播放| √天堂8在线网| 中文字幕伦av一区二区邻居| 黑人精品欧美一区二区蜜桃| 亚洲成人自拍网| 国产亚洲欧洲高清| 精品国产免费久久久久久尖叫| 91视频 -- 69xx| av有码在线观看| 国产精品久久久久久久| 久久一夜天堂av一区二区三区| 在线不卡欧美精品一区二区三区| 欧美成人精品不卡视频在线观看| 国产久一道中文一区| 福利资源在线久| 国产精选久久| 国产成人在线观看免费网站| 欧美日韩国产a| 亚洲永久免费观看| 亚洲国产日韩欧美在线观看| 在线毛片观看| 日本亚洲免费观看| 欧美日韩性生活视频| 91久久精品国产| 国产精品99久久免费黑人人妻| 国产日韩另类视频一区| 日韩激情在线观看| 欧美一级二级在线观看| 好吊色欧美一区二区三区视频| 久cao在线| 麻豆久久久久久久| 欧美日韩亚洲高清一区二区| 国产精品无码专区在线观看| 一不卡在线视频| 久久综合国产| 欧美午夜视频一区二区| 91久久大香伊蕉在人线| 在线观看av网| 性娇小13――14欧美| 欧美一区二区在线免费播放 | 成人激情小说乱人伦| 亚洲片av在线| 国产精品一区二区免费在线观看| 视频精品一区| 亚洲午夜视频在线| 天天人人精品| av男人一区| 欧美系列一区二区|