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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android init.rc 服务启动不成功

發(fā)布時間:2023/12/20 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android init.rc 服务启动不成功 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Android init.rc 服務啟動不成功

問題

在開發(fā)過程中發(fā)現(xiàn)一個問題,我們需要在開機的時候判斷硬件版本號去啟動服務,

服務的名字是ledservice和ledservice4,但是發(fā)現(xiàn)每次燒錄完固件后,服務啟動不

成功,需要再復位重啟一次,服務才可以正常啟動。

日志如下

[ 5.328699] init: Service 'logd-reinit' (pid 257) exited with status 0 [ 5.329681] init: Starting service 'ledservice'... [ 5.331442] init: Starting service 'exec 2 (/system/bin/vdc)'... [ 5.353605] init: Service 'exec 2 (/system/bin/vdc)' (pid 269) exited with status 0 [ 5.355534] init: Service 'ledservice' is being killed... [ 5.364499] init: Service 'ledservice' (pid 268) killed by signal 9 [ 5.364531] init: Service 'ledservice' (pid 268) killing any children in process group [ 5.365442] init: Not bootcharting.

?

分析

1、我們自己剛開始修改的代碼如下

service ledservice /system/bin/ledserviceclass mainconsoledisabledonrestartservice ledservice4 /system/bin/ledservice4class mainconsoledisabledonrestarton property:ro.boot.wzb210_audio_hw_rev=3start ledserviceon property:ro.boot.wzb210_audio_hw_rev=4start ledservice4on property:ro.boot.wzb210_audio_hw_rev=5start ledservice4

第一次實驗

剛開始一直擔心是因為我們服務本身有問題,所以在我們的兩個服務里面不做任何操作,直接打一個Log

實驗的結果還是有問題,服務啟動不成功。

?

第二次試驗

后面我考慮到有可能是因為增加了版本號的原因,然后我把代碼修改成下面,結果還是服務啟動不成功

service ledservice /system/bin/ledservice class main console disabled onrestartstart ledservice

?

最后

我考慮到android 的adbd也是刷機就要起來的,然后我參照了adbd的編寫,看到了差異,修改如下,服務可以正常啟動

參照adbd,把class main改成class core就可以了。 service ledservice /system/bin/ledservice - class main + class core console disabled onrestart

?

class core 和class main有何不同

在分析Kitkat加密功能的時候,在一些資料上看到一句話“對于加密后的系統(tǒng),重啟后,進入到輸入密碼界面,此時并沒有完全加載Android系統(tǒng),僅僅加載必要的服務”

那么這個必要的服務又是指的是那些服務呢?

在解答這個問題前我們先區(qū)分一下class core ,class main, class late_start。

這三個“class”,只是標識這個服務的類型是哪一個,然后通過調用class_start, class_reset, class_stop等命令的時候,來統(tǒng)一操作同一類的服務。

舉個例子,從system/core/rootdir/init.rc文件中搜索“class main”可以搜到許多,例如有netd, ril-deamon服務被標識為class main,那么當我們調用class_start main命令時,所有標識為main的服務都會被啟動,這里的netd ril-deamon就會被啟動。對于core, late_start類的服務也是這樣的。

這里以源代碼中三星的manta為例進行演示:

class core 的服務如下:

?

序號service名稱所屬文件命令bin文件位置
1watchdogdinit.manta.rc/sbin/watchdogd
2watchdogdinit.recovery.manta.rc/sbin/watchdogd
3setup_fsinit.smdk5250.rc/system/bin/setup_fs
4ueventdinit.rc/sbin/ueventd
5logdinit.rc/system/bin/logd
6healthdinit.rc/sbin/healthd
7consoleinit.rc/system/bin/sh
8adbdinit.rc/sbin/adbd
9servicemanagerinit.rc/system/bin/servicemanager
10voldinit.rc/system/bin/vold

可以看到,core服務都是系統(tǒng)最基本的服務,只要core服務全部啟動,手機此時是可以運行的,但是卻看不到東西,原因是framework沒有啟動。此時啟動的都是C,C++的進程。此時是不能打電話的,因為ril-deamon沒有啟動

?

?

class main的服務如下:

?

序號service名稱所屬文件命令bin文件位置
1p2p_supplicantinit.manata.rc/system/bin/wpa_supplicant
2wpa_supplicantinit.manata.rc/system/bin/wpa_supplicant
3dhcpcd_wlan0init.manata.rc/system/bin/dhcpcd
4dhcpcd_p2pinit.manata.rc/system/bin/dhcpcd
5dhcpcd_eth0init.manata.rc/system/bin/dhcpcd
6dhcpcd_bt-paninit.manata.rc/system/bin/dhcpcd
7dhcpcd_bt-paninit.manata.rc/system/bin/dhcpcd
8iprenew_p2pinit.manata.rc/system/bin/dhcpcd
9iprenew_eth0init.manata.rc/system/bin/dhcpcd
10iprenew_bt-paninit.manata.rc/system/bin/dhcpcd
11gpsdinit.manata.rc/system/vendor/bin/gpsd
12mobicoreinit.manata.rc/system/bin/mcDriverDaemon
13bugreportinit.manata.rc/system/bin/dumpstate
14netdinit.rc/system/bin/netd
15debuggerdinit.rc/system/bin/debuggerd
16debuggerd64init.rc/system/bin/debuggerd64
17ril-daemoninit.rc/system/bin/rild
18surfaceflingerinit.rc/system/bin/surfaceflinger
19drminit.rc/system/bin/drmserver
20mediainit.rc/system/bin/mediaserver
21bootaniminit.rc/system/bin/bootanimation
22installdinit.rc/system/bin/installd
23flash_recoveryinit.rc/system/etc/install-recovery.sh
24racooninit.rc/system/bin/racoon
25mtpdinit.rc/system/bin/mtpd
26keystoreinit.rc/system/bin/keystore
27dumpstateinit.rc/system/bin/dumpstate
28sshdinit.rc/system/bin/start-ssh
29mdnsdinit.rc/system/bin/mdnsd
30zygoteinit.zygote32_64.rc/system/bin/app_process
31zygoteinit.zygote32.rc/system/bin/app_process
32zygoteinit.zygote64.rc/system/bin/app_process64

?

?

可以看到main的服務相對多一些,看到zygote了吧,由此可見main服務大部分是建立在java層或者與java層息息相關的系統(tǒng)服務。

?

class late_start 的服務如下:

?

序號service名稱所屬文件命令bin文件位置
1sdcardinit.manta.rc/system/bin/sdcard
2sdcardinit.msmdk5250.rc/system/bin/sdcard

?

?

在看Android手機加密的資料的時候,看到late_start服務,以為有很多呢.,但是一搜索才知道,坑爹啊,只有一個。

?

由以上的簡單分析,再來分析Kitkat手機加密功能的流程,和加密后的啟動過程,就更加清晰了。

?

其實手機加密完畢后,重啟手機,進入輸入密碼界面,此時系統(tǒng)的core,main服務都已經(jīng)啟動,只有l(wèi)ate_start服務沒有啟動,可以直接無視late_start。這樣說來,此時手機的系統(tǒng)服務和正常狀態(tài)下是一樣的。我們想利用系統(tǒng)服務做什么都行啊。^_^

?

那么為什么在該界面只能做很少的事情呢?

例如可以撥打緊急呼救號碼,彈出輸入法,顯示設置中的CryptKeeper界面,可以鎖屏。但是卻玩不了游戲,無法調用我們已經(jīng)設置的“百度輸入法”,而是使用很丑的Ladin輸入法。鎖屏也是系統(tǒng)默認的,撥號的界面也是系統(tǒng)原生的等等問題。這些問題,將在下一篇文章《Kitkat的加密功能對應用做了什么?》中解答

?

posted on 2018-09-21 14:39 公眾號;嵌入式Linux 閱讀(...) 評論(...) 編輯 收藏

總結

以上是生活随笔為你收集整理的Android init.rc 服务启动不成功的全部內容,希望文章能夠幫你解決所遇到的問題。

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