精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux啟動分析——init進(jìn)程與app啟動

系統(tǒng) Linux
本文通過簡要分析init進(jìn)程源碼,梳理其處理流程,重點(diǎn)關(guān)注init進(jìn)程如何啟動應(yīng)用程序,總結(jié)啟動腳本文件的編寫思路。

概述

本文通過簡要分析init進(jìn)程源碼,梳理其處理流程,重點(diǎn)關(guān)注init進(jìn)程如何啟動應(yīng)用程序,總結(jié)啟動腳本文件的編寫思路

init進(jìn)程源碼分析

init進(jìn)程是linux內(nèi)核啟動的第一個進(jìn)程,怎么知道的?從內(nèi)核源碼linux-2.6.xxx/init/main.c代碼的kernel_init()函數(shù)分析,可以發(fā)現(xiàn),內(nèi)核會根據(jù)uboot傳入的參數(shù)來啟動第一個進(jìn)程,一般都是init

怎么啟動的呢,調(diào)用kernel_execve()函數(shù)完成的,猜測是從根文件系統(tǒng)的/sbin/init來啟動的,linux的任何應(yīng)用程序都是基于文件系統(tǒng)的,啟動應(yīng)用程序前提是根文件系統(tǒng)已經(jīng)掛載好了。好,那么根文件系統(tǒng)又是從哪里來的呢,是由busybox這個工具配置編譯生成的,所以要分析init源碼,要去busybox里找init的源碼

源碼位置:/busybox/init/init.c,在其中查找main()函數(shù),發(fā)現(xiàn)只有init_main(),沒有main(),可以猜測busybox是通過一些方法將init進(jìn)程的入口修改為init_main(),實(shí)際上所有busybox的命令工具都是一個到busybox程序的鏈接,

  1. cd /sbin 
  2. ls -l init 
  3. lrwxrwxrwx 1 root 0 14 Nov 16 2016 init -> ../bin/busybox  

可以看到,init進(jìn)程其實(shí)是到busybox的鏈接,不用管它,知道init進(jìn)程的入口是init_main()函數(shù)就行了

  1. #if DEBUG_SEGV_HANDLER 
  2.     { 
  3.         struct sigaction sa; 
  4.         memset(&sa, 0, sizeof(sa)); 
  5.         sa.sa_sigaction = handle_sigsegv; 
  6.         sa.sa_flags = SA_SIGINFO; 
  7.         sigaction(SIGSEGV, &sa, NULL); 
  8.         ...... 
  9.     } 
  10. #endif 
  11. ...... 
  12. console_init(); 
  13. set_sane_term(); 
  14. ...... 
  15. /* Make sure environs is set to something sane */ 
  16. putenv((char *) "HOME=/"); 
  17. putenv((char *) bb_PATH_root_path); 
  18. putenv((char *) "SHELL=/bin/sh"); 
  19. putenv((char *) "USER=root"); /* needed? why? */  

這一段是init進(jìn)程最開始要做的事情,設(shè)置一些信號相關(guān)的東西,初始化console,然后設(shè)置環(huán)境變量,跟啟動app似乎沒有什么關(guān)系,不用管,繼續(xù)往下看

  1. /* Check if we are supposed to be in single user mode */ 
  2. if (argv[1] 
  3.  && (strcmp(argv[1], "single") == 0 || strcmp(argv[1], "-s") == 0 || LONE_CHAR(argv[1], '1')) 
  4. ) { 
  5.     /* ??? shouldn't we set RUNLEVEL="b" here? */ 
  6.     /* Start a shell on console */ 
  7.     new_init_action(RESPAWN, bb_default_login_shell, ""); 
  8. else { 
  9.     /* Not in single user mode - see what inittab says */ 
  10.  
  11.     /* NOTE that if CONFIG_FEATURE_USE_INITTAB is NOT defined, 
  12.      * then parse_inittab() simply adds in some default 
  13.      * actions (i.e., INIT_SCRIPT and a pair 
  14.      * of "askfirst" shells) */ 
  15.     parse_inittab(); 
  16.  

這一段代碼是一個if判斷,注釋說如果是single user mode,則走上半段代碼,如果不是single user mode,則調(diào)用parse_inittab() 函數(shù),因?yàn)閮?nèi)核啟動init進(jìn)程沒有傳入附加參數(shù),所以argv[1]不存在,程序走parse_inittab()

注釋還說如果沒有定義CONFIG_FEATURE_USE_INITTAB 這個宏,程序會執(zhí)行一些默認(rèn)的action,那怎么知道這個宏定義了沒有呢,猜測這個宏應(yīng)該是對busybox配置時(shí)的選項(xiàng),好,怎么查看busybox配置呢,和linux內(nèi)核配置一樣的道理,結(jié)合make menuconfig和各級config文件來看

是否定義了宏CONFIG_FEATURE_USE_INITTAB?

在busybox中執(zhí)行make meunconfig,進(jìn)入熟悉的配置界面

 

大概瀏覽一下,和init有關(guān)系的好像有個Init Utilities項(xiàng),進(jìn)去

 

這里面有一項(xiàng)“Support reading an inittab file”,這個配置項(xiàng)是選中的,描述中有“inittab”這個單詞,和init源碼中說到的parse_inittab()很相似,好,make menuconfig先放到一邊,來看看配置文件,打開頂層目錄的Config.in,全局搜一下"init",發(fā)現(xiàn)只有最下面有:

  1. source init/Config.in 

進(jìn)入init文件夾,打開其中的Config.in文件,發(fā)現(xiàn)配置項(xiàng)

  1. config FEATURE_USE_INITTAB 
  2.     bool "Support reading an inittab file" 
  3.     default y 
  4.     depends on INIT 
  5.     help 
  6.       Allow init to read an inittab file when the system boot.  

猜測沒錯,CONFIG_FEATURE_USE_INITTAB這個宏確實(shí)定義了,回到init源碼分析,進(jìn)入parse_inittab()函數(shù)。首先看到這個函數(shù)前有一大段注釋,看看它說什么

  1. /* NOTE that if CONFIG_FEATURE_USE_INITTAB is NOT defined, 
  2.  * then parse_inittab() simply adds in some default 
  3.  * actions (i.e., runs INIT_SCRIPT and then starts a pair 
  4.  * of "askfirst" shells).  If CONFIG_FEATURE_USE_INITTAB 
  5.  * _is_ defined, but /etc/inittab is missing, this 
  6.  * results in the same set of default behaviors. 
  7.  */  

前面的話和之前的if判斷意思差不多,如果定義了XXX這個宏,但是/etc/inittab這個文件沒有,也會走默認(rèn)的action,好,大概猜想一下,parse_inttab()函數(shù)好像和要分析的app啟動有點(diǎn)關(guān)系了,如果定義了XXX宏,就去解析/etc/inittab這個文件,執(zhí)行里面的東西,如果沒有定義XXX宏或者/etc/inittab文件不存在,執(zhí)行一些默認(rèn)的東西

好,搞清楚一件事,/etc/inittab這個文件很重要,可能需要自己來創(chuàng)建這個文件,往里面寫東西,但是寫什么內(nèi)容呢?目前還不知道。那如果不走/etc/inittab這一條路呢,默認(rèn)會執(zhí)行的action又是什么意思?來分析一下parse_inittab()這個函數(shù)

  1. static void parse_inittab(void) 
  2. #if ENABLE_FEATURE_USE_INITTAB 
  3.     char *token[4]; 
  4.     parser_t *parser = config_open2("/etc/inittab", fopen_for_read); 
  5.  
  6.     if (parser == NULL
  7. #endif 
  8.     { 
  9.         /* No inittab file - set up some default behavior */ 
  10.         /* Sysinit */ 
  11.         new_init_action(SYSINIT, INIT_SCRIPT, ""); 
  12.         /* Askfirst shell on tty1-4 */ 
  13.         new_init_action(ASKFIRST, bb_default_login_shell, ""); 
  14. //TODO: VC_1 instead of """" is console -> ctty problems -> angry users 
  15.         new_init_action(ASKFIRST, bb_default_login_shell, VC_2); 
  16.         new_init_action(ASKFIRST, bb_default_login_shell, VC_3); 
  17.         new_init_action(ASKFIRST, bb_default_login_shell, VC_4); 
  18.         /* Reboot on Ctrl-Alt-Del */ 
  19.         new_init_action(CTRLALTDEL, "reboot"""); 
  20.         /* Umount all filesystems on halt/reboot */ 
  21.         new_init_action(SHUTDOWN, "umount -a -r"""); 
  22.         /* Swapoff on halt/reboot */ 
  23.         new_init_action(SHUTDOWN, "swapoff -a"""); 
  24.         /* Restart init when a QUIT is received */ 
  25.         new_init_action(RESTART, "init"""); 
  26.         return
  27.     } 
  28.  
  29. #if ENABLE_FEATURE_USE_INITTAB 
  30.     /* optional_tty:ignored_runlevel:action:command 
  31.      * Delims are not to be collapsed and need exactly 4 tokens 
  32.      */ 
  33.     while (config_read(parser, token, 4, 0, "#:"
  34.                 PARSE_NORMAL & ~(PARSE_TRIM | PARSE_COLLAPSE))) { 
  35.         /* order must correspond to SYSINIT..RESTART constants */ 
  36.         static const char actions[] ALIGN1 = 
  37.             "sysinit\0""wait\0""once\0""respawn\0""askfirst\0" 
  38.             "ctrlaltdel\0""shutdown\0""restart\0"
  39.         int action
  40.         char *tty = token[0]; 
  41.  
  42.         if (!token[3]) /* less than 4 tokens */ 
  43.             goto bad_entry; 
  44.         action = index_in_strings(actions, token[2]); 
  45.         if (action < 0 || !token[3][0]) /* token[3]: command */ 
  46.             goto bad_entry; 
  47.         /* turn .*TTY -> /dev/TTY */ 
  48.         if (tty[0]) { 
  49.             tty = concat_path_file("/dev/", skip_dev_pfx(tty)); 
  50.         } 
  51.         new_init_action(1 << action, token[3], tty); 
  52.         if (tty[0]) 
  53.             free(tty); 
  54.         continue
  55.  bad_entry: 
  56.         message(L_LOG | L_CONSOLE, "Bad inittab entry at line %d"
  57.                 parser->lineno); 
  58.     } 
  59.     config_close(parser); 
  60. #endif 
  61.  

首先去讀了/etc/inittab這個文件,如果不存在,執(zhí)行了很多new_init_action() ,如果存在,就走了一個while()循環(huán),猜測應(yīng)該是解析/etc/inittab文件的內(nèi)容,根據(jù)文件的內(nèi)容執(zhí)行new_init_action() 。好,那么inittab文件到底寫什么格式,什么東西呢,while()循環(huán)里面有一個static const char actions[]數(shù)組看起來像是和inittab的內(nèi)容有關(guān)系,里面有“sysinit”等字符串,但是還是沒辦法搞清楚怎么寫inittab文件

inittab文件怎么寫

/busybox/examples/下面找到一個inittab腳本的例子,打開,看到一個類似格式說明的句子:

  1. Format for each entry: <id>:<runlevels>:<action>:<process> 

猜測inittab文件里可以有多條entry,每條entry格式中有id、runlevels、action和process這四項(xiàng)內(nèi)容,這里也出現(xiàn)了action,和代碼里的action數(shù)組很像。文件里又說id和runlevels無關(guān)緊要,好,要搞清楚inittab怎么寫,關(guān)鍵在于理解action和process,繼續(xù)看說明

action

action包括:sysinit、respawn、askfirst、wait、once、restart、ctrlaltdel、和shutdown共八種,

process

指定要運(yùn)行的程序和它的參數(shù)

然后還說了如果沒有inittab文件,則運(yùn)行以下內(nèi)容

  1. ::sysinit:/etc/init.d/rcS 
  2. ::askfirst:/bin/sh 
  3. ::ctrlaltdel:/sbin/reboot 
  4. ::shutdown:/sbin/swapoff -a 
  5. ::shutdown:/bin/umount -a -r 
  6. ::restart:/sbin/init 
  7. tty2::askfirst:/bin/sh         
  8. tty3::askfirst:/bin/sh 
  9. tty4::askfirst:/bin/sh  

這應(yīng)該就是代碼中如果讀不到inittab文件,則執(zhí)行的一系列net_init_action的內(nèi)容

再往下看,出現(xiàn)的第一條示例entry

  1. ::sysinit:/etc/init.d/rcS 

是不是很熟悉,linux系統(tǒng)嵌入式設(shè)備里通常會有/etc/init.d/rcS這個文件,它是一個shell腳本,根據(jù)前面的格式,分析一下,id和runlevel為空,action為sysinit,process為/etc/init.d/rcS,所以第一件要干的事情是去執(zhí)行rcS腳本,而rcS腳本里可以做自己想做的任何事情了

下一條示例是

  1. ::askfirst:-/bin/sh 

注釋說的是啟動shell到console口,不管,繼續(xù)看

  1. tty4::respawn:/sbin/getty 38400 tty5 
  2.  
  3. tty5::respawn:/sbin/getty 38400 tty6  

開啟getty

  1. ::restart:/sbin/init 

指定init進(jìn)程的重啟位置

  1. ::ctrlaltdel:/sbin/reboot 
  2.  
  3. ::shutdown:/bin/umount -a -r 
  4.  
  5. ::shutdown:/sbin/swapoff -a  

在重啟之前要做的事情

再回到代碼上,這個while()循環(huán)遍歷了inittab文件的每一個entry,解析出entry的四個部分:id、runlevel、action和process,放到一個指針數(shù)組char *token[4]中,則token[2]和token[3]代表action和process,程序里調(diào)用index_in_strings()函數(shù)將token[2]轉(zhuǎn)成字符串,即“sysinit”等值,再調(diào)用net_init_action(),分析net_init_action()源碼可以看出,其實(shí)只是把這些action和process添加到一個鏈表中,并沒有做實(shí)際的處理,真正的處理在后續(xù)的代碼中,parse_inittab()函數(shù)返回,

  1. ...... 
  2.    /* Now run everything that needs to be run */ 
  3.    /* First run the sysinit command */ 
  4.    run_actions(SYSINIT); 
  5.    check_delayed_sigs(); 
  6.    /* Next run anything that wants to block */ 
  7.    run_actions(WAIT); 
  8.    check_delayed_sigs(); 
  9.    /* Next run anything to be run only once */ 
  10.    run_actions(ONCE); 
  11.  
  12.    /* Now run the looping stuff for the rest of forever. 
  13.     */ 
  14.    while (1) { 
  15.        ......  

這里調(diào)用run_action()運(yùn)行鏈表中每一個entry,并且首先運(yùn)行的是action為sysinit的動作

總結(jié)

到這里,大致搞清楚了init進(jìn)程是怎么啟動app的了,上流程圖 

 

簡單來說,init進(jìn)程首先分析/etc/inittab文件,當(dāng)然,可以自己修改busybox源碼,讓它從任意文件開始分析,如果不存在inittab文件,則執(zhí)行默認(rèn)的action;如果inittab文件存在,則根據(jù)inittab文件中的條目執(zhí)行,通常是去/etc/init.d/rcS文件中執(zhí)行腳本命令,當(dāng)然,修改源碼,你也可以讓它執(zhí)行別的腳本

rcS腳本是以shell腳本語言編寫,一般的套路是

  • 加載驅(qū)動模塊
  • 配置網(wǎng)絡(luò),建橋、配網(wǎng)卡地址
  • 啟動app 
責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2010-03-02 16:37:53

Linux Quagg

2022-04-12 12:35:02

Linux啟動性能systemd

2021-10-20 10:04:47

鴻蒙HarmonyOS應(yīng)用

2010-01-05 13:11:04

Ubuntu進(jìn)程管理

2021-11-23 10:25:35

性能優(yōu)化iOS App 啟動優(yōu)化

2011-06-28 13:27:13

ARM Linux

2010-03-03 09:16:17

2009-08-28 16:41:12

啟動C# AutoCA

2011-02-13 13:44:08

Linux關(guān)機(jī)重新啟動

2018-03-13 13:00:03

Linux運(yùn)維啟動分析

2017-01-23 21:05:00

AndroidApp啟動優(yōu)化

2021-09-18 14:26:49

Linux Linux 啟動流程Linux 系統(tǒng)

2017-02-15 09:40:38

JavaScript分析解決

2010-08-03 11:23:30

路由器

2010-07-19 14:37:01

Perl進(jìn)程啟動函數(shù)

2009-06-18 13:18:32

軟件測試需求分析

2020-09-09 10:00:41

JavaScript前端瓶頸

2015-01-22 14:12:40

Android源碼APP啟動引導(dǎo)

2009-10-27 15:06:15

Linux內(nèi)核啟動

2010-09-27 12:48:03

DHCP dai啟動
點(diǎn)贊
收藏

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

成人羞羞国产免费| 欧美视频一区二区三区四区 | 国产一区二区三区四区五区入口 | 日韩精品第一| 亚洲视频一二三区| 97超碰人人看人人| 精品乱码一区内射人妻无码 | 国产露脸无套对白在线播放| 亚洲高清久久| 在线视频中文亚洲| 无码人妻aⅴ一区二区三区玉蒲团| 美女福利一区二区三区| 亚洲另类色综合网站| 精品国产免费久久久久久尖叫 | 无遮挡在线观看| 中文字幕一区二区日韩精品绯色| 国产美女精品在线观看| 中文字幕第2页| 91久久亚洲| 久久综合免费视频| 91成人精品一区二区| 老司机aⅴ在线精品导航| 欧美日韩成人激情| 超碰网在线观看| 久草在线新免费首页资源站| 中文一区在线播放| 欧美日韩精品免费观看| 国内爆初菊对白视频| 激情综合网av| 国产精品入口免费视| 日本中文字幕第一页| 女主播福利一区| 久久亚洲精品成人| 亚洲综合图片一区| 日韩激情图片| 亚洲午夜激情免费视频| 18禁裸乳无遮挡啪啪无码免费| 综合久久成人| 欧美精品1区2区| 在线观看国产中文字幕| 欧美va在线观看| 日韩欧美在线视频日韩欧美在线视频| 欧美国产日韩激情| 成人超碰在线| 一区二区成人在线| 日本老太婆做爰视频| 精品美女在线观看视频在线观看| 国产精品久久久久影视| 婷婷四月色综合| av一区在线观看| 中文子幕无线码一区tr| 涩涩涩999| 午夜看片在线免费| 国产精品久久综合| 欧美 日韩 国产 在线观看| 91露出在线| 亚洲欧美日韩国产手机在线| 在线一区亚洲| 好操啊在线观看免费视频| 亚洲男同性视频| 国产91视频一区| av在线加勒比| 色综合中文字幕| 手机看片福利日韩| 久久免费影院| 日韩小视频在线观看专区| 亚洲丝袜在线观看| 97超碰成人| 亚洲欧美第一页| 2019男人天堂| 亚洲91中文字幕无线码三区| 欧美成人午夜激情| 日本熟伦人妇xxxx| 日韩精品亚洲一区| 91久久精品一区| 亚洲成人第一区| 91色porny在线视频| 日韩影视精品| 国产又色又爽又黄刺激在线视频| 图片区小说区区亚洲影院| 久久精品香蕉视频| 91精品亚洲一区在线观看| 精品国精品自拍自在线| 亚洲AV无码国产精品| 成人动漫免费在线观看| 久久亚洲精品小早川怜子66| 青青草手机在线观看| 国产亚洲一级| 91精品久久久久久久久久入口 | www.日本精品| 蜜桃久久久久久久| 国产伦精品一区二区三区| 久久电影中文字幕| 一区二区高清在线| 午夜激情福利在线| 国产精品网址| 色爱精品视频一区| 激情小说中文字幕| 视频一区二区国产| 国产欧美亚洲日本| 午夜视频在线| 欧美色视频日本版| caoporm在线视频| 欧美91在线| 久久精品一偷一偷国产| 在线观看黄网站| 国产一区二区影院| 日韩福利视频| 高清在线视频不卡| 欧美一区二区视频在线观看2022 | 国产一区二区三区91| 欧美黑人性生活视频| 成人小视频在线播放| 国产成人亚洲综合a∨婷婷图片 | 狠狠人妻久久久久久综合蜜桃| 91久久电影| 日本午夜在线亚洲.国产| 亚洲国产精彩视频| 国产精品久久久久久妇女6080| 久久久久久久久久网| 在线免费成人| 亚洲午夜小视频| www..com国产| 国产.欧美.日韩| 久久精品国产精品亚洲精品色| 成人福利av| 亚洲国产一区自拍| 久久久久久蜜桃| 国产精品综合二区| 亚洲精品日韩在线观看| 肉色欧美久久久久久久免费看| 亚洲国产高清福利视频| 五月天丁香激情| 激情五月播播久久久精品| 日本亚洲导航| 中文字幕av一区二区三区佐山爱| 亚洲福利视频久久| 精品无码av在线| 国产精品一二二区| 九一免费在线观看| 视频亚洲一区二区| 欧美激情videoshd| 亚洲国产精品无码久久| 一区二区日韩av| 国产人妻精品午夜福利免费| 欧美aⅴ99久久黑人专区| 91亚洲国产精品| 亚洲婷婷噜噜| 精品国产123| 中文字幕在线观看免费视频| 成人黄色在线看| 久久国产精品视频在线观看| 懂色av一区二区| 国模精品系列视频| 天天干,夜夜爽| 欧美日韩亚洲天堂| 亚洲图片另类小说| 日本网站在线观看一区二区三区| 日本一区二区免费看| 日韩毛片在线| 久久久精品美女| 亚洲经典一区二区| 婷婷成人激情在线网| 亚洲一区二区三区四区五区六区 | 亚洲在线视频免费观看| 成人午夜精品无码区| 国产一区二区高清| 日本在线播放一区| 国产精选久久| 97精品国产97久久久久久免费| 天堂中文在线资| 欧美亚洲一区二区在线观看| 情侣偷拍对白清晰饥渴难耐| 国产专区欧美精品| 日韩黄色短视频| 欧美精品一区二区三区精品| 成人久久一区二区三区| 日本动漫同人动漫在线观看| 亚洲级视频在线观看免费1级| 亚洲天堂一区在线| 国产精品麻豆一区二区| www.四虎在线| 奇米亚洲午夜久久精品| 国产 欧美 日本| 精品72久久久久中文字幕| 91性高湖久久久久久久久_久久99| 男人添女人下部高潮视频在线观看| 日韩电影在线观看中文字幕| 波多野结衣电影在线播放| 自拍av一区二区三区| a天堂视频在线观看| 蜜桃久久久久久久| 日韩精品―中文字幕| 欧美好骚综合网| 麻豆传媒一区二区| 欧美第一在线视频| 国产精品aaaa| 97在线视频免费观看完整版| 视频直播国产精品| 青青操视频在线| 日韩视频在线永久播放| 波多野结衣激情视频| 亚洲精品乱码久久久久久日本蜜臀| 插吧插吧综合网| 国产91在线看| 中文av一区二区三区| 国产亚洲午夜| 福利在线一区二区| 亚洲精品888| 日韩资源av在线| 国产三级精品三级在线观看国产| 国产日韩欧美综合| 高清不卡亚洲| 久久久爽爽爽美女图片| 黄色一级片在线观看| 伊人亚洲福利一区二区三区| 蜜桃av噜噜一区二区三区麻豆| 欧美视频在线播放| 五月婷婷激情视频| 亚洲aⅴ怡春院| 一区二区成人免费视频| 国产精品久久免费看| 中文字幕高清视频| 99精品久久99久久久久| 师生出轨h灌满了1v1| 精品一区二区三区免费视频| 欧美黑人又粗又大又爽免费| 亚洲欧美日韩精品一区二区 | 欧美日产一区二区三区在线观看| 1769国产精品视频| 91久久国产自产拍夜夜嗨| 日韩欧美三区| 国产在线视频一区| 外国电影一区二区| 国产精品吊钟奶在线| 亚洲精品成人图区| 青青久久av北条麻妃黑人| 国产一二三在线| 97在线看福利| 欧美xxxhd| 欧洲亚洲免费在线| 瑟瑟视频在线看| 国产91露脸中文字幕在线| 成人直播视频| 国产精品白嫩初高中害羞小美女| 亚洲国产欧美日本视频| 国产成人精品日本亚洲专区61| 国产精品一区二区av影院萌芽| 2019中文字幕在线观看| 女厕盗摄一区二区三区| 26uuu久久噜噜噜噜| 大胆人体一区二区| 国产精品观看在线亚洲人成网| h1515四虎成人| 国产在线视频欧美| 在线观看视频一区二区三区| 国产精品一区二区在线观看| 欧美成人一区在线观看| 欧美1o一11sex性hdhd| 国产日产精品一区二区三区四区的观看方式 | 国产精品一区二区三区观看| 欧美一级淫片免费视频黄| 精品久久久久久国产91| 亚洲精品中文字幕乱码三区91| 在线日韩一区二区| 91麻豆国产视频| 欧美一级生活片| 少妇精品视频一区二区| 亚洲香蕉成人av网站在线观看| 日本电影在线观看网站| www.亚洲免费视频| 成人免费一区二区三区牛牛| 日本高清不卡的在线| 国产亚洲人成a在线v网站 | 日韩激情综合| 久久99精品久久久久久青青日本 | 成人免费毛片视频| 欧美日本在线观看| 国产chinasex对白videos麻豆| 亚洲第一在线视频| 国产免费视频在线| 久久伊人精品天天| 亚洲人成在线网站| 国产精品自在线| 国产精品久久久久av蜜臀| 免费日韩电影在线观看| 五月久久久综合一区二区小说| 中国丰满熟妇xxxx性| 日本vs亚洲vs韩国一区三区| 日本黄色www| 国产拍欧美日韩视频二区| 卡通动漫亚洲综合| 91黄色在线观看| 午夜精品久久久久久久第一页按摩| 日韩精品在线观看一区二区| 欧美成人三区| 欧美有码在线观看视频| 日韩高清在线观看一区二区| 欧美日韩电影一区二区| 欧美另类女人| 国产小视频精品| gogo大胆日本视频一区| 日本一二三区在线观看| 日韩欧美精品网址| 性网爆门事件集合av| 影音先锋欧美精品| av人人综合网| 亚洲一区二区三区四区在线播放| 欧美激情在线免费| 久久成人福利视频| 国产精品亚洲一区二区三区妖精| 国产精成人品免费观看| 偷窥少妇高潮呻吟av久久免费| 国产探花精品一区二区| 最近中文字幕2019免费| 午夜影院在线播放| 国内精品久久国产| 欧美久久久久| 99久久99精品| 欧美激情一区在线| 日韩免费av网站| 亚洲精品456在线播放狼人| 欧美xxxx视频| 91天堂在线观看| 97视频精品| 男女男精品视频站| 久久久精品天堂| 五月婷婷视频在线| 日韩成人免费视频| 国产精品论坛| 国产精品一区二区av| 极品尤物久久久av免费看| 337p日本欧洲亚洲大胆张筱雨 | 日韩精品一区二区在线视频| 激情综合色综合久久综合| 日本美女bbw| 欧美三级韩国三级日本一级| yw视频在线观看| 国产精品丝袜白浆摸在线| 九九热线有精品视频99| 欧美成人免费高清视频| 久久精品亚洲国产奇米99| 久久精品国产成人av| 亚洲精品美女久久久| 日本午夜大片a在线观看| 狠狠色综合网站久久久久久久| 国内精品久久久久久久影视蜜臀| 波多野结衣中文字幕在线播放| yw在线观看| 九九热精品在线| 97一区二区国产好的精华液| 黄色一级片国产| 国产69精品久久久久毛片| 国产中文字字幕乱码无限| 精品国产污网站| 欧美日韩国产观看视频| 久久精品国产一区二区三区不卡| 亚洲每日更新| 丝袜美腿中文字幕| 欧美日本视频在线| huan性巨大欧美| 国产日韩精品久久| 米奇777在线欧美播放| 999久久久国产| 欧美精品三级日韩久久| 神马午夜伦理不卡| 狠狠色综合一区二区| 日韩成人免费电影| 午夜国产福利一区二区| 亚洲国产欧美一区二区三区久久| 中文字幕资源网在线观看免费 | 欧美精品1区| 中文字幕精品久久久| 色老头久久综合| av片在线观看网站| 精品1区2区| 男女男精品网站| 免费在线视频观看| 亚洲片国产一区一级在线观看| 欧美午夜三级| 日韩国产一级片| 国产精品素人一区二区| 国产77777| 国产精品日韩av| 欧美网站在线| 女人裸体性做爰全过| 欧美xxxx在线观看| 福利一区二区三区视频在线观看| 日本天堂免费a| 国产丝袜欧美中文另类| www.xxx国产| 国产精品美女呻吟| 欧美精选一区| 色婷婷粉嫩av| 亚洲欧美综合精品久久成人| 国产美女视频一区二区| 黄色一级大片在线观看| 亚洲精品一二三区| 在线播放毛片| 欧美日韩亚洲免费|