Android DHCP 啟動分析

2021-06-22 19:50:28 字數 1633 閱讀 7257

一、dhcp client 和 dhcpcd server直接的資訊互動:

client 和server 通過property_get/set 共享記憶體來共享資訊。

property_get/set(key,value),儲存在共享記憶體中,系統中的各個程序可以通過property_service訪問。

二、dhcp 客戶端:

啟動dhcp 請求:

原始碼:gingerbread/system/core/libnetutils/dhcp_utils.c

int dhcp_do_request(const char *inte***ce, in_addr_t *ipaddr, in_addr_t *gateway, in_addr_t *mask, in_addr_t *dns1, in_addr_t *dns2, in_addr_t *server, uint32_t  *lease)

else }

static void fill_ip_info(const char *inte***ce, in_addr_t *ipaddr, in_addr_t *gateway, in_addr_t *mask, in_addr_t *dns1, in_addr_t *dns2, in_addr_t *server, uint32_t  *lease)

三、dchpcd 服務端程序:

原始碼:gingerbread/external/dhcpcd/dhcpcd.c

main()

dhcp_run()

handle_timeout(struct if_state *state, const struct options *options)

switch (state->state)

case state_renewing: 

case state_rebinding:

if (iface->raw_fd == -1)

do_socket(state, socket_open);

send_message(state, dhcp_request, options);

break;

}} handle_dhcp_packet()àhandle_dhcp()àbind_dhcp()àconfigure()àrun_script()

執行指令碼檔案/system/etc/dhcpcd/dhcpcd-run-hooks,指令碼檔案呼叫setprop命令設定dhcp相關引數,並設定dhcp result.

case "$" in

bound|inform|rebind|reboot|renew|timeout)

setprop dhcp.$.ipaddress "$"

setprop dhcp.$.gateway 

"$"setprop dhcp.$.mask 

"$"setprop dhcp.$.leasetime "$"

setprop dhcp.$.server 

"$"setprop dhcp.$.result "ok"

;;expire|fail|ipv4ll|stop)

setprop dhcp.$.result "failed"

;;release)

setprop dhcp.$.result "released"

;;

啟動故障分析

最近看到好多帖子是關於啟動故障的,找了些資料,結合本人拙建,希望對大家有所幫助 電腦的啟動過程是乙個非常複雜的過程,它有乙個非常完善的自檢體系,在你按下電源開關的幾秒之內,要經歷大約100多個檢測步驟,以下是啟動過程以及常見的問題和大致的判斷 一 電源,主機板,cpu 當按下電源開關時,電源開始供電...

Zygote啟動分析

基於效能的考慮,dalvik虛擬機器只啟動一次,新的例項將從第一次啟動的dalvik中拷貝。這個功能是通過系統服務zygote來實現的。zygote的啟動過程簡述如下 首先,它預初始化和預載入通用的android類到它的堆中。然後,它監聽在socket埠上,等待啟動乙個新的android應用程式的命...

Mycat 啟動分析

mycat版本 1.4.1 dev mycat啟動類 org.opencloudb.mycatstartup mycat home org.opencloudb.config.model.systemconfig mycat系統基礎配置項。mycat啟動時,首先會檢查mycat home是否設定。如...