久久精品中文字幕av,av.涩涩涩涩涩涩涩涩,亚洲国产日韩欧美精品成人久久久,成人福利电影免费在线观看,日产国产原创av,日韩av午夜激情,bt天堂中文字幕,超级碰人妻在线视频,欧美老熟妇久久一区二区

??一站式輕松地調(diào)用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
[Android的init過程(二);初始化語言(init.rc)解析](http://blog.csdn.net/nokiaguy/article/details/9109491) 本文使用的軟件版本 Android:4.2.2 Linux內(nèi)核:3.1.10 ???? 本文及后續(xù)幾篇文章將對Android的初始化(init)過程進(jìn)行詳細(xì)地、剝絲抽繭式地分析,并且在其中穿插了大量的知識,希望對讀者了解Android的啟動過程又所幫助。本章主要介紹了與硬件相關(guān)初始化文件名的確定以及屬性服務(wù)的原理和實現(xiàn)。 ???? Android本質(zhì)上就是一個基于Linux內(nèi)核的操作系統(tǒng)。與Ubuntu Linux、Fedora Linux類似。只是Android在應(yīng)用層專門為移動設(shè)備添加了一些特有的支持。既然Android是Linux內(nèi)核的系統(tǒng),那么基本的啟動過程也應(yīng)符合Linux的規(guī)則。如果研究過其他Linux系統(tǒng)應(yīng)該了解,一個完整的Linux系統(tǒng)首先會將一個Linux內(nèi)核裝載到內(nèi)存,也就是編譯Linux內(nèi)核源代碼生成的bzImage文件,對于為Android優(yōu)化的Linux內(nèi)核源代碼會生成zImage文件。該文件就是Linux內(nèi)核的二進(jìn)制版本。由于zImage在內(nèi)核空間運(yùn)行,而我們平常使用的軟件都是在應(yīng)用空間運(yùn)行(關(guān)于內(nèi)核空間和應(yīng)用空間的詳細(xì)描述,可以參考[《Android深度探索(卷1):HAL與驅(qū)動開發(fā)》](http://product.dangdang.com/main/product.aspx?product_id=23043311&_ddclickunion=P-263982%7Cad_type=0%7Csys_id=1#dd_refer=http%3A%2F%2Fblog.csdn.net%2Fnokiaguy)一書的內(nèi)容,在后續(xù)的各卷中將會對Android的整體體系進(jìn)行全方位的剖析)。內(nèi)核空間和應(yīng)用空間是不能直接通過內(nèi)存地址級別訪問的,所以就需要建立某種通訊機(jī)制。 ???? 目前Linux有很多通訊機(jī)制可以在用戶空間和內(nèi)核空間之間交互,例如設(shè)備驅(qū)動文件(位于/dev目錄中)、內(nèi)存文件(/proc、/sys目錄等)。了解Linux的同學(xué)都應(yīng)該知道Linux的重要特征之一就是一切都是以文件的形式存在的,例如,一個設(shè)備通常與一個或多個設(shè)備文件對應(yīng)。這些與內(nèi)核空間交互的文件都在用戶空間,所以在Linux內(nèi)核裝載完,需要首先建立這些文件所在的目錄。而完成這些工作的程序就是本文要介紹的init。Init是一個命令行程序。其主要工作之一就是建立這些與內(nèi)核空間交互的文件所在的目錄。當(dāng)Linux內(nèi)核加載完后,要做的第一件事就是調(diào)用init程序,也就是說,init是用戶空間執(zhí)行的第一個程序。 在分析init的核心代碼之前,還需要初步了解init除了建立一些目錄外,還做了如下的工作 1\. 初始化屬性 2\. 處理配置文件的命令(主要是init.rc文件),包括處理各種Action。 3\. 性能分析(使用bootchart工具)。 4\. 無限循環(huán)執(zhí)行command(啟動其他的進(jìn)程)。 ???? 盡管init完成的工作不算很多,不過代碼還是非常復(fù)雜的。Init程序并不是由一個源代碼文件組成的,而是由一組源代碼文件的目標(biāo)文件鏈接而成的。這些文件位于如下的目錄。 /system/core/init ???? 其中init.c是init的主文件,現(xiàn)在打開該文件,看看其中的內(nèi)容。由于init是命令行程序,所以分析init.c首先應(yīng)從main函數(shù)開始,現(xiàn)在好到main函數(shù),代碼如下: ~~~ int main(int argc, char **argv) { int fd_count = 0; struct pollfd ufds[4]; char *tmpdev; char* debuggable; char tmp[32]; int property_set_fd_init = 0; int signal_fd_init = 0; int keychord_fd_init = 0; bool is_charger = false; if (!strcmp(basename(argv[0]), "ueventd")) return ueventd_main(argc, argv); if (!strcmp(basename(argv[0]), "watchdogd")) return watchdogd_main(argc, argv); /* clear the umask */ umask(0); // 下面的代碼開始建立各種用戶空間的目錄,如/dev、/proc、/sys等 mkdir("/dev", 0755); mkdir("/proc", 0755); mkdir("/sys", 0755); mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755"); mkdir("/dev/pts", 0755); mkdir("/dev/socket", 0755); mount("devpts", "/dev/pts", "devpts", 0, NULL); mount("proc", "/proc", "proc", 0, NULL); mount("sysfs", "/sys", "sysfs", 0, NULL); /* 檢測/dev/.booting文件是否可讀寫和創(chuàng)建*/ close(open("/dev/.booting", O_WRONLY | O_CREAT, 0000)); open_devnull_stdio(); klog_init(); // 初始化屬性 property_init(); get_hardware_name(hardware, &revision); // 處理內(nèi)核命令行 process_kernel_cmdline(); … … is_charger = !strcmp(bootmode, "charger"); INFO("property init\n"); if (!is_charger) property_load_boot_defaults(); INFO("reading config file\n"); // 分析/init.rc文件的內(nèi)容 init_parse_config_file("/init.rc"); … …// 執(zhí)行初始化文件中的動作 action_for_each_trigger("init", action_add_queue_tail); // 在charger模式下略過mount文件系統(tǒng)的工作 if (!is_charger) { action_for_each_trigger("early-fs", action_add_queue_tail); action_for_each_trigger("fs", action_add_queue_tail); action_for_each_trigger("post-fs", action_add_queue_tail); action_for_each_trigger("post-fs-data", action_add_queue_tail); } queue_builtin_action(property_service_init_action, "property_service_init"); queue_builtin_action(signal_init_action, "signal_init"); queue_builtin_action(check_startup_action, "check_startup"); if (is_charger) { action_for_each_trigger("charger", action_add_queue_tail); } else { action_for_each_trigger("early-boot", action_add_queue_tail); action_for_each_trigger("boot", action_add_queue_tail); } /* run all property triggers based on current state of the properties */ queue_builtin_action(queue_property_triggers_action, "queue_property_triggers"); #if BOOTCHART queue_builtin_action(bootchart_init_action, "bootchart_init"); #endif // 進(jìn)入無限循環(huán),建立init的子進(jìn)程(init是所有進(jìn)程的父進(jìn)程) for(;;) { int nr, i, timeout = -1; // 執(zhí)行命令(子進(jìn)程對應(yīng)的命令) execute_one_command(); restart_processes(); if (!property_set_fd_init && get_property_set_fd() > 0) { ufds[fd_count].fd = get_property_set_fd(); ufds[fd_count].events = POLLIN; ufds[fd_count].revents = 0; fd_count++; property_set_fd_init = 1; } if (!signal_fd_init && get_signal_fd() > 0) { ufds[fd_count].fd = get_signal_fd(); ufds[fd_count].events = POLLIN; ufds[fd_count].revents = 0; fd_count++; signal_fd_init = 1; } if (!keychord_fd_init && get_keychord_fd() > 0) { ufds[fd_count].fd = get_keychord_fd(); ufds[fd_count].events = POLLIN; ufds[fd_count].revents = 0; fd_count++; keychord_fd_init = 1; } if (process_needs_restart) { timeout = (process_needs_restart - gettime()) * 1000; if (timeout < 0) timeout = 0; } if (!action_queue_empty() || cur_action) timeout = 0; // bootchart是一個性能統(tǒng)計工具,用于搜集硬件和系統(tǒng)的信息,并將其寫入磁盤,以便其 // 他程序使用 #if BOOTCHART if (bootchart_count > 0) { if (timeout < 0 || timeout > BOOTCHART_POLLING_MS) timeout = BOOTCHART_POLLING_MS; if (bootchart_step() < 0 || --bootchart_count == 0) { bootchart_finish(); bootchart_count = 0; } } #endif // 等待下一個命令的提交 nr = poll(ufds, fd_count, timeout); if (nr <= 0) continue; for (i = 0; i < fd_count; i++) { if (ufds[i].revents == POLLIN) { if (ufds[i].fd == get_property_set_fd()) handle_property_set_fd(); else if (ufds[i].fd == get_keychord_fd()) handle_keychord(); else if (ufds[i].fd == get_signal_fd()) handle_signal(); } } } return 0; } ~~~ 我們可以看到main函數(shù)是非常復(fù)雜的,不過我們也不需要每條語句都弄得非常清楚(因為這樣弄是非常困難的),通常只需要了解init的主線即可。其實從init的main函數(shù)可以看出。Init實際上就分為如下兩部分。 1.? 初始化(包括建立/dev、/proc等目錄、初始化屬性、執(zhí)行init.rc等初始化文件中的action等)。 2.? 使用for循環(huán)無限循環(huán)建立子進(jìn)程。 ???? 第一項工作很好理解。而第二項工作是init中的核心。在Linux系統(tǒng)中init是一切應(yīng)用空間進(jìn)程的父進(jìn)程。所以我們平常在Linux終端執(zhí)行的命令,并建立進(jìn)程。實際上都是在這個無限的for循環(huán)中完成的。也就是說,在Linux終端執(zhí)行ps –e 命令后,看到的所有除了init外的其他進(jìn)程,都是由init負(fù)責(zé)創(chuàng)建的。而且init也會常駐內(nèi)容。當(dāng)然,如果init掛了,Linux系統(tǒng)基本上就崩潰了。 ??? 由于init比較復(fù)雜,所以本文只分析其中的一部分,在后續(xù)文章中將詳細(xì)分析init的各個核心組成部分。 ????? 對于main函數(shù)最開始完成的建立目錄的工作比較簡單,這部分也沒什么可以分析的。就是調(diào)用了一些普通的API(mkdir)建立一些目錄。現(xiàn)在說一些題外話,由于Android的底層源代碼(包括init)實際上是屬于Linux應(yīng)用編程領(lǐng)域,所以要想充分理解Android源代碼,除了Linux的基本結(jié)構(gòu)要了解外,Linux應(yīng)用層的API需要熟悉。為了滿足這些讀者的需要,后續(xù)我會寫一些關(guān)于Linux應(yīng)用編程的文章。Ok,現(xiàn)在言歸正傳,接下來分析一個比較重要的部分:配置文件的解析。 ????? 這里的配置文件主要指init.rc。讀者可以進(jìn)到Android的shell,會看到根目錄有一個init.rc文件。該文件是只讀的,即使有了root權(quán)限,可以修改該文件也沒有。因為我們在根目錄看到的文件只是內(nèi)存文件的鏡像。也就是說,android啟動后,會將init.rc文件裝載到內(nèi)存。而修改init.rc文件的內(nèi)容實際上只是修改內(nèi)存中的init.rc文件的內(nèi)容。一旦重啟android,init.rc文件的內(nèi)容又會恢復(fù)到最初的裝載。想徹底修改init.rc文件內(nèi)容的唯一方式是修改Android的ROM中的內(nèi)核鏡像(boot.img)。其實boot.img名曰內(nèi)核鏡像,不過該文件除了包含完整的Linux內(nèi)核文件(zImage)外,還包括另外一個鏡像文件(ramdisk.img)。ramdisk.img就包含了init.rc文件和init命令。所以只有修改ramdisk.img文件中的init.rc文件,并且重新打包boot.img文件,并刷機(jī),才能徹底修改init.rc文件。如果讀者有Android源代碼,編譯后,就會看到out目錄中的相關(guān)子目錄會生成一個root目錄,該目錄實際上就是ramdisk.img解壓后的內(nèi)容。會看到有init命令和init.rc文件。在后續(xù)的文章中將會討論具體如何修改init.rc文件,如何刷機(jī)。不過這些內(nèi)容與本文關(guān)系不大,所以不做詳細(xì)的討論。 現(xiàn)在回到main函數(shù),在創(chuàng)建完目錄后,會看到執(zhí)行了如下3個函數(shù)。 ??? property_init(); ??? get_hardware_name(hardware, &revision); ??? process_kernel_cmdline(); ???? 其中property_init主要是為屬性分配一些存儲空間,該函數(shù)并不是核心。不過當(dāng)我們查看init.rc文件時會發(fā)現(xiàn)該文件開始部分用一些import語句導(dǎo)入了其他的配置文件,例如,/init.usb.rc。大多數(shù)配置文件都直接使用了確定的文件名,只有如下的代碼使用了一個變量(${ro.hardware})執(zhí)行了配置文件名的一部分。那么這個變量值是從哪獲得的呢? import /init.${ro.hardware}.rc ???? 首先要了解init.${ro.hardware}.rc配置文件的內(nèi)容通常與當(dāng)前的硬件有關(guān)。現(xiàn)在我們先來關(guān)注get_hardware_name函數(shù),代碼如下: ~~~ void get_hardware_name(char *hardware, unsigned int *revision) { char data[1024]; int fd, n; char *x, *hw, *rev; /* 如果hardware已經(jīng)有值了,說明hardware通過內(nèi)核命令行提供,直接返回 */ if (hardware[0]) return; // 打開/proc/cpuinfo文件 fd = open("/proc/cpuinfo", O_RDONLY); if (fd < 0) return; // 讀取/proc/cpuinfo文件的內(nèi)容 n = read(fd, data, 1023); close(fd); if (n < 0) return; data[n] = 0; // 從/proc/cpuinfo文件中獲取Hardware字段的值 hw = strstr(data, "\nHardware"); rev = strstr(data, "\nRevision"); // 成功獲取Hardware字段的值 if (hw) { x = strstr(hw, ": "); if (x) { x += 2; n = 0; while (*x && *x != '\n') { if (!isspace(*x)) // 將Hardware字段的值都轉(zhuǎn)換為小寫,并更新hardware參數(shù)的值 // hardware也就是在init.c文件中定義的hardware數(shù)組 hardware[n++] = tolower(*x); x++; if (n == 31) break; } hardware[n] = 0; } } if (rev) { x = strstr(rev, ": "); if (x) { *revision = strtoul(x + 2, 0, 16); } } } ~~~ ????? 從get_hardware_name方法的代碼可以得知,該方法主要用于確定hardware和revision的變量的值。Revision這里先不討論,只要研究hardware。獲取hardware的來源是從Linux內(nèi)核命令行或/proc/cpuinfo文件中的內(nèi)容。Linux內(nèi)核命令行暫且先不討論(因為很少傳遞該值),先看看/proc/cpuinfo,該文件是虛擬文件(內(nèi)存文件),執(zhí)行cat /proc/cpuinfo命令會看到該文件中的內(nèi)容,如圖1所示。在白框中就是Hardware字段的值。由于該設(shè)備是Nexus 7,所以值為grouper。如果程序就到此位置,那么與硬件有關(guān)的配置文件名是init.grouper.rc。有Nexus 7的讀者會看到在根目錄下確實有一個init.grouper.rc文件。說明Nexus 7的原生ROM并沒有在其他的地方設(shè)置配置文件名,所以配置文件名就是從/proc/cpuinfo文件的Hardware字段中取的值。 ![](https://box.kancloud.cn/2016-01-18_569cb8ac130fd.jpg) ????????????????????????????????????????????????????????????????????????????????????????????????????? 圖1 現(xiàn)在來看在get_hardware_name函數(shù)后面調(diào)用的process_kernel_cmdline函數(shù),代碼如下: ~~~ static void process_kernel_cmdline(void) { /* don't expose the raw commandline to nonpriv processes */ chmod("/proc/cmdline", 0440); // 導(dǎo)入內(nèi)核命令行參數(shù) import_kernel_cmdline(0, import_kernel_nv); if (qemu[0]) import_kernel_cmdline(1, import_kernel_nv); // 用屬性值設(shè)置內(nèi)核變量 export_kernel_boot_props(); } ~~~ ????? 在process_kernel_cmdline函數(shù)中除了使用import_kernel_cmdline函數(shù)導(dǎo)入內(nèi)核變量外,主要的功能就是調(diào)用export_kernel_boot_props函數(shù)通過屬性設(shè)置內(nèi)核變量,例如,通過ro.boot.hardware屬性設(shè)置hardware變量,也就是說可以通過ro.boot.hardware屬性值可以修改get_hardware_name函數(shù)中從/proc/cpuinfo文件中得到的hardware字段值。下面看一下export_kernel_boot_props函數(shù)的代碼。 ~~~ static void export_kernel_boot_props(void) { char tmp[PROP_VALUE_MAX]; const char *pval; unsigned i; struct { const char *src_prop; const char *dest_prop; const char *def_val; } prop_map[] = { { "ro.boot.serialno", "ro.serialno", "", }, { "ro.boot.mode", "ro.bootmode", "unknown", }, { "ro.boot.baseband", "ro.baseband", "unknown", }, { "ro.boot.bootloader", "ro.bootloader", "unknown", }, }; // 通過內(nèi)核的屬性設(shè)置應(yīng)用層配置文件的屬性 for (i = 0; i < ARRAY_SIZE(prop_map); i++) { pval = property_get(prop_map[i].src_prop); property_set(prop_map[i].dest_prop, pval ?: prop_map[i].def_val); } // 根據(jù)ro.boot.console屬性的值設(shè)置console變量 pval = property_get("ro.boot.console"); if (pval) strlcpy(console, pval, sizeof(console)); /* save a copy for init's usage during boot */ strlcpy(bootmode, property_get("ro.bootmode"), sizeof(bootmode)); /* if this was given on kernel command line, override what we read * before (e.g. from /proc/cpuinfo), if anything */ // 獲取ro.boot.hardware屬性的值 pval = property_get("ro.boot.hardware"); if (pval) // 這里通過ro.boot.hardware屬性再次改變hardware變量的值 strlcpy(hardware, pval, sizeof(hardware)); // 利用hardware變量的值設(shè)置設(shè)置ro.hardware屬性 // 這個屬性就是前面提到的設(shè)置初始化文件名的屬性,實際上是通過hardware變量設(shè)置的 property_set("ro.hardware", hardware); snprintf(tmp, PROP_VALUE_MAX, "%d", revision); property_set("ro.revision", tmp); /* TODO: these are obsolete. We should delete them */ if (!strcmp(bootmode,"factory")) property_set("ro.factorytest", "1"); else if (!strcmp(bootmode,"factory2")) property_set("ro.factorytest", "2"); else property_set("ro.factorytest", "0"); } ~~~ ????? 從export_kernel_boot_props函數(shù)的代碼可以看出,該函數(shù)實際上就是來回設(shè)置一些屬性值,并且利用某些屬性值修改console、hardware等變量。其中hardware變量(就是一個長度為32的字符數(shù)組)在get_hardware_name函數(shù)中已經(jīng)從/proc/cpuinfo文件中獲得過一次值了,在export_kernel_boot_props函數(shù)中又通過ro.boot.hardware屬性設(shè)置了一次值,不過在Nexus 7中并沒有設(shè)置該屬性,所以hardware的值仍為grouper。最后用hardware變量設(shè)置ro.hardware屬性,所以最后的初始化文件名為init.grouper.rc。 ????? 這里還有一個問題,前面多次提到屬性或?qū)傩晕募?,那么這些屬性文件指的是什么呢?是init.rc?當(dāng)然不是。實際上這些屬性文件是一些列位于不同目錄,系統(tǒng)依次讀取的配置文件。 **屬性服務(wù)(Property Service)** 在研究這些配置文件之前應(yīng)先了解init是如何處理這些屬性的。編寫過Windows本地應(yīng)用的讀者都應(yīng)了解,在windows中有一個注冊表機(jī)制,在注冊表中提供了大量的屬性。在Linux中也有類似的機(jī)制,這就是屬性服務(wù)。init在啟動的過程中會啟動屬性服務(wù)(Socket服務(wù)),并且在內(nèi)存中建立一塊存儲區(qū)域,用來存儲這些屬性。當(dāng)讀取這些屬性時,直接從這一內(nèi)存區(qū)域讀取,如果修改屬性值,需要通過Socket連接屬性服務(wù)完成。在init.c文件中的一個action函數(shù)中調(diào)用了start_property_service函數(shù)來啟動屬性服務(wù),action是init.rc及其類似文件中的一種執(zhí)行機(jī)制,由于內(nèi)容比較多,所以關(guān)于init.rc文件中的執(zhí)行機(jī)制將在下一篇文章中詳細(xì)討論。 ???? 現(xiàn)在順藤摸瓜,找到start_property_service函數(shù),該函數(shù)在Property_service.c文件中,該文件與init.c文件中同一個目錄。 ~~~ void start_property_service(void) { int fd; // 裝載不同的屬性文件 load_properties_from_file(PROP_PATH_SYSTEM_BUILD); load_properties_from_file(PROP_PATH_SYSTEM_DEFAULT); load_override_properties(); /* Read persistent properties after all default values have been loaded. */ load_persistent_properties(); // 創(chuàng)建socket服務(wù)(屬性服務(wù)) fd = create_socket(PROP_SERVICE_NAME, SOCK_STREAM, 0666, 0, 0); if(fd < 0) return; fcntl(fd, F_SETFD, FD_CLOEXEC); fcntl(fd, F_SETFL, O_NONBLOCK); // 開始服務(wù)監(jiān)聽 listen(fd, 8); property_set_fd = fd; } ~~~ ????? 現(xiàn)在我們已經(jīng)知道屬性服務(wù)的啟動方式了,那么在start_property_service函數(shù)中還涉及到如下兩個宏。 PROP_PATH_SYSTEM_BUILD PROP_PATH_SYSTEM_DEFAULT ????? 這兩個宏都是系統(tǒng)預(yù)定義的屬性文件名的路徑。為了獲取這些宏的定義,我們先進(jìn)行另外一個函數(shù)的分析。 ????? 在前面讀取屬性值時使用過一個property_get函數(shù),該函數(shù)在Property_service.c中實現(xiàn),代碼如下: ~~~ const char* property_get(const char *name) { prop_info *pi; if(strlen(name) >= PROP_NAME_MAX) return 0; pi = (prop_info*) __system_property_find(name); if(pi != 0) { return pi->value; } else { return 0; } } ~~~ ????? 可以看到,在property_get函數(shù)中調(diào)用了一個核心函數(shù)__system_property_find,該函數(shù)真正實現(xiàn)了獲取屬性值的功能。該函數(shù)屬于bionic的一個library,在system_properties.c文件中實現(xiàn),讀者可以在如下的目錄找到該文件。 /bionic/libc/bionic __system_property_find函數(shù)的代碼如下: ~~~ const prop_info *__system_property_find(const char *name) { // 獲取屬性存儲內(nèi)存區(qū)域的首地址 prop_area *pa = __system_property_area__; unsigned count = pa->count; unsigned *toc = pa->toc; unsigned len = strlen(name); prop_info *pi; while(count--) { unsigned entry = *toc++; if(TOC_NAME_LEN(entry) != len) continue; pi = TOC_TO_INFO(pa, entry); if(memcmp(name, pi->name, len)) continue; return pi; } return 0; } ~~~ ????? 從__system_property_find函數(shù)的代碼很容易看出,第一行使用了一個__system_property_area__變量,該變量是全局的。在前面分析main函數(shù)時涉及到一個property_init函數(shù),該函數(shù)調(diào)用了init_property_area函數(shù),該函數(shù)用于初始化屬性內(nèi)存區(qū)域,也就是__system_property_area__變量。 ~~~ static int init_property_area(void) { prop_area *pa; if(pa_info_array) return -1; if(init_workspace(&pa_workspace, PA_SIZE)) return -1; fcntl(pa_workspace.fd, F_SETFD, FD_CLOEXEC); pa_info_array = (void*) (((char*) pa_workspace.data) + PA_INFO_START); pa = pa_workspace.data; memset(pa, 0, PA_SIZE); pa->magic = PROP_AREA_MAGIC; pa->version = PROP_AREA_VERSION; /* 初始化屬性內(nèi)存區(qū)域,屬性服務(wù)會使用該區(qū)域 */ __system_property_area__ = pa; property_area_inited = 1; return 0; } ~~~ ? 在前面涉及到的system_properties.c文件對應(yīng)的頭文件system_properties.h中定義了前面提到的兩個表示屬性文件路徑的宏,其實還有另外兩個表示路徑的宏,一共4個屬性文件。system_properties.h文件可以在/bionic/libc/include/sys目錄中找到。這4個宏定義如下: ~~~ #define PROP_PATH_RAMDISK_DEFAULT "/default.prop" #define PROP_PATH_SYSTEM_BUILD "/system/build.prop" #define PROP_PATH_SYSTEM_DEFAULT "/system/default.prop" #define PROP_PATH_LOCAL_OVERRIDE "/data/local.prop" ~~~ ????? 現(xiàn)在讀者可以進(jìn)入Android設(shè)備的相應(yīng)目錄,通??梢哉业缴鲜?個文件,如一般會在根目錄,會發(fā)現(xiàn)一個default.prop文件,cat default.prop會看到該文件的內(nèi)容。而屬性服務(wù)就是裝載所有這4個屬性文件中的所有屬性以及使用property_set設(shè)置的屬性。在Android設(shè)備的終端可以直接使用getprop命令從屬性服務(wù)獲取所有的屬性值。如圖2所示。getprop命令還可以直接根屬性名還獲取具體的屬性值,例如,getprop ro.build.product。 ![](https://box.kancloud.cn/2016-01-18_569cb8ac29b12.jpg) ??????????????????????????????????????????????????????????????????????????????????????? 圖2 ??????? 如果讀者感興趣,可以看一下getprop是如何通過屬性服務(wù)讀寫屬性的。getprop命令的源代碼文件是getprop.c。讀者可以在/system/core/toolbox目錄中找到該文件。實際上,getprop獲取屬性值也是通過property_get函數(shù)完成的。在前面分析過該函數(shù),實際上調(diào)用了__system_property_find函數(shù)從__system_property_area__變量指定的內(nèi)存區(qū)域獲取相應(yīng)的屬性值。 ????? 此外在system_properties.c文件中還有如下兩個函數(shù)用于通過屬性服務(wù)修改或添加某個屬性的值。 ~~~ static int send_prop_msg(prop_msg *msg) { struct pollfd pollfds[1]; struct sockaddr_un addr; socklen_t alen; size_t namelen; int s; int r; int result = -1; // 創(chuàng)建用于連接屬性服務(wù)的socket s = socket(AF_LOCAL, SOCK_STREAM, 0); if(s < 0) { return result; } memset(&addr, 0, sizeof(addr)); // property_service_socket是Socket設(shè)備文件名稱 namelen = strlen(property_service_socket); strlcpy(addr.sun_path, property_service_socket, sizeof addr.sun_path); addr.sun_family = AF_LOCAL; alen = namelen + offsetof(struct sockaddr_un, sun_path) + 1; if(TEMP_FAILURE_RETRY(connect(s, (struct sockaddr *) &addr, alen)) < 0) { close(s); return result; } r = TEMP_FAILURE_RETRY(send(s, msg, sizeof(prop_msg), 0)); if(r == sizeof(prop_msg)) { pollfds[0].fd = s; pollfds[0].events = 0; r = TEMP_FAILURE_RETRY(poll(pollfds, 1, 250 /* ms */)); if (r == 1 && (pollfds[0].revents & POLLHUP) != 0) { result = 0; } else { result = 0; } } close(s); return result; } // 用戶可以直接調(diào)用該函數(shù)設(shè)置屬性值 int __system_property_set(const char *key, const char *value) { int err; int tries = 0; int update_seen = 0; prop_msg msg; if(key == 0) return -1; if(value == 0) value = ""; if(strlen(key) >= PROP_NAME_MAX) return -1; if(strlen(value) >= PROP_VALUE_MAX) return -1; memset(&msg, 0, sizeof msg); msg.cmd = PROP_MSG_SETPROP; strlcpy(msg.name, key, sizeof msg.name); strlcpy(msg.value, value, sizeof msg.value); // 設(shè)置屬性值 err = send_prop_msg(&msg); if(err < 0) { return err; } return 0; } ~~~ 在send_prop_msg函數(shù)中涉及到一個property_service_socket變量,定義如下: ~~~ static const char property_service_socket[] = "/dev/socket/" PROP_SERVICE_NAME; ~~~ ? 實際上,send_prop_msg通過這個設(shè)備文件與屬性服務(wù)通訊的。讀者可以在Android設(shè)備的終端進(jìn)入/dev/socket目錄,通常會看到一個property_service文件,該文件就是屬性服務(wù)映射的設(shè)備文件。 ???? 現(xiàn)在已經(jīng)分析完了init如何確定與硬件相關(guān)的初始化文件名(init.grouper.rc),并且討論了4個屬性文件及其裝載過程,以及屬性服務(wù)實現(xiàn)的基本原理。在下一篇文章中將討論更深入的內(nèi)容,例如,init.rc文件中提供了很多action,那么什么是aciton呢,init有是如何解析init.rc文件呢?這些內(nèi)容都將在下一篇文章中揭曉。
亚洲自拍偷拍色图区| 一本大道av伊人久久综合| 日韩美女影院免费在线观看| 中文字幕精品久久久人妻| 久久免费视频观看99| 热热久久这里只有精品| 成人精品一区一区二区看片| 2019年中文字幕在线看| 91人妻人人妻人人爽| 日韩欧美激情入口| 99精品高清免费在线视频| 肥臀熟女一区二区三区肥女人| 少妇高潮喷水久久久久久桃花| 日韩高清av一区| 亚洲av微乳在线| 日韩欧美爱爱视频免费观看| 国产精品亚洲精品成人| 亚洲欧洲国产一区二区| 嫩草一区二区三区四区中文 | 久久久久在线免费看| 日本黄色成年视频| 日韩精品久久久久久久软件| 中文字幕理伦福利片| 亚洲精品蜜桃久久久久| 91丝袜放荡丝袜脚交| 亚洲丰满熟妇乱xxxxx| 五月综合缴情婷婷六月| 国产成AV人片在线观看天堂无码 | www.成人国产精品| 韩国女团午夜大尺度福利| 国产麻豆剧传媒精品视频| 亚洲欧美日产人妻| 国产精品男人的天堂999| 欧美一区二区理论片在线观看| 欧美一区二区性久久久| 68国产成人综合久久精品| 日韩男女av在线观看| 欧美激情 另类视频 亚洲| 综合激情伊人久久| 精品欧美日韩国产在线| 欧美一区二区三区成人久久片| 青青青高清国产视频| 久久久久久夜夜夜精品国产| 日韩厕所偷拍美女| 欧美老熟妇重口另类xxx| 激情黄色开心五月天| 国产一区二中文字幕在线免费观看 | 精品久久久久久999| 久久视频一区二区三| 久久久精品99国产国产精| 亚洲精品,欧美日韩| 日韩av在线点播| 亚洲一区二区三区久久aa| 精品视频在线观看一区二区97| av传媒高清影院免费| 久久精品琪琪男人的天堂| 国产91在线播放精品| 91人妻精品久久久久久久久| av蜜臀懂色啊啊啊| 99久久极品蜜桃臀精品久久| 精品97人妻无码中文永久| 91欧美亚洲综合网| 久久久久久少妇被弄高潮| 黄色片一级美女黄色片| 日韩中文字幕视频在线播放| 欧美日韩v中文在线| 50岁老熟女一区二区三区| 欧洲美女黑人粗性暴交视| 中文字幕人妻一区二区在线看| 中文字幕一区二区不卡顿| 91超碰免费在线播放| 久久综合久久综合久久色| 人妻中文字幕一二三区| 一区,二区,三区视频| 色综合久久999| 日韩视频在线播放一区二区| 日韩日韩av在线| 欧美熟女人妻一区二区三区| 91久久婷婷国产麻豆精品| 男人的天堂久久精平| 国产无av码在线观看| 熟妇人妻 一区二区三区中文字幕| 久久视频黄色观看网站| 欧美高清在线视频99| 亚洲精选黄色在线观看| 日韩av午夜精品| 偷偷夜夜精品一区二区三区蜜桃| 男人的天堂久久精平| 亚洲尺码和欧洲尺码av| 久久久久在线免费看| 久久久国产一区二区视| 精品一区二区三区蜜桃臀的优势| 国产日韩欧美成人一二三区| 日韩av中文网址| 四虎国产精品久久免费精品| 麻豆免费国产福利免费国产福利| 91超碰熟女在线97| 欧美日韩v中文在线| 欧美熟女高清视频一区二区| 久久久久中文字幕免费久久久久久| 久久久久久久久久无吗 | 欧美精品国产精品久久久| 又爽又黄的免费视频91| 2020日本中文字幕| 欧美熟女vides| 免费av网站在线浏览| 玖玖玖玖日在线视频| 色哟哟免费在线播放| 蜜臀av日韩特黄大片| 日本熟妇乱子伦a片在线观看 | 日韩电影黄色免费| av熟妇翔田千里俱乐部| 91久久亚洲成人精品| 欧美一区二区三区激情无套| 久久久久国产精品夜夜夜| 日韩精品综合视频在线| www日本不卡一二三区| 先锋男人资源中文字幕| 欧美精品人妻丝袜一区| 欧美日韩v中文在线| 亚洲国产精选久久| 国产日韩欧美人妻在线观看| 清纯唯美激情五月| 91porny国产九色| 91精品久久久久久久久不卡网站 | 久久精品 中文字幕| 天天在线天天综合网色| 欧美中文字幕在线一区| 在线不卡日韩视频播放| 成人黄片av在线播放| 91啪啪啪内射网站| 91在线播放视频免费| 婷婷基地中文字幕| 欧美熟妇人妻视频在线| 50岁老熟女一区二区三区| 亚洲天堂性色综合| 91超碰免费在线播放| 亚洲欧美日韩国产另类专区| 久久久久久久久久久久久丰满| 久久精品一区二区三区人妻蜜桃| 国产成人精品久久久女| 欧美熟女人妻一区二区三区 | 天天操天天干天天色| 天天干天天草天天日天天天射伊人| 日韩电影黄色免费| 亚州av一区二区三区.| 俺去鲁婷婷六月色综合| 免费观看a级在线视频| 欧美日韩精品亚洲欧美| 亚洲欧美一二三视频| 女人体内射精一区二区三区| 精品99国内中文字幕| 亚洲人妻中文字幕一区二区| 人人狠狠久久综合网| 亚洲国产精选久久| 精品久久一区电影亚洲| 国产日韩亚洲大尺度高清| 欧美日韩在线卡一卡二卡三| a级黄片在线免费观看| av青青草原在线观看| 午夜国产福利电影| 另类蜜桃刺激视频在线观看 | 日本加勒比中文字幕久久| 亚洲国模在线视频| 色视频精品视频在线观看| 日韩精品综合免费视频| 青青青手机版视频在线看| 亚洲制服高清中文字幕| 99精品中文字幕在线视频| 成人人妻视频一区二区| 婷婷丁香花五月天| 1024 国产高清の最新合集| 国产欧美日韩一区二区三区''| 18在线观看久久久麻豆| 91偷伦一区二区三区蜜臀| w疯狂的少妇2做爰韩国| 欧美精品一区二区在线视频| 亚洲乱精品中文字字幕| 欧美日韩亚洲国产ay| 亚洲中文字幕成人久久| 欧美人妻系列,中文字幕| 欧美三级中文字幕久久精品| 久久久久久人妻无码| 日韩精品福利性无码专区| 中文字幕av久久爽爽| 精品国产久久久久蜜臀| 亚洲熟妇在线观看一区二区| 久久视频这里都是精品| 久久国产经典三级av| 久久久亚洲熟妇熟女ⅹx| 精品欧美乱子伦一区二区三区| 一本色道久久亚洲综合精品蜜桃| 亚洲av色图com| 1024欧美一区二区看片| 天天干天天插天天操天天日| 亚洲av不卡码在线看| 亚洲国产aⅴ精品一区二区欧美| 久久这里只有精品久| 亚洲人妻中文字幕av首页| 亚洲图色91东京热| 色噜噜狠狠躁夜夜躁| 伊人久久婷婷av| 人妻丰满精品一区二区三区| 中文字幕版婷婷久久| 国产成人av最新网址| 亚洲欧美丝袜精品久久直播| 日韩av在线观看卡一卡| 麻豆精品一区在线免费观看| 日韩av在线观看免费看看| 国产一区二区不卡91| 久久综合中文字幕一区二区三区| 亚洲一区视频大全| 亚洲精品熟女中文字幕| 天天日天天日天天日天天日| 天天日天天日天天日天天日| av熟妇翔田千里俱乐部| 国产一级淫片免费看久久| 在线中文免费黄色| 99九九99九九热视频| 香蕉久久久久久久久久久久女| 欧美人妻系列,中文字幕| 国产又大又长又粗又硬免费视频 | 日韩a毛片视频免费看| 日韩福利视频在线看| 久久在线人妻熟女高清完整版| 秋霞在线观看色哟哟视频| 国产91在线播放精品| 一本一道久久a久久久| 亚洲欧洲久久精品| 蜜臀久久99精品久久久久久久久 | 5858s在线视频| 精品国产丝袜久久久一区二区| 国产精品成人av麻豆| 久久久久久精品国产成人| 亚洲av综合久久伊人| 国产麻豆剧传媒精品视频| 亚洲欧美国产另类91综合| 91中文字幕制服诱惑| 国产无av码在线观看| 68国产成人综合久久精品| 中文字幕一区二区三区中文字幕| 亚洲欧美日韩偷拍综合| 91嫩草17c欧美国产| 亚洲av微乳在线| 国产精品欧美日韩五月香蕉| 激情婷婷综合久久五月天| 欧美日韩国产一级一顶级| 日韩在线免费视频精品| 久久久久久添逼视频| 新版天堂av资源在线| 日韩精品在线视频播放| 亚洲激情 欧美激情| 久久最近最新中文字幕大全| 2019年中文字幕在线看| 亚洲男人五月天堂| 国产精品成人av麻豆| 97人妻中文字幕精品视频| 91久久婷婷国产麻豆精品| 日本18禁片免费久久| 制服丝袜亚洲欧美第一| 亚洲尺码和欧洲尺码av| 亚洲天堂性色综合| 亚洲av微乳在线| 国产成人精品久久久久久蜜臀| 久久伊人精品青青草原| 国产一区二区三区四区中文字幕| 新版天堂av资源在线| 18在线观看久久久麻豆| 日韩av手机在线电影| 日韩精品刺激视频| 日韩少妇视频在线直播| 91偷拍老熟女露脸合集| 欧美熟妇人妻视频在线| 9久热这里有国产精品| 日韩电影黄色免费| 91天仙tv国产福利精品| 久久久亚洲精品久久仙| 制服巨乳人妻在线| 久久传奇网站一区三区视频| 久久精品国产91久久麻豆自制| 91免费版下载成人| 日本vs欧美一区二区三区| 久久午夜福利电影免费试看| 精品人妻二区中文字幕| 日韩av在线不卡网站| 麻豆在线视频看片免费| 久久久久久久久人妻精品| 91久久亚洲成人精品| 亚洲av电影在线一区二区| 成人黄片av在线播放| 欧美中文字幕在线观看视频| 污视频在线观看91| 99久久极品蜜桃臀精品久久| 亚洲一区二区三二区厕所偷拍| 91中日在线中文字幕| 青青青在线视频自拍| 日韩免费美女电影| 精品999久久久一免费ww| 最新精品成人在线| av福利网站在线观看| 福利一福利二福利三| 91国偷自产一区二区三区老熟女| 成人av电影免费版| 青娱乐国产视频盛| 国产欧美一区二区二区精品| 亚洲五月婷婷视频| 91麻豆精品91久久久久同性 | 久久av资源男人站| 亚洲 欧洲 日韩 人妻| 亚洲精品久久久久久久久蜜桃| av熟妇翔田千里俱乐部| 日韩欧美亚州综合久久| 熟女激情一区二区三区| 初撮日本五十路人妻| 明天我们好好过高清免费| 日本最新中文字幕| 婷婷激情五月天图片| 久久精品国产av网| 亚洲图色91东京热| 亚洲情色av网站| 婷婷午夜美女诱惑福利电影网| 少妇一区二区在线免费观看 | 久久视频一区二区三| 久久这里只有精品久| 91久久亚洲成人精品| 亚洲国模私拍视频| 91人妻九色大屁股| 精品999久久久一免费ww| 久久这里只有精品久| 麻豆精品一区在线免费观看| 一本久久久久久久18| 亚洲精品熟女中文字幕| 亚洲五月婷婷视频| 午夜精品久久久久久久久二区三区| 亚洲第一黄色天堂| 日韩福利视频在线看| youwu视频在线| 99精品视频69v精品视频| 亚洲不卡一区av| 自拍偷拍亚洲欧美另类| 三级亚洲天堂亚洲天堂| 中文字幕熟女人妻在线观看| 天天操天天爽天天舔天天操一操| 亚洲自拍偷拍 av| 日本aaaa视频在线观看| 中文字幕一线一区和二区| 亚洲成人影院中文字幕| 日韩久久久三级电影| 五月婷婷久久久久久久久| 88在线观看91蜜桃国自产| 亚洲综合在线伊人| av熟妇翔田千里俱乐部| 天天干天天插天天操天天日| 日韩av在线天堂| 风间由美交换夫中文字幕| 国产三级三级三级三级av精品| 日韩精品综合视频在线| 国产精品久久久久成人片| 国产乱子伦视频免费| 久久久久国产精品夜夜夜| 国产一区二中文字幕在线免费观看| 97国产免费电影网| 亚洲五月婷婷视频| 午夜在线观看高清完整版| 精品97人妻无码中文永久| 另类蜜桃刺激视频在线观看| 成人黄视频在线播放| 亚洲激情网在线播放| 91精品久久久久久久久不卡网站 | 日韩不卡一级成人免费视频| 中文字幕一线一区和二区| 国产日韩一区二区三区啪啪啪| 五月爱婷婷六月丁香性| 亚洲情色av网站| 亚洲五月婷婷视频| av岛国不卡在线观看| 99久久精品国产777| 麻豆在线视频看片免费| 久久久久女优免费视频| 精品97人妻无码中文永久| 久久久久久久久久久最新| 日韩欧美激情入口| 欧美日韩精品欧美日韩| 蜜臀av久久久久av蜜臀| 亚洲欧美日韩大陆| 亚洲av激情小说| 欧美性久久久久久久久久久| 99热这里只有精品网| 高清一区二区三区日本4| 国语一区二区在线观看| 色亚洲天堂色派对欧美色| av青青草原在线观看| 精品国产一区二区三区制服| 91在线精品国自产拍| 亚洲 欧美 自拍 中文| 欧美日韩国产一级一顶级| 日韩精品午夜免费观看| 美国av 在线播放| 欧美熟女人妻一区二区三区 | 91亚洲精品成人在线| 国产日韩欧美人妻在线观看| 人妻人人揉人人澡人人| 久久久久久久久人妻精品| 国产欧美日韩不卡在线观看| 青草青草视频免费2在线观看 | 色婷婷中文字幕基地| 日本vs欧美一区二区三区| 欧美日韩精品一区电影| 色婷婷中文字幕基地| 欧美肥臀精品一区二区三区| 91在线观看视频,| 日韩美女主播人体视频自拍首页| 午夜精品久久婷婷蜜桃| 777亚洲精品乱码久久| 日韩av电影com| 国产精品成人av麻豆| 最新偷窥偷拍免费视频观看| 天天操,天天干,天天| 久久99精品久久久久久三级| 91超碰熟女在线97| 日韩欧美亚州综合久久| 高清中文字幕乱码在线| 成年人在线免费观看黄色片| 亚洲国产精品五月天久久久| 亚洲天堂黄色免费| 黑人操日本女人电影| 亚洲熟妇在线观看一区二区| 欧美日韩久久久久久精品| 日韩欧美在线视频第一页| 国产一区二区三区黄色| 久久成人福利视频资源| 色婷婷一区二区三区四区五| 久久人人爽爽人人爽av| 肥臀熟女一区二区三区肥女人| 日韩在线免费视频精品| 亚洲成年人电影天堂| 一区二区三区四区中文字幕| 久久精品国产91久久麻豆自制| 激情五月天狠婷婷| 中文字幕日韩天堂| 99re热在线精品视频9| 亚洲av网站女性向在线观看| 日韩欧美综合一区二区在线| 欧美熟女vides| 美国av 在线播放| 首页国产中文字幕av| 999精品插丰满少妇人妻| 国产欧美日韩亚洲另类第一第二页| 精品aa级中文字幕人妻| 肥臀熟女一区二区三区肥女人| 91人妻露出精品在线| 五月综合缴情婷婷六月| 天美麻豆成人av精品小说| 久久这里只有欧美精品| 婷婷午夜美女诱惑福利电影网| 国产一区二区不卡91| 色婷婷久久久swag精品| 黑人操日本女人电影| 亚洲精品乱码97久久久久久| 青青草成人免费电影| 欧美亚洲av日韩综合一区| 一区二区 熟女人妻| 日韩a v日日夜夜| 自拍偷拍亚洲欧美另类| 俺去鲁婷婷六月色综合| 高清不卡av在线网| 99久久精品国产777| 日韩欧美在线视频第一页| 999热精品在线观看| 精品久久一区电影亚洲| 天天日天天干一道一小| 欧美成人黄色一区二区三区| 五月婷婷六月丁香资源| 久久久久国产亚洲av麻豆| 亚洲综合在线伊人| 日韩精品午夜免费观看| 日韩在线播放视频1区| av青青草原在线观看| 99久久国语露脸精彩对白| 国产精品成人av在线网站| 福利日韩精品中文字幕专区| 日韩草比网站在线免费观看| 在线中文字幕第二页| 在线观看视频 你懂得| 中文字幕亚洲中文字幕| 成人精品一区一区二区看片| 首页国产中文字幕av| 亚洲人妻中文字幕一区二区| 四虎网站免费av| 免费人妻一区二区三区免费视频| 日韩在线啊啊啊的视频| 麻豆精品123在线观看| 日本最新中文字幕| 麻豆中文字幕av在线| 99爱99久久久久久久久久| av在线免费播放成人| 亚洲一级av大片| 国产精品99久久电影| 2023亚洲男人的天堂| 精品人妻一区二区三区人妻视频 | 久久 99 精品视频| 少妇人妻一区2区中文字幕 | 亚洲国产精品97久久宅男| 高清一区二区三区日本4| 日本中文国产字幕| 激情四射五月开心六月婷婷| 久久久久在线免费看| 午夜影院av在线| 欧美爱情动作片在线一区| 亚洲av色图com| 麻豆成人在线免费观看视频| 欧美日本一道本一区二区| 久久国产精品人妻酒店| 日韩a v日日夜夜| 国产成人精品视频免费网站| av日韩中文字幕人妻| 国产精品99久久电影| 久久久久久久久久无吗| av传媒高清影院免费| 国产精品99久久久高清| 日韩一级黄色大片免费观看 | 亚洲成a人片,77777| 人人妻人人澡人人看| 先锋资源站中文字幕| 熟妇人妻 一区二区三区中文字幕| 亚洲成人久久久久| 久久伊人精品青青草原| 视频在线观看黄页| 国产精品久久久久久吹吹潮| 亚洲欧美日产人妻| 久久99免费成人在线| 亚洲国模在线视频| 亚洲aⅴ欧美综合一区二区三区| 99热在线精品免费观看| 一区二区三区乱码视频| 91在线无精精品一区二区| 亚洲一区二区三区久久aa| 精品成人1区2区3区在线看片| 香蕉久久a v一区二区三区| 蜜久久久91精品人妻| av日韩在线有码a区| 日韩大全毛片免费观看视频| 日本vs欧美一区二区三区| 国产一区二中文字幕在线免费观看| 亚洲欧美在线视频播放| av日韩中文字幕人妻| 亚洲情色av网站| 日韩中文字幕在线网站| 超碰97在线观看国产| 国产精品福利久久久久久久| 欧美一区二区三区成人免费看 | 成人黄色午夜污网站在线观看| 麻豆成人在线免费观看视频| 日韩欧美颜色渔网| 日韩av电影com| 99热精品国产影视久久久影院 | 久久久久久久久久性| 人妻少妇精品久久人妻| 蜜久久久91精品人妻| 99热这里只有的精品| 欧美日韩亚洲国产ay| 亚洲国产aⅴ精品一区二区欧美| 久久综合久久综合大香蕉| 成年人晚上免费看的视频| 少妇人妻成人在线| 精品一区二区三区四区人妻69| 日韩欧美激情入口| 日韩欧美综合一区二区在线| 五月激情婷婷网络| 99久久999久久久精品综合| 国产又粗又黄又大又长视频| 亚洲国产精品97久久宅男| 国产有码av一区二区| 国产日韩欧美人妻在线观看| 久久蜜桃视频亚洲精品| 久久人人爽爽人人爽av| 亚洲女人老师毛茸茸| 午夜精品福利小视频| 日本黄页在线播放日本网站| 一区二区三区四区中文字幕| 熟女大白屁股在线播放| 亚洲av激情小说| 日韩不卡高清视频| 一本色道久久亚洲综合精品蜜桃| 婷婷激情五月天图片| 亚洲成年人黄色片| 黑人粗大精品一区二区| 欧美一区二区三区激情无套| 欧美一二三区在线观看| 欧美视频 亚洲视频| 国产精品首页在线播放| 久久亚洲 欧美 综合aⅴ| 日韩欧美激情入口| 香蕉久久久久久久久久久久女| 中文字幕日韩天堂| 国产又粗又黄又大又长视频| 久久视频精彩在线观看| 五月黄色激情视频| 亚洲av微乳在线| 欧美日本韩国乱搞视频| 亚洲一区二区三区久久aa| 日韩美女主播人体视频自拍首页| av福利网站在线观看| 精品一区二区三区四区日产 | 日韩中文字幕有码人妻在线| 大尺度av一区二区三区| 久久精品国产av网| 久久精品国产亚洲av久丨| 日韩欧美亚州综合久久| 午夜精品福利小视频| 亚洲精品久久久久久久久蜜桃| 五月天丁香婷婷国产| 中文字幕熟女人妻在线网页| 婷婷亚洲天堂中文字幕| 日韩有码视频在线免费观看| 国产精品一区二区亚瑟不卡| 国产69tv精品久久| 日韩 美女 在线观看| 精品人妻二区中文字幕| 嫩草一区二区三区四区中文 | 久久一本麻豆天美欧美日韩| 亚洲激情有码一区二区| 日韩午夜激情福利免费| 日本精品久久久久中人妻| 久久久久999久久日| 久久在线人妻熟女高清完整版 | 亚洲欧美日韩中出| 欧美高清在线视频99| 国产欧美日韩亚洲另类第一第二页 | 久久精品美国亚洲av伦理| 美女18禁久久久久麻豆| 久久久久久网站精品免费| 国产99成人自拍视频| 福利日韩精品中文字幕专区| 欧美日韩人妻久久精品| 五月综合婷婷婷婷婷婷| 免费色婷婷在线视频| 91沈先生探花极品在线| 在线国产小视频麻豆| 亚洲aⅴ欧美综合一区二区三区| 香蕉在线蕉久在线| 亚洲av电影在线一区二区| 人人妻人人澡人人看| 91欧美亚洲综合网| 91国偷自产一区二区三区老熟女| 久久久精品蜜桃在线| 亚洲av网站女性向在线观看| 欧美一区二区精品人妻免费视频| 嫩草一区二区三区四区中文| 国产中文字幕在线91| 99热这里只有精品网| 伊人久久中文字幕综合观看| 亚洲欧美在线视频播放| 狠狠久久综合丁香777米奇| 婷婷激情五月天图片| 欧美3d成人动漫在线| 99日本亚洲精品视频| 天天操,天天干,天天| 67914熟女在线观看| 新版天堂av资源在线| 亚洲欧洲av在线| 搡老熟女一区二区三区老熟女| 精品蜜臀久久久久抄底 | 精品aa级中文字幕人妻| 亚洲aⅴ欧美综合一区二区三区| 欧美日韩久久久久久精品| 91久久国产综合久久91在线| 色图av亚洲综合| 熟女少妇一区二区精品| 亚洲国产精品成人精品软件| 精品无人区一区二区三区竹菊| 国产亚洲精久久久久久无码色戒| 久操免费福利在线视频观看视频 | 丰满的人妻一区七区| 人妻夜夜爽天天爽麻豆| 日韩午夜精品啪啪啪| 国产精品久久久久久久久久69| 视频一区视频二区三区| 精品人妻久久久久中文字幕19禁| 精品97人妻无码中文永久| 亚洲成年人电影天堂| 精品蜜臀久久久久抄底| 亚洲香蕉av电影| 天天日天天干一道一小| 在线观看日韩中文| 成年女人晚上碰免费视频| 久久精品人人看人人爽| 日韩色在线视频观看免费| 青青草青青操在线播放| 欧美一区二区三日韩| 亚洲欧洲av在线| 午夜精品久久久久久久久二区三区| 高清中文字幕乱码在线| 精品国产一区二区三区制服| 精品久久久久久18免费网站| 亚洲成a人片7777| 亚洲av综合久久伊人| 亚洲熟妇免费在线视频| 国产精品久久久久久久久久69| 高清不卡av在线网| 人妻精品无码一区二区三区| 欧美日韩在线卡一卡二卡三| 熟妇人妻 一区二区三区中文字幕| 乱女乱妇熟女熟妇综合站| 色哟哟视频在线观看国产| 日本最新中文字幕| 亚洲欧美国产另类91综合| 久久久96精品久久久| 七十路熟女俱乐部| 久久久久在线免费看| 精品激情视频在线免费观看| 国产欧美日韩制服丝袜在线| 色视频精品视频在线观看| 日日碰狠狠躁久久躁一区二区| 国产一区二区三区四区中文字幕| 麻豆网站在线免费看| 超碰在线免费成人午夜剧场97| 久久这里只有精品久| 日本女同性恋视频| 欧美日韩成人三级在线| 国产成人精品久久综合| 国产99成人自拍视频| 欧美日韩国产综合aⅴ| 熟女人妻之中文字幕| 日本熟妇人妻在线| 3d动漫一区二区在线观看| 日韩av电影在线观看的| 99精品视频69v精品视频| 久久一本麻豆天美欧美日韩| 国产成人av最新网址| 色哟哟免费在线播放| 免费人妻一区二区三区免费视频 | 少妇高潮喷水久久久久久桃花| 另类蜜桃刺激视频在线观看| 美日韩美女三级电影| 色婷婷中文字幕基地| 在线观看视频 你懂得| 午夜精品福利小视频| 最美人妻一区二区三区| 日本熟妇乱子伦a片在线观看 | 亚洲欧洲黄色图区| 五月天色图婷婷亚洲| 亚洲人的午夜影院| av青青草原在线观看| 精品国产乱码久久久久夜深| 久久国产精品色av免费看| av福利网站在线观看| 国产 另类 在线 欧美日韩| 久久99精品国产91| 色综合久久久久久久久| 欧美激情 另类视频 亚洲| 蜜桃视频在线观看一区精品| 素人阁久久久久精品人妻| 亚洲欧美av在线观看| sepapa自拍偷拍| 福利一福利二福利三| 最美人妻一区二区三区| 99精品中文字幕在线视频| 亚洲欧洲久久精品| 亚洲精选黄色在线观看| 亚洲国产精品97久久宅男| 亚洲一线产区二线产区区| 人人妻人人澡人人看| 欧美一区二区三区视频午夜| 国产91久久久久久久| 91麻豆精品91久久久久同性| 青娱乐国产视频盛| 精品人妻一区二区三区人妻视频| 欧美区 日韩区 国产区| 人妻人人揉人人澡人人| 国产又粗又黄又大又长视频| 亚洲久久精品午夜| 日本aaaa视频在线观看| 日本aaaa视频在线观看| 欧美肥臀精品一区二区三区| 精品人妻一区二区三区√| 欧美区 日韩区 国产区| 日本女优中文字幕在线| 欧美熟女vides| 亚洲欧美日韩在线中文字幕小| 欧美区 日韩区 国产区| 精品日韩偷拍欧美另类| 国产有码av一区二区| 欧美一区二区三区成人久久片| 日韩乱妇乱女熟妇熟女网红| 日韩男女av在线观看| 丰满大屁股熟妇猛交xxx| 四虎国产精品久久免费精品| 玖玖玖玖日在线视频| 精品国产丝袜久久久一区二区| 99热2这里只有精品| 91九色porny国产视频| 日韩成人免费电影三区| 欧美日韩在线观看大香蕉| 色哟哟视频在线一区| av色香蕉一区二区三区| 成人av电影免费版| 久久国产精品——国产精品| 久久视频这里都是精品| 色婷婷中文字幕基地| 91丝袜放荡丝袜脚交| 精品国产麻豆免费成人网| 欧美一区二区三区成人久久片| 精品一区二区三区四区人妻69| 欧美一区二区三区aa大片| 麻豆亚州av熟女国产一区二| 日韩美女影院免费在线观看| 丰满少妇精品一区二区| 99国产在线拍91揄自揄视| 久久国产精品——国产精品| 亚洲日本韩国欧美一起| 秋霞在线观看色哟哟视频| 综合 另类 自拍| 日韩精品午夜免费观看| 亚洲国产精品久久久久婷婷av| 无码人妻精品一区二区三区久久| 欧美一区二区三区激情无套| 欧美日韩成人精品视频| 蜜臀av日韩特黄大片| 亚洲国产精品国自产拍av麻豆| 97国产免费电影网| 久久视频免费有精品| 久久久国产精品尤物av| 日韩a毛片视频免费看| 蜜桃精品一区二区三区在| 日韩精品刺激视频| 亚洲精品网站成人久久综合| 麻豆丝袜美女人妻中文| 久久亚洲AV成人无码| 成年人晚上免费看的视频| 国产精品一区二区久久精品蜜臀| 久久久久久精品日韩| 人妻熟 中文字幕| 天天干天天插天天操天天日| 欧美熟女vides| 国产一区二区三区四区中文字幕 | 伊人久久热青青草| 亚洲精品久久久久久无几年桃| 亚洲欧美丝袜精品久久直播| 久久精品国产久精果冻传媒| 蜜臀av日韩特黄大片| 香蕉在线蕉久在线| 国产自拍 偷拍 在线| 久久精品美国亚洲av伦理| 日韩欧美综合一区二区在线| 日韩中文字幕在线网站| 中文字幕久久91| laoyawo老鸭窝在线视频| 国产69tv精品久久| 久久久九九九九九精品6| 午夜日韩麻豆福利| laoyawo老鸭窝在线视频| 在线国产小视频麻豆| 在线中文免费黄色| 亚洲狠狠婷婷综合久久a| 熟妇人妻 一区二区三区中文字幕| 久久人搡人人玩人妻精品| 亚洲欧美日韩中出| 美女在线观看亚洲一区| 久久爱免费视频16| av传媒高清影院免费| 亚洲成人影院中文字幕| 在线观看视频 你懂得| av一级二级三级久久久| 亚洲av高清不卡| 麻豆精品123在线观看| 少妇高潮喷水久久久久久桃花| 国产99不卡免费在线观看| 伊人久久热青青草| 国产欧美日韩精品专区黑人| 亚洲欧美日韩偷拍综合| 亚洲av狠狠地操你| 午夜精品久久久久久久久二区三区 | 亚州av一区二区三区.| 91免费版下载成人| 最新亚洲国产中文字幕av| 风间由美交换夫中文字幕| 国产又大又长又粗又硬免费视频 | 一区二区 熟女人妻| 亚洲欧美日韩综合专区| 亚洲国产精选久久| 999精品插丰满少妇人妻| 日韩欧美在线视频第一页| 欧美日韩久久久久久精品| japanese 在线中文字幕| 欧美一区二区三区,| 91国偷自产一区二区三区偷拍| 91啪啪啪内射网站| 精品久久精品久久久久| w疯狂的少妇2做爰韩国| 性欧美另类sex极品free| 99re热在线精品视频9| 国产精品久久久久一区二区| 日韩欧美颜色渔网| 国产激情综合视频在线观看| 亚洲欧美日产人妻| 天天日天天干一道一小| 中文字幕亚洲专区欧美| 婷婷中文字幕色婷婷| 国产成人无码AA精品一区| 日韩日韩av在线| 视频免费在线观看91| 久久视频精彩在线观看| 久久亚洲精品日韩高清| 国产日韩亚洲大尺度高清| 5858s在线视频| 亚洲天堂黄色在线| 国产熟女高潮av77777| 日本最新中文字幕| 亚洲乱精品中文字字幕| 草裙成人精品一区二区三区| 美国av 在线播放| 91久久久久久久久久粉嫩| 久久视频这里都是精品| 首页国产中文字幕av| 久久草免费在线视频| 国产精品久久久久久久久粉嫩av| 亚洲av综合色区手机| 亚洲av亚洲av亚洲| 日韩美女主播人体视频自拍首页| 亚洲狠狠久久综合一区| 人人狠狠久久综合网| 欧美激情欧美情色成人在线| 五月黄色激情视频| 蜜桃一区二区三区大香蕉| 久久五月婷婷综合视频| 一区二区三区精品乱子伦……| 精品日韩色国产在线观看| 午夜精品久久久久久久久二区三区 | 久久久久国产亚洲av麻豆| 国产视频av一区二区| 蜜桃黄色av网站免费播放| 少妇一区二区在线免费观看| 久久综合久久综合久久色| 91老司机免费福利| 一区二区三区乱码视频| 香蕉久久a v一区二区三区| 香蕉久久a v一区二区三区| 天天干天天插天天操天天日| 久久九特黄的免费大片| 日韩三级伦理片免费看| 激情婷婷综合久久五月天| 亚洲制服高清中文字幕| 日韩 美女 在线观看| 国产精品久久久久久xxx| 久久久久国产麻豆婷婷| 日韩少妇视频在线直播| 色视频精品视频在线观看| 色图av亚洲综合| 亚洲.欧美.日韩.| 中文字幕在线有码二区| av色香蕉一区二区三区| 97cao瑟瑟在线观看| 97国产人妻换人妻| 91高级会所在线播放| 久久五月婷婷综合视频| 日本久久久大片中文字幕| 制服巨乳人妻在线| 91大神精品大长腿在线观看 | 国产精品色呦呦视频免费看| 国产精品久久精品一区二区三区| 亚洲日本精彩视频在线观看| 国产亚洲天堂sss| 国产 日韩 欧美 日本| 99精品视频69v精品视频| 少妇高潮喷水久久久久久桃花| 久久免费视频精彩视频 | 欧美日本一道本一区二区| 欧美日韩精品成人在线| 亚洲av狠狠地操你| 精品日韩偷拍欧美另类| 中文字幕熟女人妻乳一区二区| 88在线观看91蜜桃国自产| 日本高清理论片中文字幕| 久久久久久久久久无吗| 国产成人免费精品视频大全 | 人妻丰满一区二区三区| 国产一区二中文字幕在线免费观看| 天天操,天天干,天天| 欧美日韩一区二区综合视频| 日韩乱妇乱女熟妇熟女网红| 久久免费视频观看99| 夜夜撸日日撸夜夜爽日日干| 久久久久久久精品综合| 99热这里只有的精品| 天天操天天干天天妻| 日韩日韩av在线| 精品一区二区三区四区| 青青草久久大香蕉| 9久久国产精品一区二区| 精品国产乱码久久久久久蜜坠欲下| 国产美女深喉口爆吞精免费| 首页国产中文字幕av| 久久久久久久免费女人体| 在线观看色有小视频| 国产乱子伦视频免费| 亚洲 欧美 自拍 中文| 欧美日本一道本一区二区| 国产精品男人的天堂999| 国产剧情高清在线观看| 精品99国内中文字幕| 国产又大又长又粗又硬免费视频| 国产人妻另类综合专区| 日本最新中文字幕| 国产精品亚洲精品成人| 亚洲av色图com| 偷偷夜夜精品一区二区三区蜜桃| 日韩 美女 在线观看| 91九色porny国产视频| 日本av都有哪些系列| 91老司机免费福利| 熟女激情一区二区三区| 久久久精品蜜桃在线| 亚洲久久久久久久人妻| 国产成人精品视频免费网站| 亚洲天堂网av中文字幕| 99国产在线 精品 视频| 麻豆免费国产福利免费国产福利| 人妻一区二区中文字幕在线| 在线免费观看日韩精品视频| 日韩日韩av在线| 五月综合婷婷婷婷婷婷| 中文字幕一区二区三区六区9区| 色视频在线观看123| 精品国产久久久久蜜臀| 亚洲一区二区三二区厕所偷拍| 蜜臀久久久久精品一区二区三区| 伊人久久婷婷色综合98网| 视频一区视频二区三区| 亚洲不卡一区av| 篠田优中文字幕在线播 | 精品久久中文字幕系列| 明天我们好好过高清免费| 最新亚洲国产中文字幕av| 最新精品成人在线| 91亚洲精品成人在线| 日本黄色成年视频| 亚洲另类色区欧美日韩| 亚洲av网站女性向在线观看| 婷婷激情免费视频| 中文字幕久久91| 91影视一区二区三区| 亚洲 欧洲 日韩 人妻| 亚洲最黄色的视频| 最新偷窥偷拍免费视频观看| 99久久窝窝午夜影视| 搡老熟女一区二区三区四区视频 | 日韩中文字幕理伦| 亚洲成年人电影天堂| 国产精品久久久久久久久久69| 精品蜜臀久久久久抄底| 麻豆在线视频看片免费| 亚洲欧美一二三视频| 97精品国产自在在线观看蜜臀| 精品一区二区三区四区日产| av在线免费观看网站大全| 亚洲成年人电影天堂| 久久97久久免费视频| 久久视频一区二区三| 91麻豆精品91久久久久同性 | 日韩av电影免费在线播放| 18禁成年av网站免费看| 亚洲最黄色的视频| 亚洲欧洲黄色图区| 日韩三级伦理片免费看| 日产av一区二区在线观看| 亚洲视频另类专区| 日韩av在线精品观看| 亚洲少妇黄色一级片| 久久久96精品久久久| 亚洲成人av久久久久| 亚洲精品久久久久久久久蜜桃| 欧美日韩人妻久久精品| 欧美日韩激情在线视频观看| 五月婷婷六月丁香资源| 成人黄色国产网站在线观看| 国产精品一区二区三区福利| 天天操,天天干,天天| 中文字幕在线视频亚洲| 欧美日韩国产综合aⅴ| 精品一区二区三区四区日产| 日韩精品午夜免费观看| 亚洲欧美av在线观看| 亚洲欧美av在线观看| 国产一区二区免费五遮挡| 99热这里只有精品网| 熟女少妇视频一区二区在线| 免费av网站在线浏览| 91久久国产综合久久91在线| av日韩在线免费观看网站| 精品一区二区三区四区人妻69| 热久久免费频精品18| 91国产视频网站在线观看| 国产日本精品久久久久| 少妇激情视频一区二区| 99久久久99久久91熟女| 欧洲美女黑人粗性暴交视| 久久久久久久久久久久久丰满| av熟妇翔田千里俱乐部| 日韩美女影院免费在线观看| 97精品国产自在在线观看蜜臀 | 黑人粗大精品一区二区| 99久久久免费毛片基地| 欧美人妻一区二区三区在线播放| 99热精品国产影视久久久影院| 67914熟女在线观看| 精品久久精品久久久久| 美女18禁久久久久麻豆| 久久免费视频精彩视频| 亚洲制服高清中文字幕| 人妻中文字幕一二三区| 欧美日韩成人三级在线| 亚洲国产精品久久久久婷婷av| 蜜臀av 麻豆av| 97久久视频免费在线播放| 精品日韩偷拍欧美另类| 99精品高清免费在线视频| 色综合色综合色综合久久| 久久亚麻亚洲蜜桃臀| 国产精品男人的天堂999| 蜜桃av 1区二区| 欧美日韩久久久久久精品| 国产自拍 偷拍 在线| 欧美视频 亚洲视频| 久久99久久com| 精品人妻一区二区三区人妻视频| 自拍偷拍亚洲欧美另类| 欧美人妻一区二区三区在线播放| 久久亚麻亚洲蜜桃臀| 久久久久久久夜精品精品| 国产一区二区久久久久久| 伊人久久中文字幕综合观看| 国产精品欧美日韩五月香蕉| 亚洲男人五月天堂| 色综合精品一区二区三区| 美女差点操死在线观看| 91偷拍老熟女露脸合集| 美女免费一二三区视频| 久久久久国产亚洲av麻豆| 日本av熟女人妻| 日韩欧美综合一区二区在线| www.视频一区二区三区| 欧美三级中文字幕久久精品| 最新美女激情av| 99九九99九九热视频| 欧美老熟妇重口另类xxx| 午夜精品久久久久久久久二区三区| 欧美不卡高清一区二区三区| 久久久久999久久日| 日韩尤物人妻av在线网| 亚洲精品乱码97久久久久久| 国产欧美一二三区视频| 91制片在线观看视频| 精品久久久久久亚洲国产999| 日韩尤物人妻av在线网| av岛国不卡在线观看| 四十路av熟女俱乐部| 天天干天天插天天操天天日| 亚洲狠狠婷婷综合久久a| 亚洲狠狠久久综合一区| 人妻一区二区中文字幕在线 | 国产精品一区二区久久精品蜜臀| 亚洲av激情小说| 亚洲国模私拍视频| 最新偷窥偷拍免费视频观看 | 久久久成人在线免费视频| 男人的天堂久久精平| 国产成人精品久久久女| av日韩中文字幕人妻| 久久国产精品人妻酒店| av日韩中文字幕人妻| 91插插插操美女视频| 免费a级电影在线观看| 一区二区三区内射美女毛片| 人妻丰满一区二区三区| 日韩免费美女电影| 欧美日韩精品亚洲欧美| 国产欧美日韩不卡在线观看| 四虎国产精品久久免费精品| 日本久久久大片中文字幕| aaaaa亚洲电影| 亚洲欧美日产人妻| 国产精品成人av麻豆| 日韩午夜激情福利免费| 999精品插丰满少妇人妻| 国产 日韩 欧美 日本| 国产日韩一区二区三区啪啪啪| 日韩国产精品电影网| 日韩在线免费视频精品| 亚洲熟妇av日韩熟妇在线| 亚洲av微乳在线| 天天在线天天综合网色| 亚洲 免费在线视频| 欧美又色又爽又黄又粗暴| 国产精品久久久久久xxx| 午夜影院av在线| 精品无人区一区二区三区竹菊| 国产91久久久久久久| 中文字幕一线一区和二区| 超碰在线免费成人午夜剧场97| 真实玩弄白嫩丰满人妻少妇三级| 欧美激情 另类视频 亚洲| 国产欧美日韩不卡在线观看| 色播五月激情四射| 亚洲中文字幕精品高清| 亚洲午夜电影久久久| 91高级会所在线播放| 在线观看色有小视频| 久久亚洲精品无码系列客服| 久久国产精品久久伊人麻豆|