青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-20  評論-0  文章-0  trackbacks-0

Linux 引導過程內(nèi)幕

從主引導記錄到第一個用戶空間應用程序的指導

developerWorks

未顯示需要 JavaScript 的文檔選項


級別: 初級

M. Tim Jones (mtj@mtjones.com), 顧問工程師, Emulex

2006 年 7 月 26 日

引 導 Linux® 系統(tǒng)的過程包括很多階段。不管您是引導一個標準的 x86 桌面系統(tǒng),還是引導一臺嵌入式的 PowerPC® 機器,很多流程都驚人地相似。本文將探索 Linux 的引導過程,從最初的引導到啟動第一個用戶空間應用程序。在本文介紹的過程中,您將學習到各種與引導有關的主題,例如引導加載程序、內(nèi)核解壓、初始 RAM 磁盤以及 Linux 引導的其他一些元素。

早期時,啟動一臺計算機意味著要給計算機喂一條包含引導程序的紙帶,或者手工使用前端面板地址/數(shù)據(jù)/控制開關來加載引導程序。盡管目前的計算機已經(jīng)裝備了很多工具來簡化引導過程,但是這一切并沒有對整個過程進行必要的簡化。

讓我們先從高級的視角來查看 Linux 引導過程,這樣就可以看到整個過程的全貌了。然后將回顧一下在各個步驟到底發(fā)生了什么。在整個過程中,參考一下內(nèi)核源代碼可以幫助我們更好地了解內(nèi)核源代碼樹,并在以后對其進行深入分析。

概述

圖 1 是我們在 20,000 英尺的高度看到的視圖。


圖 1. Linux 引導過程在 20,000 英尺處的視圖
Linux 引導過程在 20,000 英尺處的視圖

當系統(tǒng)首次引導時,或系統(tǒng)被重置時,處理器會執(zhí)行一個位于已知位置處的代碼。在個人計算機(PC)中,這個位置在基本輸入/輸出系統(tǒng)(BIOS) 中,它保存在主板上的閃存中。嵌入式系統(tǒng)中的中央處理單元(CPU)會調(diào)用這個重置向量來啟動一個位于閃存/ROM 中的已知地址處的程序。在這兩種情況下,結果都是相同的。因為 PC 提供了很多靈活性,BIOS 必須確定要使用哪個設備來引導系統(tǒng)。稍后我們將詳細介紹這個過程。

當找到一個引導設備之后,第一階段的引導加載程序就被裝入 RAM 并執(zhí)行。這個引導加載程序在大小上小于 512 字節(jié)(一個扇區(qū)),其作用是加載第二階段的引導加載程序。

當?shù)诙A段的引導加載程序被裝入 RAM 并執(zhí)行時,通常會顯示一個動畫屏幕,并將 Linux 和一個可選的初始 RAM 磁盤(臨時根文件系統(tǒng))加載到內(nèi)存中。在加載映像時,第二階段的引導加載程序就會將控制權交給內(nèi)核映像,然后內(nèi)核就可以進行解壓和初始化了。在這個階段 中,第二階段的引導加載程序會檢測系統(tǒng)硬件、枚舉系統(tǒng)鏈接的硬件設備、掛載根設備,然后加載必要的內(nèi)核模塊。完成這些操作之后啟動第一個用戶空間程序(init),并執(zhí)行高級系統(tǒng)初始化工作。

這就是 Linux 引導的整個過程。現(xiàn)在讓我們深入挖掘一下這個過程,并深入研究一下 Linux 引導過程的一些詳細信息。





回頁首


系統(tǒng)啟動

系統(tǒng)啟動階段依賴于引導 Linux 系統(tǒng)上的硬件。在嵌入式平臺中,當系統(tǒng)加電或重置時,會使用一個啟動環(huán)境。這方面的例子包括 U-Boot、RedBoot 和 Lucent 的 MicroMonitor。嵌入式平臺通常都是與引導監(jiān)視器搭配銷售的。這些程序位于目標硬件上的閃存中的某一段特殊區(qū)域,它們提供了將 Linux 內(nèi)核映像下載到閃存并繼續(xù)執(zhí)行的方法。除了可以存儲并引導 Linux 映像之外,這些引導監(jiān)視器還執(zhí)行一定級別的系統(tǒng)測試和硬件初始化過程。在嵌入式平臺中,這些引導監(jiān)視器通常會涉及第一階段和第二階段的引導加載程序。

提取 MBR 的信息

要查看 MBR 的內(nèi)容,請使用下面的命令:

# dd if=/dev/hda of=mbr.bin bs=512 count=1 # od -xa mbr.bin

這個 dd 命令需要以 root 用戶的身份運行,它從 /dev/hda(第一個 IDE 盤) 上讀取前 512 個字節(jié)的內(nèi)容,并將其寫入 mbr.bin 文件中。od 命令會以十六進制和 ASCII 碼格式打印這個二進制文件的內(nèi)容。

在 PC 中,引導 Linux 是從 BIOS 中的地址 0xFFFF0 處開始的。BIOS 的第一個步驟是加電自檢(POST)。POST 的工作是對硬件進行檢測。BIOS 的第二個步驟是進行本地設備的枚舉和初始化。

給定 BIOS 功能的不同用法之后,BIOS 由兩部分組成:POST 代碼和運行時服務。當 POST 完成之后,它被從內(nèi)存中清理了出來,但是 BIOS 運行時服務依然保留在內(nèi)存中,目標操作系統(tǒng)可以使用這些服務。

要引導一個操作系統(tǒng),BIOS 運行時會按照 CMOS 的設置定義的順序來搜索處于活動狀態(tài)并且可以引導的設備。引導設備可以是軟盤、CD-ROM、硬盤上的某個分區(qū)、網(wǎng)絡上的某個設備,甚至是 USB 閃存。

通常,Linux 都是從硬盤上引導的,其中主引導記錄(MBR)中包含主引導加載程序。MBR 是一個 512 字節(jié)大小的扇區(qū),位于磁盤上的第一個扇區(qū)中(0 道 0 柱面 1 扇區(qū))。當 MBR 被加載到 RAM 中之后,BIOS 就會將控制權交給 MBR。





回頁首


第一階段引導加載程序

MBR 中的主引導加載程序是一個 512 字節(jié)大小的映像,其中包含程序代碼和一個小分區(qū)表(參見圖 2)。前 446 個字節(jié)是主引導加載程序,其中包含可執(zhí)行代碼和錯誤消息文本。接下來的 64 個字節(jié)是分區(qū)表,其中包含 4 個分區(qū)的記錄(每個記錄的大小是 16 個字節(jié))。MBR 以兩個特殊數(shù)字的字節(jié)(0xAA55)結束。這個數(shù)字會用來進行 MBR 的有效性檢查。


圖 2. MBR 剖析
MBR 剖析

主引導加載程序的工作是查找并加載次引導加載程序(第二階段)。它是通過在分區(qū)表中查找一個活動分區(qū)來實現(xiàn)這種功能的。當找到一個活動分區(qū)時,它會 掃描分區(qū)表中的其他分區(qū),以確保它們都不是活動的。當這個過程驗證完成之后,就將活動分區(qū)的引導記錄從這個設備中讀入 RAM 中并執(zhí)行它。





回頁首


第二階段引導加載程序

次引導加載程序(第二階段引導加載程序)可以更形象地稱為內(nèi)核加載程序。這個階段的任務是加載 Linux 內(nèi)核和可選的初始 RAM 磁盤。

GRUB 階段引導加載程序

/boot/grub 目錄中包含了 stage1stage1.5stage2 引導加載程序,以及很多其他加載程序(例如,CR-ROM 使用的是 iso9660_stage_1_5)。

在 x86 PC 環(huán)境中,第一階段和第二階段的引導加載程序一起稱為 Linux Loader(LILO)或 GRand Unified Bootloader(GRUB)。由于 LILO 有一些缺點,而 GRUB 克服了這些缺點,因此下面讓我們就來看一下 GRUB。(有關 GRUB、LILO 和相關主題的更多內(nèi)容,請參閱本文后面的 參考資料 部分的內(nèi)容。)

關于 GRUB,很好的一件事情是它包含了有關 Linux 文件系統(tǒng)的知識。GRUB 不像 LILO 一樣使用裸扇區(qū),而是可以從 ext2 或 ext3 文件系統(tǒng)中加載 Linux 內(nèi)核。它是通過將兩階段的引導加載程序轉(zhuǎn)換成三階段的引導加載程序來實現(xiàn)這項功能的。階段 1 (MBR)引導了一個階段 1.5 的引導加載程序,它可以理解包含 Linux 內(nèi)核映像的特殊文件系統(tǒng)。這方面的例子包括 reiserfs_stage1_5(要從 Reiser 日志文件系統(tǒng)上進行加載)或 e2fs_stage1_5(要從 ext2 或 ext3 文件系統(tǒng)上進行加載)。當階段 1.5 的引導加載程序被加載并運行時,階段 2 的引導加載程序就可以進行加載了。

當階段 2 加載之后,GRUB 就可以在請求時顯示可用內(nèi)核列表(在 /etc/grub.conf 中進行定義,同時還有幾個軟符號鏈接 /etc/grub/menu.lst/etc/grub.conf)。我們可以選擇內(nèi)核甚至修改附加內(nèi)核參數(shù)。另外,我們也可以使用一個命令行的 shell 對引導過程進行高級手工控制。

將第二階段的引導加載程序加載到內(nèi)存中之后,就可以對文件系統(tǒng)進行查詢了,并將默認的內(nèi)核映像和 initrd 映像加載到內(nèi)存中。當這些映像文件準備好之后,階段 2 的引導加載程序就可以調(diào)用內(nèi)核映像了。





回頁首


內(nèi)核

GRUB 中的手工引導

在 GRUB 命令行中,我們可以使用 initrd 映像引導一個特定的內(nèi)核,方法如下:

grub> kernel /bzImage-2.6.14.2
[Linux-bzImage, setup=0x1400, size=0x29672e]

grub> initrd /initrd-2.6.14.2.img
[Linux-initrd @ 0x5f13000, 0xcc199 bytes]

grub> boot

Uncompressing Linux... Ok, booting the kernel.

如果您不知道要引導的內(nèi)核的名稱,只需使用斜線(/)然后按下 Tab 鍵即可。GRUB 會顯示內(nèi)核和 initrd 映像列表。

當內(nèi)核映像被加載到內(nèi)存中,并且階段 2 的引導加載程序釋放控制權之后,內(nèi)核階段就開始了。內(nèi)核映像并不是一個可執(zhí)行的內(nèi)核,而是一個壓縮過的內(nèi)核映像。通常它是一個 zImage(壓縮映像,小于 512KB)或一個 bzImage(較大的壓縮映像,大于 512KB),它是提前使用 zlib 進行壓縮過的。在這個內(nèi)核映像前面是一個例程,它實現(xiàn)少量硬件設置,并對內(nèi)核映像中包含的內(nèi)核進行解壓,然后將其放入高端內(nèi)存中,如果有初始 RAM 磁盤映像,就會將它移動到內(nèi)存中,并標明以后使用。然后該例程會調(diào)用內(nèi)核,并開始啟動內(nèi)核引導的過程。

當 bzImage(用于 i386 映像)被調(diào)用時,我們從 ./arch/i386/boot/head.Sstart 匯編例程開始執(zhí)行(主要流程圖請參看圖 3)。這個例程會執(zhí)行一些基本的硬件設置,并調(diào)用 ./arch/i386/boot/compressed/head.S 中的 startup_32 例程。此例程會設置一個基本的環(huán)境(堆棧等),并清除 Block Started by Symbol(BSS)。然后調(diào)用一個叫做 decompress_kernel 的 C 函數(shù)(在 ./arch/i386/boot/compressed/misc.c 中)來解壓內(nèi)核。當內(nèi)核被解壓到內(nèi)存中之后,就可以調(diào)用它了。這是另外一個 startup_32 函數(shù),但是這個函數(shù)在 ./arch/i386/kernel/head.S 中。

在這個新的 startup_32 函數(shù)(也稱為清除程序或進程 0)中,會對頁表進行初始化,并啟用內(nèi)存分頁功能。然后會為任何可選的浮點單元(FPU)檢測 CPU 的類型,并將其存儲起來供以后使用。然后調(diào)用 start_kernel 函數(shù)(在 init/main.c 中),它會將您帶入與體系結構無關的 Linux 內(nèi)核部分。實際上,這就是 Linux 內(nèi)核的 main 函數(shù)。


圖 3. Linux 內(nèi)核 i386 引導的主要函數(shù)流程
Linux 內(nèi)核 i386 引導的主要函數(shù)流程

通過調(diào)用 start_kernel,會調(diào)用一系列初始化函數(shù)來設置中斷,執(zhí)行進一步的內(nèi)存配置,并加載初始 RAM 磁盤。最后,要調(diào)用 kernel_thread(在 arch/i386/kernel/process.c 中)來啟動 init 函數(shù),這是第一個用戶空間進程(user-space process)。最后,啟動空任務,現(xiàn)在調(diào)度器就可以接管控制權了(在調(diào)用 cpu_idle 之后)。通過啟用中斷,搶占式的調(diào)度器就可以周期性地接管控制權,從而提供多任務處理能力。

在內(nèi)核引導過程中,初始 RAM 磁盤(initrd)是由階段 2 引導加載程序加載到內(nèi)存中的,它會被復制到 RAM 中并掛載到系統(tǒng)上。這個 initrd 會作為 RAM 中的臨時根文件系統(tǒng)使用,并允許內(nèi)核在沒有掛載任何物理磁盤的情況下完整地實現(xiàn)引導。由于與外圍設備進行交互所需要的模塊可能是 initrd 的一部分,因此內(nèi)核可以非常小,但是仍然需要支持大量可能的硬件配置。在內(nèi)核引導之后,就可以正式裝備根文件系統(tǒng)了(通過 pivot_root):此時會將 initrd 根文件系統(tǒng)卸載掉,并掛載真正的根文件系統(tǒng)。

decompress_kernel 輸出

函數(shù) decompress_kernel 就是顯示我們通常看到的解壓消息的地方:

Uncompressing Linux... Ok, booting the kernel.

initrd 函數(shù)讓我們可以創(chuàng)建一個小型的 Linux 內(nèi)核,其中包括作為可加載模塊編譯的驅(qū)動程序。這些可加載的模塊為內(nèi)核提供了訪問磁盤和磁盤上的文件系統(tǒng)的方法,并為其他硬件提供了驅(qū)動程序。由于根文件系統(tǒng)是磁盤上的一個文件系統(tǒng),因此 initrd 函數(shù)會提供一種啟動方法來獲得對磁盤的訪問,并掛載真正的根文件系統(tǒng)。在一個沒有硬盤的嵌入式環(huán)境中,initrd 可以是最終的根文件系統(tǒng),或者也可以通過網(wǎng)絡文件系統(tǒng)(NFS)來掛載最終的根文件系統(tǒng)。





回頁首


Init

當內(nèi)核被引導并進行初始化之后,內(nèi)核就可以啟動自己的第一個用戶空間應用程序了。這是第一個調(diào)用的使用標準 C 庫編譯的程序。在此之前,還沒有執(zhí)行任何標準的 C 應用程序。

在桌面 Linux 系統(tǒng)上,第一個啟動的程序通常是 /sbin/init。但是這不是一定的。很少有嵌入式系統(tǒng)會需要使用 init 所提供的豐富初始化功能(這是通過 /etc/inittab 進行配置的)。在很多情況下,我們可以調(diào)用一個簡單的 shell 腳本來啟動必需的嵌入式應用程序。





回頁首


結束語

與 Linux 本身非常類似,Linux 的引導過程也非常靈活,可以支持眾多的處理器和硬件平臺。最初,加載引導加載程序提供了一種簡單的方法,不用任何花架子就可以引導 Linux。LILO 引導加載程序?qū)σ龑芰M行了擴充,但是它卻缺少文件系統(tǒng)的感知能力。最新一代的引導加載程序,例如 GRUB,允許 Linux 從一些文件系統(tǒng)(從 Minix 到 Reise)上進行引導。



參考資料

學習
  • 您可以參閱本文在 developerWorks 全球站點上的 英文原文

  • Boot Records Revealed 是有關 MBR 和各種引導加載程序很好的資源。這個資源不僅僅是有關 MBR 的資料的匯編,還討論了 GRUB、LILO 和各種 Windows® 引導加載程序的問題。

  • 請查看 Disk Geometry 頁面來理解磁盤及其結構。您會發(fā)現(xiàn)有關磁盤的有用屬性。

  • live CD 是一個可以從 CD 或 DVD 上引導的操作系統(tǒng),它不需要使用硬盤。

  • 引導加載程序之爭:了解 LILO 和 GRUB”(developerWorks,2005 年 8 月)詳細介紹了 LILO 和 GRUB 引導加載程序。

  • 在 developerWorks 上的 LPI 考試準備 系列教程中,我們可以學習有關引導 Linux 系統(tǒng)的詳細介紹,以及在準備參加系統(tǒng)管理員認證考試時需要準備的 Linux 基礎知識。

  • LILO 是 GRUB 的先驅(qū),但是我們可能發(fā)現(xiàn)它依然可以引導 Linux。

  • mkintrd 命令用來創(chuàng)建初始的 RAM 磁盤映像。這個命令可以用來構建初始的根文件系統(tǒng),它可以用來引導允許提前加載訪問真正根文件系統(tǒng)所需要的塊設備的配置。

  • Debian Linux Kernel Project 中,我們可以找到更多有關 Linux 內(nèi)核、引導和嵌入式開發(fā)的信息。

  • developerWorks Linux 專區(qū) 中可以找到為 Linux 開發(fā)人員準備的更多資源。

  • 隨時關注 developerWorks 技術事件和網(wǎng)絡廣播

獲得產(chǎn)品和技術
  • MicroMonitor 為各種小型的目標設備提供了引導環(huán)境。我們可以使用這個監(jiān)視器在嵌入式環(huán)境中引導 Linux。它已經(jīng)移植到 ARM、 XScale、MIPS、PowerPC、Coldfire 和 Hitachi 的 Super-H 上了。

  • GNU GRUB 是一個具有眾多選項和靈活性的引導 shell。

  • LinuxBIOS 是 BIOS 的一個替代品。LinuxBIOS 不但可以引導 Linux,而且它本身就是一個壓縮的 Linux 內(nèi)核。

  • OpenBIOS 是另一個可移植的 BIOS 項目,可以在很多體系結構上進行操作,例如 x86、Alpha 和 AMD64。

  • kernel.org 上可以找到最新的內(nèi)核樹。

  • 訂購免費的 SEK for Linux,它有兩張 DVD,其中包括最新的 IBM for Linux 的試用版軟件,這些軟件包括 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere®。

  • 使用 IBM 試用版軟件 改進您的下一個開發(fā)項目,從 developerWorks 上可以直接下載這些軟件。


討論


關于作者

M. tim jones

M. Tim Jones 是一名嵌入式軟件架構師,他是 GNU/Linux Application ProgrammingAI Application ProgrammingBSD Sockets Programming from a Multilanguage Perspective 等書的作者。他的工程背景涉及從同步太空船開發(fā)內(nèi)核,到嵌入式系統(tǒng)架構和網(wǎng)絡協(xié)議開發(fā)。Tim 是位于科羅拉多州的 Longmont 的 Emulex 公司的一名顧問工程師。

posted on 2008-03-06 14:19 Magic 閱讀(269) 評論(0)  編輯 收藏 引用 所屬分類: Linux
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久人人爽人人爽爽久久| 日韩视频在线观看免费| 欧美激情2020午夜免费观看| 亚洲精品在线免费| 午夜视频久久久久久| 狂野欧美激情性xxxx| 国产精品日日摸夜夜添夜夜av| 亚洲第一页自拍| 亚洲在线视频网站| 免费在线观看成人av| 一区二区免费看| 男同欧美伦乱| 国产一区二区电影在线观看| 99精品视频免费| 麻豆国产精品777777在线| 亚洲午夜久久久久久尤物| 免费欧美日韩| 一区二区三区久久网| 欧美国产视频在线观看| 欧美国产日韩视频| 亚洲国产精品99久久久久久久久| 欧美一区午夜视频在线观看| 日韩视频免费观看| 国产欧美精品一区二区三区介绍| 在线视频亚洲| 午夜视频在线观看一区二区三区 | 亚洲高清av| 中文无字幕一区二区三区| 久久综合狠狠综合久久激情| 欧美伊人久久久久久午夜久久久久| 欧美三级韩国三级日本三斤| 一区二区三区日韩精品视频| 午夜久久影院| 99re亚洲国产精品| 午夜精品免费视频| 国产一区二区高清| 亚洲精品国产系列| 欧美精品免费播放| 夜夜嗨av色综合久久久综合网 | 亚洲免费观看高清完整版在线观看熊 | 模特精品裸拍一区| 亚洲欧美视频一区二区三区| 亚洲视频网在线直播| 国产精品你懂的在线| 欧美一区午夜精品| 欧美精品一区二区三区四区| 99精品国产一区二区青青牛奶| 亚洲综合视频1区| 激情综合电影网| 欧美激情第1页| 国产亚洲人成a一在线v站| 99riav1国产精品视频| 国产精品扒开腿做爽爽爽软件| 欧美一区91| 欧美亚日韩国产aⅴ精品中极品| 欧美成年人视频| 欧美日韩精品高清| 欧美在线视频日韩| 欧美插天视频在线播放| 亚洲图色在线| 欧美日韩国产精品专区 | 在线午夜精品自拍| 欧美福利视频网站| 欧美国产日本韩| 亚洲二区视频在线| 久久女同互慰一区二区三区| 噜噜噜躁狠狠躁狠狠精品视频| 国产视频一区免费看| 欧美高清在线一区二区| 国产精品99免视看9| 日韩视频在线免费观看| 99视频在线观看一区三区| 老司机免费视频久久 | 亚洲乱码国产乱码精品精天堂| 久热精品视频在线观看一区| 久久这里只精品最新地址| 国内精品模特av私拍在线观看| 亚洲国产一区在线| 国产视频久久久久| 久久成人亚洲| 亚洲在线视频观看| 国产精品亚洲综合一区在线观看| 亚洲一区在线观看免费观看电影高清| 亚洲国产精品成人精品| 欧美成ee人免费视频| 亚洲国产高清在线观看视频| 亚洲精品孕妇| 欧美日韩亚洲成人| 欧美激情一区| 一区二区三区欧美在线| 国产精品久99| 亚洲国产一区视频| 亚洲图片欧美午夜| 国产精品一区免费在线观看| 一本色道88久久加勒比精品 | 在线不卡中文字幕| 欧美一区二区三区在线看| 亚洲视频1区| 国产噜噜噜噜噜久久久久久久久| 欧美一区二区三区久久精品| 欧美二区不卡| 亚洲一级黄色av| 欧美日韩情趣电影| 欧美一区二区精品| 亚洲黄色三级| 91久久精品美女| 免费成人高清在线视频| 免费视频一区二区三区在线观看| 亚洲精品在线看| 国产亚洲成av人片在线观看桃| 老司机亚洲精品| 亚洲一区二区三区中文字幕| 久久综合久久综合九色| 亚洲视频日本| 在线播放豆国产99亚洲| 国产精品理论片| 嫩草成人www欧美| 亚洲欧美日韩一区| 亚洲国产三级在线| 久久久久久久久久久久久久一区 | 欧美性猛交xxxx乱大交蜜桃| 久久久久久久久久久一区 | 中文在线一区| 亚洲丰满少妇videoshd| 国产精品视频福利| 欧美区一区二区三区| 久久国产精品免费一区| 中文精品视频| 91久久久在线| 欧美成人日韩| 久久午夜激情| 欧美亚洲一区二区三区| 黑人巨大精品欧美一区二区小视频 | 亚洲人成小说网站色在线| 久久免费视频在线观看| 亚洲第一主播视频| 国产欧美一区二区三区另类精品| 欧美日韩卡一卡二| 蜜桃av一区二区| 久热精品视频在线观看一区| 久久精品国产成人| 欧美一级夜夜爽| 亚洲欧美日韩精品综合在线观看 | 欧美一区二区免费观在线| 在线一区二区三区四区| 亚洲精品在线观看免费| 亚洲国产经典视频| 亚洲国产一区视频| 国产精品美女久久久久久久| 欧美午夜精品| 国产精品久久久久999| 欧美午夜一区二区| 国产精品久久久久久户外露出| 欧美日韩视频一区二区三区| 欧美视频一二三区| 国产精品久久久久9999吃药| 国产精品成人久久久久| 国产麻豆视频精品| 国产一区美女| 极品av少妇一区二区| 亚洲国产精品成人综合| 最新成人在线| 亚洲一级在线| 久久精品日韩| 亚洲一区二区四区| 新片速递亚洲合集欧美合集| 欧美一区二区精美| 美女久久网站| 亚洲激情成人在线| 亚洲一区二区三区精品在线| 午夜精彩视频在线观看不卡 | 欧美主播一区二区三区| 久久午夜国产精品| 欧美激情精品久久久久久黑人| 欧美日韩美女一区二区| 国产精品一区久久| 亚洲国产婷婷| 亚洲欧美日韩一区二区三区在线| 亚洲人成在线免费观看| 亚洲天堂成人| 久久亚洲国产精品一区二区 | 亚洲综合社区| 久久久噜噜噜久噜久久 | 欧美一区二区在线免费播放| 免费不卡视频| 一本一本a久久| 久久人人97超碰精品888| 欧美日韩精品一区二区在线播放 | 日韩视频中文字幕| 欧美在线视频导航| 欧美激情一区二区久久久| 亚洲性夜色噜噜噜7777| 麻豆成人精品| 国产欧美日韩伦理| 一本色道久久88综合亚洲精品ⅰ| 久久精品99国产精品酒店日本| 亚洲精品人人| 久久人人爽人人爽爽久久| 国产九九精品视频| 中文久久精品|