日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

Android

我的Android进阶修炼:安卓启动流程之init(1)

發布時間:2023/12/29 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我的Android进阶修炼:安卓启动流程之init(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 我的Android進階修煉:安卓啟動流程之init(1)
    • 一、前言
    • 二、init進程簡介
      • 1.文件位置
      • 2.主要功能
    • 三、init進程源碼分析
      • 3.1 main() 源碼注解
        • 3.1.1 參考:setpriority
        • 3.1.2 參考:ueventd
        • 3.1.3 參考:InitLogging
        • 3.1.4 參考:SubcontextMain
        • 3.1.5 參考:selinux_setup
      • 3.2 FirstStageMain() 源碼注解
        • 3.2.1 參考:REBOOT_BOOTLOADER_ON_PANIC
        • 3.2.2 參考:umask(0)
        • 3.2.3 參考:_PATH_DEFPATH
        • 3.2.4 參考:/proc/cmdline
          • Android 12 的 cmdline
          • Android 11 的 cmdline
        • 3.2.5 參考:/proc/bootconfig
        • 3.2.6 參考:SetStdioToDevNull
          • (1) SetStdioToDevNull
          • (2) dup2
      • 四、篇尾

我的Android進階修煉:安卓啟動流程之init(1)

一、前言

希望深入研究Android系統,卻也一直找不到合適的方向,所以仿照大神做法,同樣,也以1號init進程為主軸,開始修煉吧!

  • 基于AOSP Android 9.0:android-9.0.0_r60
  • 調試平臺:模擬器

二、init進程簡介

1.文件位置

Main.cpp (system\core\init) 2594 2022/5/12

2.主要功能

  • 是用戶空間的1號進程,所有其他進程的父進程
  • 解析init.rc文件,按腳本創建、掛載各種目錄,啟動各種服務
  • 三、init進程源碼分析

    3.1 main() 源碼注解

    • system\core\init\Main.cpp
    init\Main.cpp編譯后的文件名為init,而int main(int argc, char** argv) { #if __has_feature(address_sanitizer)__asan_set_error_report_callback(AsanReportCallback); #endif// Boost prio which will be restored later// 參考:3.1.1// 設置當前進程的優先級為 -20,了解Android OOM機制的同學應該大致知道,優先級為負值是很高的優先級,基本不會被OOM killer(LMK)殺死。setpriority(PRIO_PROCESS, 0, -20);// 參考:3.1.2// init進程創建子進程ueventd,并將創建設備節點文件的工作托付給ueventd if (!strcmp(basename(argv[0]), "ueventd")) {return ueventd_main(argc, argv);}//如果參數大于1個,即至少2個及以上,則執行下面if塊的代碼//argc 大于1,根據上文提要,至少有2種情況:1. ./init subcontext 2. ./ueventd subcontextif (argc > 1) {if (!strcmp(argv[1], "subcontext")) {// 參考:3.1.3// 初始化日志系統android::base::InitLogging(argv, &android::base::KernelLogger);const BuiltinFunctionMap& function_map = GetBuiltinFunctionMap();// 參考:3.1.4// 跳轉到SubcontextMainreturn SubcontextMain(argc, argv, &function_map);}// 參考:3.1.5// 跳轉到SetupSelinuxif (!strcmp(argv[1], "selinux_setup")) {return SetupSelinux(argv);}// 參考:3.3// 本文重點:SecondStageMain,進入到init的第二階段if (!strcmp(argv[1], "second_stage")) {return SecondStageMain(argc, argv);}}// 參考:3.2// 本文重點:FirstStageMain,進入到init的第一階段 return FirstStageMain(argc, argv); }

    3.1.1 參考:setpriority

    #define PRIO_PROCESS 0 //進程

    #define PRIO_PGRP 1 //進程組

    #define PRIO_USER 2 //用戶進程

    /** *Linux setpriority系統調用用于設置進程,進程組,用戶進程的優先級,修改進程的nice值, nice值越小,進程的優先級越高。 * *當which為PRIO_PROCESS時,如果參數who為0,則設置當前進程的進程優先級;如果參數who不為0,則設置進程號為who的進程的優先級。 */ long setpriority(int which,int who,int niceval)

    3.1.2 參考:ueventd

    • ueventd的主要工作,是通過兩種方式創建設備節點文件:1.冷插拔(例如各板載設備);2.熱插拔(如U盤)
    // init\Main.cpp編譯后的文件名為init,而ueventd是指向init的一個軟連接。// 當執行軟連接./ueventd 的時候,實際執行的是init文件,而從大學C語言學習可知,argv[0]即所執行文件的文件名:ueventd。// 這是個非常巧妙的寫法,當檢測到執行的是 ./ueventd 的時候,即跳轉到 ueventd_main ()的實現中if (!strcmp(basename(argv[0]), "ueventd")) {return ueventd_main(argc, argv);}

    3.1.3 參考:InitLogging

    // Configure logging based on ANDROID_LOG_TAGS environment variable. // We need to parse a string that looks like // // *:v jdwp:d dalvikvm:d dalvikvm-gc:i dalvikvmi:i // // The tag (or '*' for the global level) comes first, followed by a colon and a // letter indicating the minimum priority level we're expected to log. This can // be used to reveal or conceal logs with specific tags. #ifdef __ANDROID__ #define INIT_LOGGING_DEFAULT_LOGGER LogdLogger() #else #define INIT_LOGGING_DEFAULT_LOGGER StderrLogger #endif void InitLogging(char* argv[],LogFunction&& logger = INIT_LOGGING_DEFAULT_LOGGER,AbortFunction&& aborter = DefaultAborter); #undef INIT_LOGGING_DEFAULT_LOGGER

    3.1.4 參考:SubcontextMain

    return SubcontextMain(argc, argv, &function_map);

    3.1.5 參考:selinux_setup

    if (!strcmp(argv[1], "selinux_setup")) {return SetupSelinux(argv); }

    3.2 FirstStageMain() 源碼注解

    • 字面意思,一目了然,此為init的第一階段,那啥是第一階段該干的活呢?
    • init進程第一階段做的主要工作是掛載所需分區,創建設備節點和一些關鍵目錄,初始化日志輸出系統,啟用SELinux安全策略
    int FirstStageMain(int argc, char** argv) {// 參考: 3.2.1// init崩潰時候重啟系統:只有userdebug 和 eng 版本的固件中, REBOOT_BOOTLOADER_ON_PANIC才會等于1if (REBOOT_BOOTLOADER_ON_PANIC) {InstallRebootSignalHandlers();}boot_clock::time_point start_time = boot_clock::now();std::vector<std::pair<std::string, int>> errors; #define CHECKCALL(x) \if ((x) != 0) errors.emplace_back(#x " failed", errno);// Clear the umask.// 參考: 3.2.2 // 權限掩碼清0,創建文件(含目錄等特殊文件)時,將使用默認權限umask(0);// 清除環境變量設定CHECKCALL(clearenv());// 參考:3.2.3 設置環境變量PATHCHECKCALL(setenv("PATH", _PATH_DEFPATH, 1));// 關鍵部分:從initramdisk中,獲取基礎的文件系統配置,然后讓rc文件解決剩下的問題 // Get the basic filesystem setup we need put together in the initramdisk// on / and then we'll let the rc file figure out the rest.// 掛載一個基于內存的分區,掛載目錄為 /dev, 并開始在/dev下創建一系列文件,包括設備節點,CHECKCALL(mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755")); CHECKCALL(mkdir("/dev/pts", 0755));CHECKCALL(mkdir("/dev/socket", 0755));CHECKCALL(mkdir("/dev/dm-user", 0755));// 掛載devpts遠程虛擬終端文件設備,文件夾里面一般是一些字符設備文件CHECKCALL(mount("devpts", "/dev/pts", "devpts", 0, NULL));// 掛載進程文件系統 #define MAKE_STR(x) __STRING(x)CHECKCALL(mount("proc", "/proc", "proc", 0, "hidepid=2,gid=" MAKE_STR(AID_READPROC))); #undef MAKE_STR// 參考:3.2.4// 讀取內核的配置參數// Don't expose the raw commandline to unprivileged processes.CHECKCALL(chmod("/proc/cmdline", 0440));std::string cmdline;android::base::ReadFileToString("/proc/cmdline", &cmdline);// Don't expose the raw bootconfig to unprivileged processes.// 參考:3.2.5// 讀取Android 用戶空間的配置參數chmod("/proc/bootconfig", 0440);std::string bootconfig;android::base::ReadFileToString("/proc/bootconfig", &bootconfig);// 將當前進程添加到 AID_READPROC 進程組,從而擁有讀取進程文件系統的權限gid_t groups[] = {AID_READPROC};CHECKCALL(setgroups(arraysize(groups), groups));// 下面繼續掛載所需的fs,創建所需的節點和目錄CHECKCALL(mount("sysfs", "/sys", "sysfs", 0, NULL));CHECKCALL(mount("selinuxfs", "/sys/fs/selinux", "selinuxfs", 0, NULL));CHECKCALL(mknod("/dev/kmsg", S_IFCHR | 0600, makedev(1, 11)));if constexpr (WORLD_WRITABLE_KMSG) {CHECKCALL(mknod("/dev/kmsg_debug", S_IFCHR | 0622, makedev(1, 11)));}CHECKCALL(mknod("/dev/random", S_IFCHR | 0666, makedev(1, 8)));CHECKCALL(mknod("/dev/urandom", S_IFCHR | 0666, makedev(1, 9)));// This is needed for log wrapper, which gets called before ueventd runs.CHECKCALL(mknod("/dev/ptmx", S_IFCHR | 0666, makedev(5, 2)));CHECKCALL(mknod("/dev/null", S_IFCHR | 0666, makedev(1, 3)));// These below mounts are done in first stage init so that first stage mount can mount// subdirectories of /mnt/{vendor,product}/. Other mounts, not required by first stage mount,// should be done in rc files.// Mount staging areas for devices managed by vold// See storage config details at http://source.android.com/devices/storage/CHECKCALL(mount("tmpfs", "/mnt", "tmpfs", MS_NOEXEC | MS_NOSUID | MS_NODEV,"mode=0755,uid=0,gid=1000"));// /mnt/vendor is used to mount vendor-specific partitions that can not be// part of the vendor partition, e.g. because they are mounted read-write.CHECKCALL(mkdir("/mnt/vendor", 0755));// /mnt/product is used to mount product-specific partitions that can not be// part of the product partition, e.g. because they are mounted read-write.CHECKCALL(mkdir("/mnt/product", 0755));// /debug_ramdisk is used to preserve additional files from the debug ramdiskCHECKCALL(mount("tmpfs", "/debug_ramdisk", "tmpfs", MS_NOEXEC | MS_NOSUID | MS_NODEV,"mode=0755,uid=0,gid=0"));// /second_stage_resources is used to preserve files from first to second// stage initCHECKCALL(mount("tmpfs", kSecondStageRes, "tmpfs", MS_NOEXEC | MS_NOSUID | MS_NODEV,"mode=0755,uid=0,gid=0")) #undef CHECKCALL// 參考:3.2.6// 將標準輸入、輸出、錯誤重定向到/dev/null SetStdioToDevNull(argv);// 從此處開始,就可以看到打印信息了// Now that tmpfs is mounted on /dev and we have /dev/kmsg, we can actually// talk to the outside world...InitKernelLogging(argv);// 先檢查下之前的過程中,是否有錯誤發生,如有錯誤則打印相關錯誤日志if (!errors.empty()) {for (const auto& [error_string, error_errno] : errors) {LOG(ERROR) << error_string << " " << strerror(error_errno);}LOG(FATAL) << "Init encountered errors starting first stage, aborting";}LOG(INFO) << "init first stage started!";auto old_root_dir = std::unique_ptr<DIR, decltype(&closedir)>{opendir("/"), closedir};if (!old_root_dir) {PLOG(ERROR) << "Could not opendir(\"/\"), not freeing ramdisk";}struct stat old_root_info;if (stat("/", &old_root_info) != 0) {PLOG(ERROR) << "Could not stat(\"/\"), not freeing ramdisk";old_root_dir.reset();}auto want_console = ALLOW_FIRST_STAGE_CONSOLE ? FirstStageConsole(cmdline, bootconfig) : 0;boot_clock::time_point module_start_time = boot_clock::now();int module_count = 0;if (!LoadKernelModules(IsRecoveryMode() && !ForceNormalBoot(cmdline, bootconfig), want_console,module_count)) {if (want_console != FirstStageConsoleParam::DISABLED) {LOG(ERROR) << "Failed to load kernel modules, starting console";} else {LOG(FATAL) << "Failed to load kernel modules";}}if (module_count > 0) {auto module_elapse_time = std::chrono::duration_cast<std::chrono::milliseconds>(boot_clock::now() - module_start_time);setenv(kEnvInitModuleDurationMs, std::to_string(module_elapse_time.count()).c_str(), 1);LOG(INFO) << "Loaded " << module_count << " kernel modules took "<< module_elapse_time.count() << " ms";}bool created_devices = false;if (want_console == FirstStageConsoleParam::CONSOLE_ON_FAILURE) {if (!IsRecoveryMode()) {created_devices = DoCreateDevices();if (!created_devices){LOG(ERROR) << "Failed to create device nodes early";}}StartConsole(cmdline);}if (access(kBootImageRamdiskProp, F_OK) == 0) {std::string dest = GetRamdiskPropForSecondStage();std::string dir = android::base::Dirname(dest);std::error_code ec;if (!fs::create_directories(dir, ec) && !!ec) {LOG(FATAL) << "Can't mkdir " << dir << ": " << ec.message();}if (!fs::copy_file(kBootImageRamdiskProp, dest, ec)) {LOG(FATAL) << "Can't copy " << kBootImageRamdiskProp << " to " << dest << ": "<< ec.message();}LOG(INFO) << "Copied ramdisk prop to " << dest;}// If "/force_debuggable" is present, the second-stage init will use a userdebug// sepolicy and load adb_debug.prop to allow adb root, if the device is unlocked.if (access("/force_debuggable", F_OK) == 0) {std::error_code ec; // to invoke the overloaded copy_file() that won't throw.if (!fs::copy_file("/adb_debug.prop", kDebugRamdiskProp, ec) ||!fs::copy_file("/userdebug_plat_sepolicy.cil", kDebugRamdiskSEPolicy, ec)) {LOG(ERROR) << "Failed to setup debug ramdisk";} else {// setenv for second-stage init to read above kDebugRamdisk* files.setenv("INIT_FORCE_DEBUGGABLE", "true", 1);}}if (ForceNormalBoot(cmdline, bootconfig)) {mkdir("/first_stage_ramdisk", 0755);// SwitchRoot() must be called with a mount point as the target, so we bind mount the// target directory to itself here.if (mount("/first_stage_ramdisk", "/first_stage_ramdisk", nullptr, MS_BIND, nullptr) != 0) {LOG(FATAL) << "Could not bind mount /first_stage_ramdisk to itself";}SwitchRoot("/first_stage_ramdisk");}if (!DoFirstStageMount(!created_devices)) {LOG(FATAL) << "Failed to mount required partitions early ...";}struct stat new_root_info;if (stat("/", &new_root_info) != 0) {PLOG(ERROR) << "Could not stat(\"/\"), not freeing ramdisk";old_root_dir.reset();}if (old_root_dir && old_root_info.st_dev != new_root_info.st_dev) {FreeRamdisk(old_root_dir.get(), old_root_info.st_dev);}SetInitAvbVersionInRecovery();setenv(kEnvFirstStageStartedAt, std::to_string(start_time.time_since_epoch().count()).c_str(),1);const char* path = "/system/bin/init";const char* args[] = {path, "selinux_setup", nullptr};auto fd = open("/dev/kmsg", O_WRONLY | O_CLOEXEC);dup2(fd, STDOUT_FILENO);dup2(fd, STDERR_FILENO);close(fd);// 以selinux_setup為參數,啟動1號進程// 即:/system/bin/init selinux_setupexecv(path, const_cast<char**>(args));// execv() only returns if an error happened, in which case we// panic and never fall through this conditional.PLOG(FATAL) << "execv(\"" << path << "\") failed";return 1; }

    3.2.1 參考:REBOOT_BOOTLOADER_ON_PANIC

    • 通過查找字符串,可知REBOOT_BOOTLOADER_ON_PANIC 在 init 的根目錄的MK 文件中定義。

    • 在編譯為:userdebug 和 eng 版本的固件中,不會打開該選項。

    # ./system/core/init/Android.mk:14 #ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT))) init_options += \-DALLOW_FIRST_STAGE_CONSOLE=1 \-DALLOW_LOCAL_PROP_OVERRIDE=1 \-DALLOW_PERMISSIVE_SELINUX=1 \-DREBOOT_BOOTLOADER_ON_PANIC=1 \-DWORLD_WRITABLE_KMSG=1 \-DDUMP_ON_UMOUNT_FAILURE=1 else init_options += \-DALLOW_FIRST_STAGE_CONSOLE=0 \-DALLOW_LOCAL_PROP_OVERRIDE=0 \-DALLOW_PERMISSIVE_SELINUX=0 \-DREBOOT_BOOTLOADER_ON_PANIC=0 \-DWORLD_WRITABLE_KMSG=0 \-DDUMP_ON_UMOUNT_FAILURE=0 endif
    • 主要作用是:當 init 進程崩潰時,重啟 bootloader,算是為了方便調試吧。
    • install_reboot_signal_handlers 函數將各種信號量,如 SIGABRT、SIGBUS 等的行為設置為 SA_RESTART,一旦監聽到這些信號即執行重啟系統。
    if (REBOOT_BOOTLOADER_ON_PANIC) {InstallRebootSignalHandlers(); }

    3.2.2 參考:umask(0)

    • 作用:umask設定創建文件時候的權限掩碼;
    • 定義函數: mode_t umask(mode_t mask);
    • 函數說明: 例如,在建立文件時默認文件權限為0666,通常umask值默認為 022,則該文件的真正權限則為0666&~022=0644,也就是rw-r–r–。
    // Clear the umask. // 創建文件時使用默認權限,不再額外設限 umask(0);

    3.2.3 參考:_PATH_DEFPATH

    • _PATH_DEFPATH 的定義在 Paths.h (bionic\libc\include) 2525 2022/5/16
    • 看到下面的定義,是不是開始熟悉init在干什么事情了 :)
    /** Default shell search path. */ #define _PATH_DEFPATH "/product/bin:/apex/com.android.runtime/bin:/apex/com.android.art/bin:/system_ext/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin"

    3.2.4 參考:/proc/cmdline

    • 存放了kernel的啟動參數,是由bootloader啟動kernel時傳入的
    • 從 Android 12開始,這里面只存放和kernel相關的參數,和android專用的上層環境相關的部分被挪移到新的變量/proc/bootconfig中
    • 對比示例:下面分別使用andorid 12和android 11的模擬器,可見andorid 12的內核啟動參數已經減少了很多
    Android 12 的 cmdline
    emulator64_x86_64_arm64:/ # cat /proc/cmdline stack_depot_disable=on cgroup_disable=pressure cgroup.memory=nokmem no_timer_check clocksource=pit console=0 cma=288M@0-4G ndns=4 loop.max_part=7 ramoops.mem_address=0xff018000 ramoops.mem_size=0x10000 memmap=0x10000$0xff018000 prin tk.devkmsg=on bootconfig ndns=4 mac80211_hwsim.radios=0 emulator64_x86_64_arm64:/ #
    Android 11 的 cmdline
    • 可見如官方原文描述,之前的版本中,在內核參數中混入了許多用戶空間參數,例如 androidboot.vbmeta.size
    generic_x86:/ # cat /proc/cmdline no_timer_check clocksource=pit console=0 cma=288M@0-4G ndns=4 mac80211_hwsim.channels=2 loop.max_part=7 ramoops.mem_address=0xff018000 ramoops.mem_size=0x10000 memmap=0x10000$0xff018000 printk.devkmsg=on qemu=1 androidboot.hardware=ranchu androidboot.serialno=EMULATOR31X2X8X0 qemu.gles=1 qemu.settings.system.screen_off_timeout=2147483647 qemu.encrypt=1 qemu.vsync=60 qemu.gltransport=pipe qemu.gltransport.drawFlushInterval=800 qemu.opengles.version=131072 qemu.dalvik.vm.heapsize=512m qemu.camera_protocol_ver=1 qemu.camera_hq_edge_processing=0 androidboot.vbmeta.size=6144 androidboot.vbmeta.hash_alg=sha256 androidboot.vbmeta.digest=ea5843921b6671f2d851ebf15e7b55f71e73fc36967778bca3be3e3cf4e15f28 androidboot.boot_devices=pci0000:00/0000:00:03.0 qemu.wifi=1 qemu.hwcodec.avcdec=2 qemu.hwcodec.vpxdec=2 android.qemud=1 qemu.avd_name=Pixel_2_API_30 ndns=4 mac80211_hwsim.radios=0 generic_x86:/ #

    3.2.5 參考:/proc/bootconfig

    • 官方解釋:在 Android 12 中,bootconfig 功能取代了 Android 11 及更低版本中使用的androidboot.*內核命令行選項。 bootconfig 功能是一種將配置詳細信息從構建和引導加載程序傳遞到 Android 12 的機制。

      此功能提供了一種將 Android 用戶空間的配置參數與內核的配置參數分開的方法。將冗長的androidboot.*內核參數移動到 bootconfig 文件會在內核 cmdline 上創建空間,并使其可用于將來的擴展。

    • 說人話,就是讀取Android 用戶空間的配置參數, 把原來放在/proc/cmdline內的一些專屬于android的配置,單獨拿出來放到/proc/bootconfig

    emulator64_x86_64_arm64:/ # cat /proc/bootconfig androidboot.qemu = "1" androidboot.qemu.cpuvulkan.version = "4202496" androidboot.qemu.settings.system.screen_off_timeout = "2147483647" androidboot.qemu.vsync = "60" androidboot.qemu.gltransport.name = "pipe" androidboot.qemu.gltransport.drawFlushInterval = "800" androidboot.qemu.adb.pubkey = "QAAAAGmCOckn0styCNC22zGZCLweCnuYNoL//HHIwzDjI5y81wQ87MaYtaJuJWdTujKIaQrxz6Jx8vVeasge40/yNCUiLHW4GCI2krn0mM41JJbGPMewb2TjnMUX+m8ORzqVuGm+kCFVNDFPQd+ID9sL/vihVmfMij1N3obU4F1YuoC7964PuJT7sqVJVIxUwD3AbNRmh v4zLSQoriStqTI2baeR6lcjeDOs/O1DqtnopB7BetGLqvF+aGC+huEai6VfgLsEqUlSPA1Ce5saF4u0vDypxmm6ax6w2q2D3BwCV5qphRg30Nelxb9pj7NvxSybJdVVkZSydM9zoitv8hJAFudUL1y+JeUeWH5iard/0vWp6iEBYnzmqKMlouIJBdXXkYRo/hQrXs/EDGYCrDEJe/vQdA2b3zbsvVDAxdc7tFpnU 46/c1Jjl5QLh+eReaHXmWASuuyIqD7WdeyBTfBeh1LRyAvqpjo8+qDP9t3MoIEXKjCgi/vi8lo5TFZQZ0FJ7XG1/ddtVzRH2bmAbVKQHR+rrRJFuUPUFSi3pamHjVkqAW7geY07gdD2V5RrxpO2NvbqdUgeGg7qmD6C5c1Pguija6r0/egIgaxUb0wIX0QLpCtqLqMv0Ed4cWg5ixZP4np+hI/u2EWyRgK8wi5Hi jXwDux2JTMphw4PZeEvzbrLyhH5CgEAAQA= @unknown" androidboot.qemu.camera_protocol_ver = "1" androidboot.qemu.camera_hq_edge_processing = "0" androidboot.qemu.virtiowifi = "1" androidboot.qemu.hwcodec.avcdec = "2" androidboot.qemu.hwcodec.vpxdec = "2" androidboot.qemu.avd_name = "Pixel_2_API_31" androidboot.hardware = "ranchu" androidboot.serialno = "EMULATOR31X2X8X0" androidboot.veritymode = "enforcing" androidboot.opengles.version = "131072" androidboot.logcat = "*:V" androidboot.dalvik.vm.heapsize = "512m" androidboot.vbmeta.size = "6272" androidboot.vbmeta.hash_alg = "sha256" androidboot.vbmeta.digest = "ea7166a14990ff9f4a2c9ed2cc7e869d4cde33137c4531a187242c84f42032a0" androidboot.boot_devices = "pci0000:00/0000:00:03.0" emulator64_x86_64_arm64:/ #

    3.2.6 參考:SetStdioToDevNull

    (1) SetStdioToDevNull
    • 將標準輸入(STDIN_FILENO)、輸出(STDOUT_FILENO)、錯誤(STDERR_FILENO)重定向到 /dev/null
    // The kernel opens /dev/console and uses that fd for stdin/stdout/stderr if there is a serial // console enabled and no initramfs, otherwise it does not provide any fds for stdin/stdout/stderr. // SetStdioToDevNull() is used to close these existing fds if they exist and replace them with // /dev/null regardless. // // In the case that these fds are provided by the kernel, the exec of second stage init causes an // SELinux denial as it does not have access to /dev/console. In the case that they are not // provided, exec of any further process is potentially dangerous as the first fd's opened by that // process will take the stdin/stdout/stderr fileno's, which can cause issues if printf(), etc is // then used by that process. // // Lastly, simply calling SetStdioToDevNull() in first stage init is not enough, since first // stage init still runs in kernel context, future child processes will not have permissions to // access any fds that it opens, including the one opened below for /dev/null. Therefore, // SetStdioToDevNull() must be called again in second stage init. void SetStdioToDevNull(char** argv) {// Make stdin/stdout/stderr all point to /dev/null.int fd = open("/dev/null", O_RDWR); // NOLINT(android-cloexec-open)if (fd == -1) {int saved_errno = errno;android::base::InitLogging(argv, &android::base::KernelLogger, InitAborter);errno = saved_errno;PLOG(FATAL) << "Couldn't open /dev/null";}dup2(fd, STDIN_FILENO);dup2(fd, STDOUT_FILENO);dup2(fd, STDERR_FILENO);if (fd > STDERR_FILENO) close(fd); }
    (2) dup2
    int dup2(int old_fd, int new_fd) {// If old_fd is equal to new_fd and a valid file descriptor, dup2 returns// old_fd without closing it. This is not true of dup3, so we have to// handle this case ourselves.if (old_fd == new_fd) {if (fcntl(old_fd, F_GETFD) == -1) {return -1;}return old_fd;}return FDTRACK_CREATE(__dup3(old_fd, new_fd, 0)); }

    四、篇尾

    未完待續……

    總結

    以上是生活随笔為你收集整理的我的Android进阶修炼:安卓启动流程之init(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    欧美日韩高清一区 | 一级片视频免费观看 | 成人黄色在线视频 | 日本中文字幕在线观看 | 成人在线视 | 国产精品第10页 | 在线视频app | 五月婷婷综合久久 | av线上看| 亚洲成年人免费网站 | 91免费版在线 | 国产裸体视频bbbbb | 亚洲精品一区二区三区在线观看 | 免费看高清毛片 | 久草在线久草在线2 | 欧美另类69| 狠狠色香婷婷久久亚洲精品 | 色综合久久悠悠 | 久草亚洲视频 | 四虎影视成人永久免费观看亚洲欧美 | 欧美日韩aa | 午夜999| 国产中文自拍 | 91毛片在线| 在线观看日韩一区 | 国产成人精品午夜在线播放 | 91免费版在线 | 91色网址| www.久久视频 | 久久久官网| 国产精品中文久久久久久久 | 久久久久久久久福利 | 久久天天拍 | 亚洲在线视频观看 | 91在线看免费| 国产成人中文字幕 | 免费观看完整版无人区 | 天天搞天天干 | 亚洲精品在线观看网站 | 人人爽人人爽人人片 | 日韩视频免费观看高清完整版在线 | 午夜精品久久久久久久99婷婷 | 91av片| 人人干人人草 | 久99久精品 | 久久试看| 欧美国产日韩一区二区三区 | 久久久精品成人 | 在线观看视频一区二区三区 | 免费在线观看黄网站 | 成人在线超碰 | 中文字幕在线观看视频一区 | 午夜影院一区 | 久久综合色一综合色88 | 亚洲精品国产成人av在线 | 99久久99热这里只有精品 | 国产亚州av | 色婷久久 | ,午夜性刺激免费看视频 | 日韩在线观看网站 | 91探花系列在线播放 | 亚洲黄色片一级 | 最近日本字幕mv免费观看在线 | 成年人在线观看网站 | 91九色自拍 | 日本精品一区二区在线观看 | 色是在线视频 | 97国产一区 | 色99之美女主播在线视频 | 四虎精品成人免费网站 | 91精品国产91 | 99精品视频精品精品视频 | 国产在线精品区 | 激情五月***国产精品 | 日韩视频www | 国产成人精品午夜在线播放 | 日韩三级.com | 伊人导航| 欧美日韩国产一区二区在线观看 | 免费人人干 | 亚洲国产美女精品久久久久∴ | 日韩av影视在线 | 免费看的黄色 | 中文字幕无吗 | 免费视频在线观看网站 | 亚洲视频久久久久 | 中国一级片在线观看 | 中文国产成人精品久久一 | 国产在线欧美在线 | 欧美日韩一区二区在线 | 九九视频免费观看视频精品 | 亚洲高清视频在线播放 | 亚洲精品久久久蜜臀下载官网 | 国产精品入口a级 | 中文在线a在线 | 超碰精品在线 | 97超碰国产在线 | www黄色软件 | 日韩欧美高清在线 | 91完整版在线观看 | 天堂网一区二区三区 | a级国产乱理论片在线观看 伊人宗合网 | 最新日韩在线观看 | 亚洲精品乱码久久久久久按摩 | 日韩在线一级 | 欧美一级片免费播放 | 亚洲精品在线播放视频 | 亚洲综合精品视频 | 国产精品永久免费视频 | 国内精品视频在线 | 国产亚洲一区 | 丁香激情综合 | 日韩日韩日韩日韩 | 五月婷婷久久丁香 | 日日爽天天操 | 亚洲男模gay裸体gay | 国产伦理久久精品久久久久_ | 欧美极品久久 | 91精品亚洲影视在线观看 | 婷婷色站 | 国产精品永久免费观看 | 亚洲精品在线国产 | 激情五月在线观看 | 日韩性xxx| 粉嫩高清一区二区三区 | 国产视频精品免费播放 | 日本h在线播放 | 五月婷视频 | 免费美女av| 美女视频免费精品 | 在线观看日本韩国电影 | 中文字幕一区二区三区视频 | 国产精品午夜在线观看 | 久久久亚洲影院 | 日韩午夜三级 | 久久成人资源 | 狠狠躁日日躁狂躁夜夜躁av | 亚州黄色一级 | 日韩专区在线播放 | 欧美一区二区精美视频 | 久久国产精品久久久久 | 天天色草| 国产精品成人一区二区三区吃奶 | 国产精品 日韩 欧美 | 激情喷水 | 免费看v片| 国产精品区二区三区日本 | 久久视频免费在线观看 | 国产欧美最新羞羞视频在线观看 | 日韩av片无码一区二区不卡电影 | 久久国产片 | www狠狠 | 中文字幕在线观看第二页 | 最新av中文字幕 | 欧美精品久久久久久久久久丰满 | 国产精品久久网站 | 久久大片| 成人免费看视频 | a黄色一级 | 成人av免费在线看 | www国产精品com | 久久不卡免费视频 | 激情综合色综合久久 | 中文字幕在线免费播放 | 一级c片| 成人免费在线播放视频 | 久久国产二区 | 国产美女网 | 天堂av影院| 色五月成人 | 超碰97国产精品人人cao | 久久99精品国产麻豆婷婷 | 国产精品嫩草55av | 色婷婷福利视频 | 中文字幕丝袜 | 久久久久亚洲精品国产 | 精品久久久久久久久久久久久久久久 | 91久久国产自产拍夜夜嗨 | 五月激情综合婷婷 | 免费福利在线观看 | 91亚洲精品久久久中文字幕 | 成人在线黄色 | 国产69熟 | 五月婷婷伊人网 | av丝袜天堂 | 99综合视频 | 国产视频精品久久 | 天天操天天摸天天爽 | 欧美乱熟臀69xxxxxx | 国产精品视频免费看 | 亚洲第一区在线播放 | 青青河边草手机免费 | 人人超碰在线 | 亚洲精品在线观看免费 | 午夜视频色 | 国产精品美女久久久久久久 | 天天综合网 天天 | 亚洲区另类春色综合小说校园片 | 亚洲 欧美 成人 | 亚洲第一区在线观看 | 日韩成年视频 | 超碰免费久久 | 亚洲国产免费 | 九九视频在线播放 | 国产精品久久久久久久久软件 | 日韩中文字幕网站 | 亚洲精品高清一区二区三区四区 | 特级xxxxx欧美 | 不卡av电影在线 | 狠狠操91| 亚洲女同videos | 国产香蕉在线 | 一区电影 | 亚洲精品乱码久久久久v最新版 | 亚洲免费av片| 久久久久国产免费免费 | 精品一区二区在线观看 | 日韩一区二区三区免费视频 | 97免费在线观看视频 | 亚洲黄色三级 | va视频在线 | 99免费看片 | 免费视频 三区 | 91亚洲精品久久久久图片蜜桃 | 免费在线观看国产黄 | 人人干人人添 | 欧美综合在线视频 | 久久久久免费电影 | 胖bbbb搡bbbb擦bbbb| 国产色在线观看 | 丁香婷婷激情 | 国产精品久久嫩一区二区免费 | 夜夜骑日日操 | 久久精品视频免费播放 | 国产精品久久99综合免费观看尤物 | 亚洲免费专区 | 国产成人a亚洲精品 | 色欧美日韩 | 日韩精品一区二区三区高清免费 | 亚洲精品国偷拍自产在线观看蜜桃 | 一区二区国产精品 | 日本中文乱码卡一卡二新区 | 奇米网444 | 99免费视频 | 午夜av大片 | 97av精品| 在线观看av不卡 | 九九热久久免费视频 | 美女精品网站 | 亚洲乱码在线 | 亚洲电影一区二区 | 成人久久综合 | 色婷在线| 久久深夜福利免费观看 | 国产精品免费在线视频 | 亚洲1区 在线 | 精品一区二区三区久久久 | 国产另类av | 黄色av免费电影 | 91视频 - x99av | 激情婷婷欧美 | 人人玩人人添人人 | 日韩av有码在线 | 91精品免费在线 | 久久综合免费视频影院 | 久久99深爱久久99精品 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 日韩免费电影在线观看 | 天天爽人人爽夜夜爽 | 精品一区二区三区电影 | 国产视频久久久 | 激情婷婷av | 麻豆 videos | 欧美一级乱黄 | 永久中文字幕 | 欧美精品在线免费 | 日韩一区二区三区高清免费看看 | 亚洲一级性 | 最新国产中文字幕 | 男女全黄一级一级高潮免费看 | 天天操狠狠操夜夜操 | 亚洲黄色在线免费观看 | 国产精品久久久亚洲 | 国产精品免费久久久久久久久久中文 | 精品久久久久免费极品大片 | 大型av综合网站 | 在线免费黄色片 | 欧美人体xx | 欧美精品乱码久久久久久按摩 | 欧美成人猛片 | 美女视频黄,久久 | 国产中文字幕在线观看 | 亚洲永久精品在线 | 色偷偷av男人天堂 | 久久爽久久爽久久av东京爽 | 国产精品久久影院 | 在线视频一区观看 | 黄色天堂在线观看 | 欧美日韩精品网站 | 欧美日韩天堂 | 精品亚洲国产视频 | 在线一二三区 | 国内精品久久久久影院优 | 中文字幕你懂的 | 欧美日韩国产mv | 丁香激情网 | 韩日三级在线 | av在线免费观看网站 | 曰韩精品| 九九久久久久久久久激情 | 日韩成人免费电影 | 久久黄色影院 | 97香蕉久久超级碰碰高清版 | 久久五月婷婷丁香 | 精品国产自在精品国产精野外直播 | 欧美久久久久久久久 | 亚洲一级电影 | 免费观看xxxx9999片 | 日韩理论在线播放 | 日韩一区二区免费视频 | 一本一道波多野毛片中文在线 | 日日夜夜天天久久 | 日韩欧美高清在线观看 | 丁香六月欧美 | 综合网天天色 | 豆豆色资源网xfplay | 国产操在线| 日韩另类在线 | 国产亚洲精品久久久久久网站 | 精品国产免费一区二区三区五区 | 又黄又网站 | 国产精品视频免费在线观看 | 久久综合电影 | 日韩精品在线观看av | 黄网站免费久久 | 午夜的福利 | 日韩久久精品一区二区 | 日韩av视屏在线观看 | 99精品国产一区二区 | 激情校园亚洲 | 婷婷视频在线 | www.av中文字幕.com | 午夜三级理论 | 日女人免费视频 | 国产精品99久久久久久人免费 | 婷婷五情天综123 | 91成人精品一区在线播放69 | 婷婷丁香花 | 国产视频精品在线 | 少妇搡bbbb搡bbb搡忠贞 | 亚洲精品一区二区三区新线路 | 中文字幕一区二区三区四区 | 最近高清中文字幕 | 国产精品99免视看9 国产精品毛片一区视频 | av一本久道久久波多野结衣 | 精品美女久久久久久免费 | 久久超碰99| 69亚洲视频 | 91av视频在线播放 | 欧美日韩不卡一区二区三区 | 免费看片网站91 | 男女视频国产 | 精品欧美一区二区三区久久久 | 婷婷综合激情 | avlulu久久精品| 婷婷伊人网 | 午夜精品福利一区二区三区蜜桃 | 天天综合91 | 国产97色| 久久综合综合久久综合 | 黄网在线免费观看 | 91精品对白一区国产伦 | 久久精品国产一区 | 一级黄色av | 91视频大全 | 日韩精品久久久久久久电影99爱 | 日本xxxx裸体xxxx17 | 九九九九九九精品任你躁 | 亚洲一区精品人人爽人人躁 | 日本在线观看一区二区 | 香蕉成人在线视频 | 天天天在线综合网 | 国产精品欧美日韩 | 夜添久久精品亚洲国产精品 | 91视频xxxx| 91福利视频免费观看 | 午夜av影院 | 亚洲成人精品影院 | 免费日韩 精品中文字幕视频在线 | 日韩系列 | 人人爽夜夜爽 | 一区二区三区四区在线免费观看 | 国产精品久久毛片 | 日日草av| 国产一区在线视频观看 | 亚洲精品免费在线视频 | 九九视频网 | 中文字幕日本特黄aa毛片 | 狠狠色伊人亚洲综合成人 | 欧美淫aaa免费观看 日韩激情免费视频 | 亚洲第二色 | 这里只有精彩视频 | 免费av网址在线观看 | 青草视频在线 | 亚洲成人精品在线观看 | 国产成人精品一区二三区 | 亚洲砖区区免费 | 国产精品视频一二三 | 日日躁你夜夜躁你av蜜 | 天天艹天天干天天 | 日本精品视频在线 | 日本最大色倩网站www | 在线观看精品黄av片免费 | 久久9999久久免费精品国产 | 91久久在线观看 | 午夜精品一区二区三区可下载 | 在线观看日韩免费视频 | 91伊人久久大香线蕉蜜芽人口 | 国产 视频 久久 | 亚洲国产精品小视频 | 天堂视频一区 | 免费大片黄在线 | 亚洲综合激情网 | 欧美成人在线免费观看 | 久久超| 天天色天天射天天综合网 | 久久精品精品电影网 | 天天插综合网 | 综合色狠狠 | 国产无套精品久久久久久 | 日韩成人邪恶影片 | 午夜狠狠操 | 天躁狠狠躁 | 久久香蕉一区 | 久久香蕉电影 | 成人va视频| 亚洲精品国产精品国自 | 久久极品 | 99久久久成人国产精品 | 免费黄色激情视频 | 成人久久精品视频 | 日韩欧美国产激情在线播放 | 欧美一级特黄高清视频 | 国产一区精品在线 | 国内精品小视频 | 精品日韩视频 | 国产在线自| 久久草在线视频国产 | 日本bbbb摸bbbb| 国产精品一区免费在线观看 | 亚洲欧美视频 | 深爱开心激情网 | 国产福利一区二区三区视频 | 韩国av一区二区 | 亚洲国产美女精品久久久久∴ | 久免费 | 视频成人永久免费视频 | 亚洲一区二区精品视频 | 天天躁日日躁狠狠躁av麻豆 | 日韩在线观看电影 | 久久精品久久久久 | 久久久久久电影 | 免费看av在线 | 久草在线在线精品观看 | 国产精品午夜在线观看 | 欧美精品乱码久久久久 | 探花视频免费在线观看 | 免费观看国产成人 | 国产一区高清在线 | 欧美日韩高清在线观看 | 99自拍视频在线观看 | 免费视频91 | 天天操夜夜摸 | 国产精品日韩高清 | 久久伊人免费视频 | 激情五月色播五月 | 国产人成一区二区三区影院 | 天天插天天操天天干 | 麻豆激情电影 | 婷婷久久一区 | 国产99在线 | 久久字幕 | 六月激情| 日本在线观看一区二区 | 亚洲欧美日韩国产一区二区三区 | 九色自拍视频 | 综合久久2023 | 国产a高清 | 中文字幕 二区 | 久久久久久高清 | 丁香综合网| 国产精品久久久久一区二区 | 国产91九色蝌蚪 | 久久超级碰 | www.国产高清| av中文在线播放 | 美女免费黄视频网站 | 国产中文字幕在线视频 | 在线观看成年人 | av免费黄色| 午夜免费福利视频 | 五月天久久久久久 | 免费a级毛片在线看 | www.夜夜草| 免费日韩 精品中文字幕视频在线 | 人人干人人草 | 中文永久免费观看 | 国产精品久久久久久久久久 | 成 人 黄 色 视频 免费观看 | 亚洲精品综合一二三区在线观看 | 91精品国| 久久精品久久99 | 亚洲精品视频播放 | 伊人开心激情 | 91中文字幕网 | 亚洲国产精品成人女人久久 | 久久久精品久久 | 97超视频| 成人福利av | 国产特级毛片aaaaaa高清 | 在线激情av电影 | 亚洲免费精彩视频 | 亚洲精品美女久久17c | 欧美国产一区二区 | 日韩欧美网站 | 久久8精品 | 永久免费毛片 | 成年性视频 | 黄在线免费看 | 国产成人精品av久久 | 久久成人精品电影 | 成人中文字幕+乱码+中文字幕 | 亚洲视频,欧洲视频 | 99性视频 | 日韩精品一卡 | av一区二区三区在线播放 | 四月婷婷在线观看 | 久久久免费国产 | 网址你懂的在线观看 | 日本精品久久久久 | 国产91勾搭技师精品 | 精品国产一区二区三区男人吃奶 | 欧美性超爽 | 最近日本韩国中文字幕 | 91av亚洲| 少妇按摩av | 在线观看免费日韩 | 久久综合九色综合久久久精品综合 | 久久成人国产精品 | 国产亚洲成人网 | 日韩欧美视频在线免费观看 | 久要激情网 | 亚洲视频www | 最新日韩在线观看视频 | 精品伊人久久久 | 免费日韩av电影 | 日韩字幕在线观看 | 国产亚洲精品电影 | 人交video另类hd| 五月婷在线 | 久久激五月天综合精品 | 在线看国产精品 | 久久亚洲欧美日韩精品专区 | 黄色大片视频网站 | 日本三级吹潮在线 | 又黄又爽又无遮挡的视频 | 丁香婷婷综合激情五月色 | 亚洲精品五月 | 天天色天天综合网 | 久久精品国产免费看久久精品 | 美女黄濒 | 日日干av | 涩五月婷婷| 新版资源中文在线观看 | 久久免费a | 激情av在线播放 | 国产手机视频在线 | 久久免费资源 | 高清不卡一区二区三区 | 成人久久亚洲 | 久久久久在线观看 | 超级av在线| 美女很黄免费网站 | 在线a视频 | 国产精品情侣视频 | 久久久久久久久久久久久久av | 久草在线免费播放 | 日韩免费一区二区在线观看 | 久久综合五月天 | 国产精品自产拍 | 夜夜嗨av色一区二区不卡 | 免费在线播放黄色 | 国产精品美女久久久久久久久 | 久久综合九色综合网站 | 亚洲国产成人在线播放 | 日韩大片在线免费观看 | 久久午夜网 | 永久免费毛片在线观看 | 国产精品久久久久久久久免费 | 亚洲精品乱码久久久久久蜜桃91 | 波多野结衣电影一区二区三区 | 中文国产在线观看 | 色开心| 久久99国产综合精品免费 | 免费观看一区二区三区视频 | 亚洲激情综合网 | 91精品国产综合久久福利不卡 | 亚洲精品www | 99久久国产免费免费 | 亚洲精品一区二区三区四区高清 | 国产精品一区欧美 | 中文字幕视频网 | 91视频一8mav | 五月天久久狠狠 | 黄色免费网站 | 成人黄色免费观看 | 色视频在线观看 | 国产精品男女 | 亚洲日本韩国一区二区 | 夜夜澡人模人人添人人看 | 国产探花 | 国产色网 | 久久 国产一区 | 不卡的av在线播放 | 久久久久免费看 | 欧美吞精 | 日韩天堂在线观看 | 亚洲清纯国产 | 久久免费福利 | 成人久久免费 | 欧美亚洲久久 | 99在线热播精品免费99热 | 天堂在线一区 | 中文字幕在线资源 | 色诱亚洲精品久久久久久 | 激情图片久久 | 97精品超碰一区二区三区 | 久久久亚洲麻豆日韩精品一区三区 | 成人网在线免费视频 | 日韩av中文字幕在线免费观看 | 中文字幕在线观看日本 | 日韩在线免费不卡 | 国内偷拍精品视频 | 久久影院亚洲 | 在线观看免费黄色 | 九九九九九精品 | 日韩视频1区 | 久久国产精品99国产精 | 国产免费小视频 | 亚洲伊人天堂 | 欧美日韩精品在线视频 | 日本天天操 | 青青草视频精品 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 亚洲综合射 | 午夜精品成人一区二区三区 | 一个色综合网站 | 91在线观看欧美日韩 | 亚洲黄色大片 | 天天干天天操天天搞 | 天天激情 | 久久91久久久久麻豆精品 | 亚洲国产精品推荐 | 日本精品久久久久 | 欧美精品一区二区性色 | 亚洲成人精品在线观看 | 2024国产精品视频 | 婷婷黄色片 | 伊人色综合久久天天网 | 91精品无人成人www | 国产成a人亚洲精v品在线观看 | 人人干,人人爽 | 欧美久久久久久久久中文字幕 | 亚洲精品视频在线免费播放 | 国产剧在线观看片 | 国产亚洲亚洲 | 在线免费三级 | 97超视频免费观看 | 日韩在线观看精品 | 亚洲一级片在线观看 | 国产美女无遮挡永久免费 | 激情av网 | 国产99在线免费 | 久久69av| 久久区二区 | 99热九九这里只有精品10 | 一区二区三区四区精品视频 | 视频在线播放国产 | 91黄色小网站 | 一区二区视频在线免费观看 | 日日激情 | 98超碰在线 | 在线观看黄色国产 | 中文字幕一区在线观看视频 | 天天视频色版 | 国产资源免费 | 亚洲欧美视频在线播放 | 色中色亚洲 | 亚洲国产欧美一区二区三区丁香婷 | 国产亚洲视频在线观看 | 在线观看黄色小视频 | 免费视频成人 | 综合久久精品 | 国产成人精品999 | 久久久免费看片 | 久久久久久网站 | 久久伊人精品一区二区三区 | 日韩a免费| 亚洲人人av | 最近中文字幕大全 | 视频国产一区二区三区 | 私人av| 最近日本字幕mv免费观看在线 | 精品一区二区免费在线观看 | 综合天天色 | 91精品人成在线观看 | 久久午夜电影院 | 国产一级特黄电影 | 超碰97国产在线 | 在线免费观看羞羞视频 | 91免费试看| 国产美女久久 | 久久99视频免费观看 | 日日久视频 | 欧美色图88| 国产精品欧美一区二区 | 黄色一级免费 | 永久黄网站色视频免费观看w | 日韩网站在线看片你懂的 | 国产高清中文字幕 | 久久美女精品 | 久久久久久久网 | 欧美va天堂在线电影 | 亚洲黄色三级 | 午夜视频不卡 | 亚洲专区 国产精品 | 欧美成人在线网站 | 97在线视 | 久久精品视频网 | 91在线免费视频观看 | a√天堂资源 | 91在线小视频 | 天天干天天插伊人网 | 色视频成人在线观看免 | 96av视频 | 中文字幕在线播放日韩 | 欧美午夜精品久久久久久孕妇 | 中文字幕在线不卡国产视频 | 国产在线精品区 | 精品福利视频在线 | 日韩试看| 久久99国产精品视频 | 一区二区三区在线免费播放 | 探花视频在线观看+在线播放 | 日韩av午夜 | 久久久久久久国产精品影院 | 久久国产免费视频 | 国产精品视频在线看 | 麻豆果冻剧传媒在线播放 | 欧美一级电影在线观看 | 天天躁天天狠天天透 | 国产91全国探花系列在线播放 | 久久久久电影 | 婷婷综合电影 | 精品国产一区二区三区久久影院 | 天天爱天天插 | 99草在线视频 | 狠狠躁日日躁夜夜躁av | 久久网页 | 国产婷婷一区二区 | 欧美 另类 交| 日产乱码一二三区别免费 | 日日夜夜综合网 | 美女久久网站 | 日韩国产欧美在线视频 | 亚洲精品国产欧美在线观看 | 91视频中文字幕 | 国产精品久久久久久久久免费 | 西西www4444大胆视频 | 成人在线视频你懂的 | 97超碰伊人| 精品主播网红福利资源观看 | 五月婷婷丁香六月 | 天干啦夜天干天干在线线 | 亚洲精品在线一区二区三区 | 久久成人精品电影 | 国内精品视频久久 | 精品久久久久久久久久久久 | 亚洲首页 | 日本最新中文字幕 | 国产一级性生活视频 | av网站有哪些 | 少妇啪啪av入口 | 在线免费观看一区二区三区 | 久国产在线播放 | 97在线精品国自产拍中文 | www狠狠| 人人爽爽人人 | 99视频99| 天天综合色网 | 欧美激情第28页 | 久久精品视频在线观看免费 | 天天干天天干天天色 | 色婷婷免费视频 | 免费看国产一级片 | 成人影视免费看 | 日韩av电影手机在线观看 | 免费色网 | 色综合久久久 | 97综合视频 | 亚洲精品国产精品乱码在线观看 | 超碰在线公开免费 | 日韩免费视频一区二区 | 欧美性色网站 | 中文字幕在线视频第一页 | 狠狠狠色丁香综合久久天下网 | 亚洲人精品午夜 | 国产精品一区在线 | 夜添久久精品亚洲国产精品 | 成年人在线观看视频免费 | 日韩欧美视频在线免费观看 | 四虎永久国产精品 | 日韩高清免费无专码区 | 一级α片 | 国产精品午夜8888 | 亚洲专区在线 | 中文在线a天堂 | 91亚洲精品久久久 | 97精品久久人人爽人人爽 | 中文字幕一区二区三区乱码在线 | 91精品国产欧美一区二区 | 欧美日韩一区三区 | 91在线在线观看 | 成人久久毛片 | 91视频免费网址 | 免费观看版 | 久草免费在线 | 欧美怡红院视频 | 国产四虎在线 | 久久久久久久久艹 | 国产精品自产拍在线观看中文 | 午夜精品一区二区三区可下载 | 久久涩视频 | 国产精品毛片久久久久久久久久99999999 | 色狠狠干 | 91大神精品视频在线观看 | 亚洲色视频| 欧美精品免费在线观看 | 麻豆精品在线视频 | 国产盗摄精品一区二区 | 91污在线 | 久草91视频| 四虎影视成人精品国库在线观看 | 81精品国产乱码久久久久久 | 久草在线高清 | 欧美视屏一区二区 | 久久手机精品视频 | 久久国内免费视频 | 日韩电影在线观看一区二区三区 | 欧美一级片 | 正在播放五月婷婷狠狠干 | 热久久免费国产视频 | 日韩免费视频在线观看 | 久久国产91 | 美女视频黄免费的 | 91丨九色丨国产在线观看 | 久久精视频 | a极黄色片 | 9999在线 | 天天天操操操 | 精品国产综合区久久久久久 | 精品久久久久久久 | 探花视频在线观看免费 | 亚洲精品在线电影 | 一本到视频在线观看 | 亚洲欧美一区二区三区孕妇写真 | 亚洲精品1234区 | 久久艹艹 | 99精品视频一区 | aaa日本高清在线播放免费观看 | 91在线观看视频网站 | 国内丰满少妇猛烈精品播放 | 最近免费中文视频 | 国产综合激情 | 亚洲精品av中文字幕在线在线 | 亚洲精品综合在线观看 | 精品久久久久久久久久 | 精品国产免费观看 | 国产少妇在线观看 | 麻豆传媒视频在线播放 | 日韩精品一区二区三区免费观看视频 | 天天操狠狠操网站 | 久久久精品久久日韩一区综合 | 日韩精品久久一区二区三区 | 色香蕉在线 | 日韩精品资源 | 婷婷综合影院 | 四虎4hu永久免费 | 国产福利91精品张津瑜 | 亚洲午夜精品一区二区三区电影院 | 成 人 黄 色 片 在线播放 | 色婷婷国产精品一区在线观看 | 精品国内自产拍在线观看视频 | 中文字幕在线视频网站 | 国产视频亚洲 | 黄色三级免费片 | 99久久精品日本一区二区免费 | 国产五码一区 | 日韩免费一二三区 | 在线日本看片免费人成视久网 | 国产香蕉视频在线播放 | 国产精品高清在线观看 | 中文字幕中文字幕在线中文字幕三区 | 久草线 | 99九九免费视频 | 狠狠色丁香九九婷婷综合五月 | 日韩在线视频播放 | 婷婷综合在线 | 中文字幕国产精品 | 国产精品99久久免费观看 | 中文字幕久久亚洲 | av在线免费播放网站 | 97国产精品视频 | 亚洲精品视频在线看 | 精品国产精品久久 | 久久视频精品 | 男女啪啪网站 | 欧美一级日韩免费不卡 | 国产精品 亚洲精品 | 国产精品自产拍在线观看桃花 | 成人国产精品av | www色片 | 在线天堂亚洲 | 久久永久免费视频 | 国产精品嫩草69影院 | 久久黄色a级片 | 亚洲精品女人久久久 | 欧美五月婷婷 | 人人玩人人添人人澡超碰 | 久草在线国产 | 五月婷婷丁香综合 | 国语麻豆| 久久久电影网站 | 一区免费观看 | 日韩亚洲在线观看 | 国产不卡在线播放 | 久久久免费看视频 | 国产经典av| 色婷婷婷| 欧美日韩精品免费观看 | 涩涩网站在线观看 | 麻豆免费在线播放 | 国产精品福利在线 | 亚洲激情影院 | www在线观看国产 | 久久与婷婷 | 又黄又爽又刺激视频 | 国产精品99久久久久久大便 | 日韩特级黄色片 | 国产精品wwwwww | 高清日韩一区二区 | 99精品视频在线 | 久草久草在线观看 | 韩日电影在线观看 | 美女网站在线免费观看 | 婷婷久久一区二区三区 | 久久免费片| 国产精品欧美一区二区三区不卡 | 亚洲乱亚洲乱妇 | 在线韩国电影免费观影完整版 | 青草视频在线播放 | 91在线视频网址 | 欧美精品国产综合久久 | 在线观看视频亚洲 | 亚洲精品自在在线观看 | 一区二区三区四区五区在线视频 | 色综合久久综合中文综合网 | 日韩av专区 | 国产电影黄色av | 婷婷精品国产一区二区三区日韩 | 亚洲区色 | 深夜免费福利 | 日韩电影在线观看一区二区 | 伊人www22综合色 | 中文字幕在线中文 | 一级片视频在线 | 日p视频在线观看 | 国产精品 视频 | 日韩在线免费电影 | 国产精品18久久久久久久久 | 国内精品久久久久久久久久 | www.久久精品视频 | 久久精品国产一区二区三区 | 国产免费黄视频在线观看 | 91福利国产在线观看 | 99热只有精品在线观看 | 国产二区视频在线 | 久久av电影 |