国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

鴻蒙系統的啟動流程v2.0

系統
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com

[[394121]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

鴻蒙系統的啟動流程

liangkz 2021.04.15 Ver2.0

  • 目錄
  • 1. 第一階段:U-Boot啟動..................................................................................... 3
  • 2. 第二階段:匯編代碼引導LiteOS-a內核........................................................ 3
  • 3. 第三階段:內核LiteOS-a的C語言啟動階段................................................ 4
  • 4. 第四階段:鴻蒙系統框架層的啟動.............................................................. 14
  • 5. 第四階段:鴻蒙系統框架層的啟動細節...................................................... 17
  • 6. 鴻蒙應用(APP)的啟動...................................................................................... 20
  • 附錄A. #task命令查看進程/線程信息(簡表).................................................... 21

聲明:

升級文檔到v2.0后可以聲明是原創的了。這是上了朱有鵬老師的免費課《想讀懂鴻蒙2.0源碼,也許你需要先懂這些》(link:https://edu.51cto.com/course/27341.html?hm)之后,做的一些總結。

課程時間一個半小時,內容也很多,學習過程中我發現朱老師的ppt上部分代碼/文件,在我本地的鴻蒙系統代碼上找不到,或者路徑不相同,所以我就做了一些整理。

這里僅摘取課程中的鴻蒙系統在HI3516DV300平臺上的啟動流程部分(從30:00開始講解啟動過程)進行匯總和整理,如有錯誤,請朱老師和各位同學指正。后繼在學習過程中會繼續對本文當作修正升級。附件升級了的v2.0文檔對閱讀更友好,歡迎下載收藏。

更新記錄:

我的本地代碼是基于最新發布的OpenHarmony 1.1.0 LTS(2021-04-01)版本抓取的,代碼根目錄OHOS1_1_0LTS:

  1. $repo init -u https://gitee.com/openharmony/manifest.git -b refs/tags/OpenHarmony_release_v1.1.0 --no-repo-verify 
  2.  
  3. $repo sync 

在根目錄下執行

  1. OHOS1_1_0LTS$ hb set 
  2.  
  3. [OHOS INFO] Input code path: . 
  4.  
  5. OHOS Which product do you need?   
  6.  
  7. ->ipcamera_hispark_taurus@hisilicon 
  8.  
  9. OHOS1_1_0LTS$ hb build  

即可開始編譯 hi3516dv300 平臺代碼。

輸出的過程文件和最終bin,在以下路徑內:

  1. out\hispark_taurus\ipcamera_hispark_taurus 

因為本人還沒有開發板,無法燒錄、抓取log分析以及做相關的操作去驗證。

1. 第一階段:U-Boot啟動

  1. System startup 
  2.  
  3. Uncompress Ok! 
  4.  
  5. U-Boot 2016.11 (......) hi3516dv300 
  6.  
  7. ............ 
  8.  
  9. ............(省略) 
  10.  
  11. Hit any key to stop autoboot: 0 
  12.  
  13. MMC read: dev #0, block # 2048, count 16384  ...  16384 blocks read: OK 
  14.  
  15. ## Starting application at 0x80000000... 

到此為止屬于U-Boot的啟動。

Uboot不屬于鴻蒙系統,這里不做進一步分析,代碼在目錄

  1. device\hisilicon\third_party\uboot\u-boot-2020.01 

2. 第二階段:匯編代碼引導LiteOS-a內核

Uboot引導liteos-a內核啟動起來,需要有一個入口,在:

  1. kernel\liteos_a\tools\build\liteos.ld 

打開這個文件,可見:

  1. ENTRY(reset_vector) 
  2.  
  3. INCLUDE board.ld 
  4.  
  5. SECTIONS 
  6.  
  7.  
  8. ...... 
  9.  

reset_vector 就是整個鴻蒙內核啟動的入口點,這是一個符號,定義在:

  1. kernel\liteos_a\arch\arm\arm\src\startup\reset_vector_mp.S 

同目錄下還有一個reset_vector_up.S文件,因為HI3516是ARM Cortex A7雙核處理器,所以需要看mp(多核)這個文件,up這個是單核的。

打開reset_vector_mp.S文件,找到“reset_vector:”符號,從這里開始跑匯編代碼,引導liteos-a內核的啟動,一直到:

  1. “ 
  2.  
  3.     bl     main 
  4.  
  5.   
  6.  
  7. _start_hang: 
  8.  
  9.     b      _start_hang 
  10.  
  11. ” 

這里調用一個 main 函數,然后執行 _start_hang 進入死循環,至此匯編代碼階段就結束了。

通過main函數進入內核LiteOS-a啟動的C語言階段。

3. 第三階段:內核LiteOS-a的C語言啟動階段

上面匯編階段調用的main函數,位于:

  1. kernel\liteos_a\platform\main.c 

main函數通過OsSystemInfo();函數里打印下面這些信息

  1. ******************Welcome****************** 
  2.  
  3. Processor  : Cortex-A7*2 
  4.  
  5. Run Mode : SMP 
  6.  
  7. GIC Rev  : GICv2 
  8.  
  9. build time : ...... 
  10.  
  11. Kernel  : Huawei LiteOS 2.0.0.xxx 
  12.  
  13. ******************************************** 
  14.  
  15.   
  16.  
  17. main core booting up... 
  18.  
  19. ... 
  20.  
  21. ... 
  22.  
  23.   

從這一步的main開始讀liteos-a的C語言源碼,可以直接在鴻蒙代碼的

  1. kernel\liteos_a\platform\main.c 

進行閱讀理解。

  • 不過,推薦從下面倉庫拉代碼下來讀,
  • 鴻蒙內核源碼注解分析:
  • https://gitee.com/weharmony/kernel_liteos_a_note.git
  • 這是在鴻蒙官方開源項目 kernel_liteos_a 基礎上,給源代碼加上了給常詳細的中文注解,有利于加快理解。
  • 需要注意的是,這個注解的內核代碼可能版本稍舊,而上面repo下來的內核部分代碼可能做了部分重構和修改,會有少量的不同。

main函數截圖如下:

Line173行調用的OsMain()函數,位于:

  1. kenerl\liteos_a\kernel\common\los_config.c 

主要做了:

其中的:

  • OsTickInit(......); // tick初始化,包含注冊中斷事件

硬件時鐘初始化,啟動節拍,注冊硬中斷

  • OsKernelInitProcess(); // 完成內核進程的初始化

【鴻蒙內核源碼注解分析上的API與OpenHarmony 1.1.0 LTS(2021-04-01)上的API,有少量差異,但功能基本上是一樣的。】

代碼都在:kernel\liteos_a\kernel\base\core\los_process.c 文件內。

下面分別來看一下:

鴻蒙內核源碼注解分析:OsKernelInitProcess()

OsCreateResourceFreeTask()函數,下面的調用也是一樣的。

OpenHarmony 1.1.0 LTS(2021-04-01):OsSystemProcessCreate( )

由上面的代碼截圖可以看出:

  1. 創建2號進程 KProcess,最高優先級0,這是一個內核態進程。
  2. 創建KProcess的子線程ResourceTask,優先級別5,用于資源回收
  3. 由KProcess復制(fork)出一個名叫 KIdle 的內核態進程,最低優先級31
  4. KIdle進程創建子線程Idle,優先級別31,給CPU空閑的時候使用.

注意,此時1號進程還沒有創建,它是用戶態根進程,要到稍微后面才創建。

可以在shell內執行task命令查看進程和線程信息,表格見附錄。

  • OsSwtmrInit(); //軟時鐘模塊初始化

創建Swt_Task(software timmer)線程,父進程是2號進程KProcess,

  • OsSystemInit(); //系統初始化

系統軟硬件的初始化,由2號進程 KProcess創建“system_wq”“SystemInit”“memshow_Task”等線程。

“SystemInit”線程:

跳出內核代碼,到外部提供的SystemInit()做系統初始化,在: 

  1. device\hisilicon\hispark_taurus\sdk_liteos\mpp\module_init\src\system_init.c 

 里的SystemInit()函數:

其中的:

  • ProcFsInit()

創建和掛載/proc文件系統,代碼見:

  1. kernel\liteos_a\fs\proc\os_adept\proc_init.c 
  • SDK_init() //calling SDK_init form HISI_SDK

初始化3516DV300特有的SDK,用內部的DSP硬件來做視頻編解碼,只提供相關庫文件,不開源。

代碼在:

  1. device\hisilicon\hispark_taurus\sdk_liteos\mpp\module_init\src\sdk_init.c 
  • OsMountRootfs()

掛載根文件系統:

  1. out\hispark_taurus\ipcamera_hispark_taurus\rootfs.tar  

可以通過tar -tf rootfs.tar 命令查看里面都有些什么內容,下面顯示一部分目錄:

OsUserInitProcess()

  1. kernel\liteos_a\kernel\base\core\los_process.c 

回到內核代碼,鴻蒙內核源碼注解分析:OsUserInitProcess()【最新1.1.0 LTS代碼有重構,但意思一樣】

這時候才創建1號進程Init,這是用戶態根進程,優先級別為28,

__user_init_entry 就是第一個用戶態根進程的地址,它通過宏LITE_USER_SEC_ENTRY進行定義:

代碼在:

  1. kernel\liteos_a\kernel\user\src\los_user_init.c 

LiteOS_a操作系統起來后,到掛載根文件系統,都處于內核態(內核空間),創建第一個用戶態根進程Init時,

通過第一個用戶態程序的地址 __user_init_entry / LITE_USER_SEC_ENTRY [ 進入OsUserInit() 并執行系統調用

"sys_call3" 切換到用戶態(用戶空間) ] 去運行g_initPath = "/bin/init" 程序。

簡單來說第一個用戶態根進程,實際上運行的就是/bin/init的代碼。

1. /kernel/liteos_a/apps目錄下,是liteoa_a自帶的內核應用,也就是內核的用戶態進程,

目前有 init、shell、tftp三個內核應用,編譯后會在下面路徑下生成同名的可執行文件:

  1. out\hispark_taurus\ipcamera_hispark_taurus\obj\kernel\liteos_a\bin 

其中init.c 做的事情很簡單,就是fork一個新的用戶態進程并運行"/bin/shell".

2. /base/startup/init_lite目錄下的init_lite組件(init_lite module)的詳細說明,見該目錄下的官方文檔【README_zh.md】。

查看BUILD.gn可看到它也會被編譯成 init 可執行程序

在out\hispark_taurus\ipcamera_hispark_taurus\bin目錄下生成,同目錄下還有foundation、appspawn等可執行程序。

3. 【疑惑、解疑】

寫本文檔的v1.0版本時,我就一直存在一個很大的疑惑,理論上LiteOS_a內核的啟動,從內核態切換到用戶態時,

系統調用["sys_call3" ]去運行的 g_initPath = "/bin/init" ,應該是上面1編譯出來的init才對,可是為什么會去運行上面2編譯出來的init呢?

因為不懂直接分析build.py和gen_rootfs.py等編譯腳本,我只好用了最笨的分析方法,步驟如下:

3.1 可以確認的是兩個init,大小不一樣,生成位置也不一樣,init的生成時間1要比2早大約2分鐘。

3.2 懷疑是gen_rootfs.py在生成rootfs.tar時,只拷貝了2的init而沒有拷貝1的init到rootfs/bin目錄下。

但馬上推翻了,因為1生成的shell、tftp內核應用同時也拷貝到了rootfs/bin目錄下,不應該特殊處理init:

3.3 那就有可能是gen_rootfs.py在生成rootfs.tar時,先拷貝1的init/shell/tftp到/rootfs/bin,

接著再拷貝2的init/foundation/appspawn……到/rootfs/bin時,把1的init給替換掉了。

馬上驗證一下。

重新啟動編譯,等2的init一生成,馬上將其改名為init5,等編譯完成后,重新打開rootfs.tar查看,

果不其然,rootfs/bin里面出現了init和init5,文件大小基本對應得上,所以這就是真相。

3.4 有清楚gen_rootfs.py工作過程細節的同學麻煩從腳本分析入手確認一下。

3.5 另,關于shell的疑問,也請懂的同學回復一下,這里就不分析和驗證了:

kernel\liteos_a\apps\shell 會編譯成shell,據朱有鵬老師說這是精簡版的shell,

kernel\liteos_a\shell 這個也會編譯成shell,朱有鵬老師說是全功能版的shell,

這兩個版本的shell,哪個會在最終的gen_rootfs.py 時拷貝到 /bin 中?

通過上面的驗證,確認了LiteOS_a內核的啟動,從內核態切換到用戶態時,

系統調用["sys_call3" ]去運行的 g_initPath = "/bin/init" ,確實是base\startup\init_lite 組件

編譯生成的init,也就是鴻蒙系統的第一個用戶態根進程就是init_lite組件,這就進入到了

鴻蒙系統的框架層framework的啟動。

4. 第四階段:鴻蒙系統框架層的啟動

這個應用層實際上就是鴻蒙的framework,啟動init入口在:

  1. base\startup\init_lite\services\src\main.c 

ReadFileToBuf()

這一步讀取的 /etc/init.cfg文件,在上面OsMountRootfs()掛載根文件系統的時候就掛載上了,它是

  1. vendor\hisilicon\hispark_taurus\init_configs\init_liteos_a_3516dv300.cfg 

的副本,這個文件就包含了“pre-init”“init”“post-init”的相關操作,分別是設置掛載一些設備、設置好路徑,啟動服務等工作。

而后面的"services"則包含一組服務的定義,它們是系統里的關鍵進程。

  • DoJob("init")

由“1號進程init”,在應用層通過start指令創建和啟動:shell/apphilogcat/.../ai_server等3~9號進程,它們都是用戶態進程,父進程都是“1號進程init”。

init將根據上面cfg配置的job和services來做對應的操作和啟動對應的服務程序,并設置它們的uid、gid、進程優先級和權限等。

可以在shell內執行task命令查看進程和線程信息,表格見文末。

  • 【見官方文檔:base\startup\init_lite\README_zh.md】
  • 這個init組件(即base\startup\init_lite)負責處理從內核加載第一個用戶態進程(1號進程init)開始,到第一個應用程序啟動之間的系統服務進程啟動過程。
  • init將系統啟動分為三個階段:
  • “pre-init”階段:啟動系統服務之前需要先執行的操作,例如掛載文件系統、創建文件夾、修改權限等
  • “init”階段:系統服務啟動階段
  • “post-init”階段:系統服務啟動完后還需要執行的操作
  • 上述每個階段在配置文件init.cfg中都用一個job表示,每個job都對應一個命令集合,init通過依次執行每個job中的命令來完成系統初始化。job執行順序:先執行“pre-init”,再執行“init”,最后執行“post-init”,所有job都集中放在init.cfg的jobs數組中。
  • 除上述jobs數組之外,init.cfg中還有一個services數組,用于存放所有需要由init進程啟動的系統關鍵服務的服務名、可執行文件路徑、權限和其他屬性信息。
  • 配置文件init.cfg位于代碼倉庫/vendor/hisilicon/hispark_aries/init_configs/目錄,部署在/etc/下,采用json格式,文件大小目前限制在100KB以內。
  • init組件會編譯成out\hispark_taurus\ipcamera_hispark_taurus目錄下的bin/init,同時打包在根文件系統rootfs.tar內,上面掛載根文件系統時,會掛載成/bin/init,由第三階段的最后一步OsUserInit()調用和執行。
  • 【見官方文檔:base\startup\init_lite\README_zh.md】

總結:

Init_lite組件會編譯成out\hispark_taurus\ipcamera_hispark_taurus目錄下的bin/init,

然后在gen_rootfs.py生成rootfs.tar時替換掉系統自帶的內核應用init,成為系統第一個

用戶態根進程的啟動程序。并由它開啟系統里的其他關鍵服務進程。

5. 第四階段:鴻蒙系統框架層的啟動細節

上面第四階段簡單解釋了鴻蒙系統的關鍵系統進程和相關服務的啟動。

這一小節就要看看shell/apphilogcat/.../ai_server等3~9號進程的具體啟動過程和調用的相關代碼入口。

DoJob(“init”)會根據cmds的順序啟動相關服務:

  1. "name" : "init"
  2.  
  3.             "cmds" : [ 
  4.  
  5.                 "start shell"
  6.  
  7.                 "start apphilogcat"
  8.  
  9.                 "start foundation"
  10.  
  11.                 "start bundle_daemon"
  12.  
  13.                 "start appspawn"
  14.  
  15.                 "start media_server"
  16.  
  17.                 "start wms_server"
  18.  
  19.                 "start hiview"
  20.  
  21.                 "start sensor_service"
  22.  
  23.                 "start ai_server" 
  24.  
  25.             ] 

這些服務程序都對應在根目錄的/bin下存在(除了hiview?需平臺確認)

1.1 start shell

啟動shell服務,進程ID是3。精簡版和全功能版的shell,代碼分別在:

  1. kernel\liteos_a\apps\shell 
  2.  
  3. kernel\liteos_a\shell\full 

具體跑哪個,目前存疑,待驗證。

1.2 start apphilogcat

啟動apphilogcat服務,進程ID是4。

  1. base\hiviewdfx\hilog_lite 

hilog_lite組件,提供DFX(Design For X,面向X的設計)子系統在輕量系統和小型系統的流水日志功能。

詳情見目錄下的【README_zh.md】

  1. base\hiviewdfx\hilog_lite\services\apphilogcat\hiview_applogcat.c 
  2.  
  3. base\hiviewdfx\hilog_lite\services\hilogcat\hiview_logcat.c 

main() 里面都是log文件的相關操作

1.3 start foundation

啟動foundation服務,進程ID是5。

  1. foundation\distributedschedule\safwk_lite 

safwk_lite 是foundation進程的實現,負責提供基礎服務運行的空進程。

safwk_lite 屬于分布式任務調度子系統的一個模塊。

詳情見目錄下的【README_zh.md】 saf: system ability (SA) framework

  1. foundation\distributedschedule\safwk_lite\src\main.c 
  2.  
  3. main()里有調用: OHOS_SystemInit();   

同文件有定義,不過是弱引用:

  1. void __attribute__((weak)) OHOS_SystemInit(void) 
  2.  
  3.  
  4.     SAMGR_Bootstrap();  
  5.  

在base\startup\bootstrap_lite\services\source\system_init.c 有另一個定義:

  1. void OHOS_SystemInit(void) 
  2.  
  3.  
  4.     MODULE_INIT(bsp); 
  5.  
  6.     MODULE_INIT(device); 
  7.  
  8.     MODULE_INIT(core); 
  9.  
  10.     SYS_INIT(service); 
  11.  
  12.     SYS_INIT(feature); 

MODULE_INIT(run); //SYS_RUN(HelloWorld); 從這里開始啟動,待驗證。

  1. //系統服務框架子系統啟動 [system ability (SA) framework] 
  2.  
  3.  //foundation\distributedschedule\samgr_lite 
  4.  
  5.  SAMGR_Bootstrap(); 

1.4 start bundle_daemon

啟動bundle_daemon服務,進程ID是6。

  1. foundation\appexecfwk\appexecfwk_lite 

包管理組件服務,用戶程序框架子系統。

詳情見目錄下的【README_zh.md】

  1. foundation\appexecfwk\appexecfwk_lite\services\bundlemgr_lite\bundle_daemon\src\main.cpp 
  2.  
  3. main()里有調用: HOS_SystemInit();   

同文件有定義,同樣是弱引用,不過暫未發現其他地方有定義:

  1. void __attribute__((weak)) HOS_SystemInit(void) 
  2.  
  3.  
  4.     SAMGR_Bootstrap();  
  5.  

1.5 start appspawn

啟動appspawn服務,進程ID是7。

  1. base\startup\appspawn_lite 

appspawn_lite 應用孵化器組件,負責接受應用程序框架的命令孵化應用進程,設置其對應權限,并調用應用程序框架的入口。

詳情見目錄下的【README_zh.md】

  1. base\startup\appspawn_lite\services\src\main.c 

main() 跑的流程基本上與bundle_daemon的一樣。

1.6 start media_server

啟動media_server服務,進程ID是8。

  1. foundation\multimedia\media_lite 

media_lite媒體子系統組件(C++實現),提供播放、錄制、解析、解碼等接口能力,并提供媒體播放錄制引擎服務化能力。詳情見目錄下的【README_zh.md】

  1. foundation\multimedia\media_lite\services\media_main.cpp 

1.7 start wms_server

啟動wms_server服務,進程ID是9。

  1. oundation\graphic\wms 

圖形服務采用C/S架構,內部分為窗口管理(WMS: Window Manager Service)和輸入事件管理(IMS: Input Manger Service)兩個子服務。APP調用客戶端接口完成窗口狀態獲取、事件處理等操作,服務端與硬件交互實現送顯、輸入事件分發等。

詳情見目錄下的【README_zh.md】

  1. foundation\graphic\wms\services\wms\wms.cpp 

1.8 start hiview

啟動hiviewr服務,進程ID是10。

  1. base\hiviewdfx\hiview_lite 

hiview_lite組件,提供DFX子系統整體的初始化功能,控制各組件按需啟動

  1. static void Init(void) 
  2.  
  3.  
  4.  
  5. SYS_SERVICE_INIT(Init); 

 1.9 start sensor_service

啟動sensor_server服務,進程ID是11。

  1. base\sensors\sensor_lite 

泛Sensor服務子系統提供了輕量級sensor服務基礎框架。

詳情見目錄下的【README_zh.md】

1.10 start ai_server

啟動ai_server服務,進程ID是12。

  1. foundation\ai\engine 

AI業務子系統是OpenHarmony提供原生的分布式AI能力的子系統。

詳情見目錄下的【README_zh.md】

5.11 HMOS的Service

HMOS的init進程啟動后,接下來會啟動上面一系列的服務(應該還會有其他更多的),對于這些服務,鴻蒙OS有一個統一管理,所有的服務都被注冊到如下的動態數組當中。

  1. base\startup\init_lite\services\src\init_service_manager.c 
  2.  
  3. static Service* g_services = NULL
  4.  
  5. static int g_servicesCnt = 0; 

 具體情況需閱讀代碼進行理解。

6. 鴻蒙應用(APP)的啟動

在hi3516dv300平臺(帶屏幕)的桌面(也就是launcher進程)上點擊camera應用圖標,這時候會啟動camera應用程序,實際上會通過“7號進程appspawn”創建子進程“com.huawei.camera”,這是一個應用程序進程,其父進程并不是launcher進程,而是appspawn進程。

實際上所有的應用程序的父進程都是appspawn進程。

鴻蒙應用開發的第一個示例程序“helloworld”的啟動也應該類似。

  1. #include <stdio.h> 
  2. #include "ohos_init.h" 
  3. #include "ohos_types.h" 
  4. void HelloWorld(void) 
  5.     printf("[Init] Hello World!\n"); 
  6. SYS_RUN(HelloWorld); 

關于SYS_RUN()如何運作,以便讓HelloWorld運行起來,其他老師有非常詳細的解釋,這里不再復述。

附錄A. #task命令查看進程/線程信息(簡表)

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2011-12-12 17:31:02

虛擬設備isyVmon v2.VMware

2021-04-14 15:23:34

鴻蒙HarmonyOS應用

2011-02-22 14:32:24

2020-11-02 09:07:41

Pyston v2.0Python

2014-08-18 09:58:48

一銘龍鑫操作系統

2020-11-01 16:14:27

PythonPyston v2.0

2013-04-26 10:10:52

2012-10-10 13:54:34

浪潮公安云云平臺

2009-04-29 09:23:04

rapid-frame2.0封裝

2009-11-24 18:20:16

曙光Gridview管理

2014-11-10 11:49:01

QCMSQCMS漏洞安全漏洞

2009-11-12 11:26:16

郵件垃圾郵件Coremail XT

2012-08-23 14:39:23

浪潮云海OS

2013-03-25 16:07:13

和信創天云存儲

2022-05-07 13:52:22

Feign 增強包K8s

2018-04-16 13:29:34

CMMI

2019-04-08 16:41:35

曙光
點贊
收藏

51CTO技術棧公眾號

成人aa视频在线观看| 精品久久网站| 亚洲国产乱码最新视频| 日本免费黄视频| 日韩电影在线观看一区| julia一区二区中文久久94| 香蕉视频一区| 亚洲一级免费视频| 高h视频在线播放| 在线播放91灌醉迷j高跟美女| 中文字幕在线看| 亚洲最大色网站| 免费国产视频| 亚洲精品成人精品456| 99热热99| 一区二区三区欧美日| 国产jizz| 亚洲一线二线三线久久久| 男女人搞j网站| 一区二区三区四区高清精品免费观看| 嫩草影院在线观看网站成人| 国产欧美一区二区精品秋霞影院| 无码播放一区二区三区| 91一区二区在线观看| 国产aaa一级片| 亚洲国产高清在线观看视频| 99视频在线视频| 亚洲视频免费在线观看| 亚洲精品少妇久久久久久| 亚洲综合一区在线| 成人免费高清在线播放| 日韩一区二区三区免费看 | 久久成人国产精品| av日韩在线播放| 国产成人精品国内自产拍免费看| 欧美在线观看黄| 精品无码三级在线观看视频| 久久久久国产精品免费| 亚洲一区在线免费观看| 欧美色爱综合网| 在线免费福利| 欧美日韩视频一区二区| 成年人在线网站| 美女久久久久久久久久久| 伊人成综合网伊人222| 97久久夜色精品国产九色| 校园激情久久| 性欧美大战久久久久久久| 亚洲欧洲av另类| 国产在线播放av| 亚洲欧美国产精品久久久久久久 | 国产精品久久久久影院老司| 永久免费在线观看| 日韩女优视频免费观看| 中文字幕日本一区| 91香蕉国产在线观看| 精品一区二区三区香蕉蜜桃| 拍拍拍999自拍偷| 51久久夜色精品国产麻豆| 99视频有精品高清视频| 超碰97国产在线| 国产传媒欧美日韩成人| 神马久久影视大全| 日韩经典一区二区三区| 国产成人1区| 99亚洲精品视频| 天天色综合成人网| 久久久成人av毛片免费观看| 成人av在线亚洲| 91在线播放网址| 九色porny丨首页在线| 久久久久久中文字幕| 99精品免费视频| 亚欧在线免费观看| 日韩午夜精品视频| 国产毛片一区二区三区| 日本美女爱爱视频| 欧洲精品中文字幕| av不卡一区二区| 亚洲乱码一区二区三区| 亚洲二区在线观看| 精品一区二区三区四区五区| 久久福利电影| 亚洲国产精品久久不卡毛片| 午夜av成人| 欧洲高清一区二区| 亚洲成a人片综合在线| 亚洲精品tv| 一区二区三区视频| 欧美午夜一区二区| 精品视频网站| 亚洲污视频在线观看| 精品亚洲一区二区三区四区五区| 99国产**精品****| 亚洲另类第一页| 色妞一区二区三区| 麻豆国产精品一区二区三区| 小明精品国产一区二区三区| 久久777国产线看观看精品| 国内成+人亚洲+欧美+综合在线 | 九九99久久精品在免费线bt| 色99中文字幕| 色网站国产精品| 牛牛影视一区二区三区免费看| www亚洲国产| 欧美一区二区三区免费观看视频| 成人写真视频| 四虎永久在线高清国产精品| 中文字幕一精品亚洲无线一区| 午夜在线a亚洲v天堂网2018| a天堂中文在线官网| 欧美激情国内偷拍| 99国产精品久久久久| 国产精品电影| 天天久久人人| 欧美剧情电影在线观看完整版免费励志电影 | 99久久综合国产精品二区| 亚洲激情图片| 欧美成人a在线| 香蕉av777xxx色综合一区| 一级视频在线观看| 国产精品欧美亚洲777777| 中文字幕日韩一区| 老汉色老汉首页av亚洲| 91视频免费版污| 久久国产精品久久国产精品| 99久久精品久久久久久清纯| 性高爱久久久久久久久| 熟女视频一区二区三区| 日韩经典中文字幕| 国产精品一二三区在线| 牛牛精品在线| 日韩欧美一区二区三区四区| 9191久久久久久久久久久| 激情成人亚洲| 日p在线观看| 亚洲视频欧美在线| 亚洲人a成www在线影院| 成人网在线免费视频| 韩国一区二区三区视频| 中文字幕av不卡在线| 国产97色在线|日韩| 欧美日韩精品在线视频| 午夜国产精品视频免费体验区| 爱爱爱免费视频在线观看| 免费在线国产精品| 亚洲欧美成人一区二区在线电影| 成人av资源在线观看| 国产精品调教| 亚洲校园欧美国产另类| 久久国产精品 国产精品| 日韩高清有码在线| 久久综合九色欧美综合狠狠 | 欧美黑人巨大xxx极品| 日韩毛片一二三区| 欧美在线影院| 欧美极品videos大乳护士| 草b视频在线观看| 国精产品一区一区三区有限在线| 亚洲色大成网站www久久九九| 91日韩免费| 国产传媒在线观看| 99视频高清| 欧美大香线蕉线伊人久久| 日韩在线激情视频| 午夜久久久久久电影| 蜜臀av国产精品久久久久| 精品视频在线观看免费观看| 伊人75在线| 成人污网站在线观看| 国产不卡在线观看| 日韩亚洲欧美成人一区| 国产亚洲一二三区| 亚洲精品偷拍| 一区二区三区欧洲区| 美女毛片在线看| 一级黄色录像免费看| 91超碰中文字幕久久精品| 欧美日韩激情在线| 久久综合久久99| 国内精品嫩模av私拍在线观看| 美女网站视频一区| 最新亚洲人成网站在线观看| 亚洲国产精品www| 18性欧美xxxⅹ性满足| 91麻豆精品国产91久久久使用方法| 国产99久久久国产精品免费看 | 国产激情在线观看| 天堂社区在线视频| 国产伦精品一区二区三区照片91 | 污污在线观看| a优女a优女片| 中文字幕制服丝袜在线| 国产精品福利片| 日韩精品中文字| 精品久久久久国产| 国产a区久久久| 国内在线观看一区二区三区| 精品成人18| 91破解版在线观看|