在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式Linux系統(tǒng)的啟動時序和快速啟動的優(yōu)化方法分析

牽手一起夢 ? 來源:單片機與嵌入式系統(tǒng)應(yīng)用 ? 作者:周全成,鄭延召 ? 2020-10-04 14:29 ? 次閱讀

嵌入式Linux系統(tǒng)主要特點在于使用Bootloader替代了桌面系統(tǒng)的BIOS,同時對系統(tǒng)進行了規(guī)模上的裁剪,但硬件上的劣勢往往導(dǎo)致系統(tǒng)啟動速度較慢,而嵌入式產(chǎn)品使用者又對系統(tǒng)的開機速度比較敏感,這樣就產(chǎn)生了對于提高嵌入式Linux系統(tǒng)啟動速度的需求。本文對系統(tǒng)啟動時執(zhí)行哪些階段的操作,以及縮短這些操作時間的方法進行了探討。

1 嵌入式Linux系統(tǒng)啟動時序

目前,嵌入式系統(tǒng)的硬件平臺和應(yīng)用方向區(qū)別很大,但總體啟動流程是一致的。這里的系統(tǒng)啟動是指從用戶執(zhí)行上電/復(fù)位操作,到系統(tǒng)開始提供用戶可接收的服務(wù)水平所需要的過程。典型的上電/復(fù)位時序如表1所列。

表1 嵌入式Linux系統(tǒng)啟動時序

嵌入式Linux系統(tǒng)的啟動時序和快速啟動的優(yōu)化方法分析

2 Linux快速啟動方法

目前,一些Linux的發(fā)行版本已經(jīng)對啟動速度進行了優(yōu)化。如果利用標準Linux進行開發(fā),則啟動速度的提高主要是通過內(nèi)核配置和各種補丁包來實現(xiàn)的。下面分析快速啟動的一些關(guān)鍵技術(shù)。

2.1 Firmware和Bootloader階段

目標板一旦確定,F(xiàn)irmware運行的時間就無法改變了,F(xiàn)lash和RAM的讀寫速度也就隨之確定了。但如果復(fù)位時能夠繞過Firmware和Bootloader,即允許運行中的內(nèi)核加載以及運行另一個內(nèi)核,可以縮短啟動的時間。典型的實現(xiàn)有Kexec,它有2個組件,即用戶空間組件kexectools和內(nèi)核補丁。另外一種辦法是在內(nèi)核命令行中加入reboot=soft參數(shù),同樣可以跳過Firmware,但是缺點在于無法從用戶空間調(diào)用。

對于正常啟動,可以選擇速度比較快的Bootloader,并對內(nèi)核進行小型化處理;還可以使用高速的映像復(fù)制技術(shù)(如DMA2RAM),從而縮短復(fù)制的時間。為了縮短解壓消耗的時間,可尋求比較高效的壓縮算法。但一般情況下,壓縮比越高,算法越復(fù)雜,解壓速度就越慢,從而造成復(fù)制時間(與壓縮比成反比)和解壓時間(一般與壓縮比成正比)之間的矛盾。

2.2 內(nèi)核階段

內(nèi)核初始化時要對RealTime Clock (RTC)進行同步。此過程要占用1s的時間,可去掉以節(jié)約時間,但這樣CPU會與正確的時間有1s的偏差,如果關(guān)機時CPU時鐘又要保存在RTC中,偏差就會不斷累積。但對于使用外部時鐘源進行同步的系統(tǒng),則可安全地跳過這個階段。

Preset LPJ可以用來縮短每次啟動時調(diào)用calibrate_delay()來校準loops_per_jiffy消耗的時間。這個時間開銷與CPU頻率無關(guān),在典型的嵌入式硬件環(huán)境下會消耗300ms左右。LPJ值對于固定硬件平臺應(yīng)該是一致的,可以只計算一次,在后續(xù)的啟動中就可以在啟動參數(shù)中強制指定LPJ值,而跳過實際的計算過程。具體方法是:在正常啟動后記錄下內(nèi)核啟動信息中的“Calibrating Delay”數(shù)值,在啟動參數(shù)中以“l(fā)pj=xxxxxx”的形式強制指定。

啟動過程默認打開控制臺輸出啟動消息,但是控制臺尤其是基于幀緩沖的控制臺會減慢啟動速度。因此在嵌入式Linux產(chǎn)品中,將啟動過程中的控制臺設(shè)為靜默狀態(tài),方法是在內(nèi)核啟動參數(shù)中加入“quiet”。

設(shè)備搜索和驅(qū)動安裝是比較耗時的操作,因此要在編譯內(nèi)核時確定需要安裝哪些驅(qū)動模塊,以免系統(tǒng)搜索那些根本不存在的設(shè)備,尤其是多余的IDE設(shè)備。對于啟動時暫時不用安裝的設(shè)備,盡量將驅(qū)動編譯成模塊,在以后空閑時或者使用設(shè)備時加載,而不是全部放在啟動階段。

2.3 用戶空間階段

傳統(tǒng)Linux的初始化腳本是由bash執(zhí)行的,在內(nèi)核引導(dǎo)后啟動init進程(/sbin/init)。它使用一個ASCII文件(/etc/inittab)來改變運行級別,這個文件中又會調(diào)用RCSript,由RCSript查找/etc/rc.d/rc5.d/并啟動相應(yīng)鏈接指向的系統(tǒng)服務(wù)。

消費電子類Linux系統(tǒng)需要啟用圖形界面等必要的服務(wù),未經(jīng)優(yōu)化的系統(tǒng)在這個過程中會默認啟動很多根本用不到或者當(dāng)前用不到的系統(tǒng)服務(wù),這一部分會花去較大的時間開銷。最簡單的優(yōu)化辦法就是根據(jù)實際需要,通過改寫服務(wù)配置文件定制系統(tǒng)服務(wù)。另外,init腳本的執(zhí)行是串行的,在腳本量大時會導(dǎo)致引導(dǎo)過程非常長,因此可以考慮并行運行各種服務(wù)以加快啟動的速度。現(xiàn)在已經(jīng)出現(xiàn)了一些初始化程序來替代init進程,下面介紹initng和upstart。

initng(init nextgerneration)能夠并行啟動服務(wù)從而快速完成初始化工作。initng認為滿足了依賴關(guān)系的服務(wù)就可以啟動。在從外存加載一個腳本或等待硬件設(shè)備啟動的同時,可以運行另一個腳本來啟動別的服務(wù),使系統(tǒng)在CPU 和 I/O 之間實現(xiàn)較好的平衡。作為一個基于依賴關(guān)系的解決方案,initng使用自己的初始化腳本集,它們對服務(wù)和守護進程的依賴性進行了編碼。如果某個服務(wù)依賴(使用 need關(guān)鍵字定義)于其他服務(wù),則要保證啟動時它所依賴的所有服務(wù)均可用。無依賴關(guān)系的服務(wù)立即并行啟動,具有依賴關(guān)系的服務(wù)則要等待以安全啟動。

upstart與 initng的區(qū)別在于: upstart基于事件,任務(wù)/服務(wù)的啟動/停止都取決于它所等待的事件是否發(fā)生。upstart對事件的定義非常靈活,分為3類:edge (simple) events, level (value) events和temporal events。使用start/stop、事件名以及它所期待的值(可選)組成條目對觸發(fā)事件進行描述。事件依賴有兩種辦法:一種是任務(wù)自身導(dǎo)致事件發(fā)生,不管任務(wù)何時啟動/結(jié)束都會有事件發(fā)生,對于啟動時要執(zhí)行的基本任務(wù),這種辦法比較有效;而對于較復(fù)雜的依賴關(guān)系,則可使用任務(wù)的Shell腳本工具。

2.4 預(yù)讀取和預(yù)鏈接

預(yù)讀取(Readahead)可以將文件(程序和庫文件)在使用之前預(yù)先加載到RAM緩存中,這樣就不用在使用時為讀取這個文件而訪問I/O。如果知道下一步操作要訪問哪些文件,就可以提前將它們?nèi)?部分讀取到緩沖區(qū),從而加快執(zhí)行速度。嵌入式系統(tǒng)很多場合下對于下一步操作都是可預(yù)測的,比如系統(tǒng)啟動時總是以同樣的順序訪問同樣的可執(zhí)行/數(shù)據(jù)文件,文件塊的訪問往往是順序的,應(yīng)用程序啟動時總是訪問同樣的程序文件段、共享庫、資源或者輸入文件。這樣使用預(yù)讀取有很強的針對性,從而提高程序執(zhí)行速度。

ELF(Excutable and Linkable File)是目前Linux中的標準二進制格式,其啟動需要以下步驟:將共享庫映射到虛擬地址空間;解析符號引用;初始化每個ELF文件。由于共享庫是位置無關(guān)的,要在運行時完成部分重定位處理和符號查找的工作,才能跳到程序的入口點,因此在帶來靈活性的同時,也造成ELF文件的啟動速度緩慢,尤其是解析符號引用要消耗大量的時間,對于使用多個共享庫的大型程序更是如此。但在很多嵌入式系統(tǒng)中,可執(zhí)行文件和共享庫極少變化,而且每次程序運行時鏈接工作完全相同。

預(yù)鏈接(Prelink)利用這一點,修改ELF共享庫和二進制文件,將鏈接信息加入到可執(zhí)行文件中以簡化動態(tài)鏈接重定位,從而使程序啟動加快。預(yù)鏈接首先搜集要預(yù)鏈接的ELF二進制文件及其所依賴的共享庫,為每個庫分配唯一的虛擬空間位置,并將共享庫重新鏈接到這個基準位置(動態(tài)鏈接器要加載這個庫時,只要虛擬空間地址未被占用,它就會將庫映射到指定位置);然后預(yù)鏈接解析二進制或者庫中的所有重定位,并將重定位信息存放到ELF對象,還要將所有依賴庫的列表及校驗和添加到二進制文件或庫中。對于二進制文件,還需列出所有的沖突(在共享庫的自然搜索范圍內(nèi)對符號的解析不相同)。在運行時,動態(tài)鏈接器先檢查是否所有依賴的庫都已經(jīng)映射到指定的位置,而且?guī)煳募]有變化,只考慮沖突而不用處理每個庫的重定位,這樣大大提高了程序啟動的速度。使用時要注意的是,若共享庫發(fā)生了改變,則使用它的所有程序都要重新鏈接,否則程序仍要進行耗時的正常重定位。

3 XIP和文件系統(tǒng)優(yōu)化

3.1 代碼執(zhí)行方式

嵌入式系統(tǒng)中代碼的執(zhí)行方式主要有3種:

① 完全映射(fully shadowed)。嵌入式系統(tǒng)程序運行時,將所有的代碼從非易失存儲器(Flash、ROM等)復(fù)制到RAM中運行。

② 按需分頁(demand paging)。只復(fù)制部分代碼到RAM中。這種方法對RAM中的頁進行導(dǎo)入/導(dǎo)出管理,如果訪問位于虛存中但不在物理RAM中會產(chǎn)生頁錯誤,這時才將代碼和數(shù)據(jù)映射到RAM中。

③ eXecute In Place (XIP)。在系統(tǒng)啟動時,不將代碼復(fù)制到RAM,而是直接在非易失性存儲位置執(zhí)行。RAM中只存放需要不斷變化的數(shù)據(jù)部分,如圖1所示。如果非易失性存儲器的讀取速度與RAM相近,則XIP可以節(jié)省復(fù)制和解壓的時間。NOR Flash和ROM的讀取速度比較快(約100 ns),適合XIP;而NAND Flash的讀操作是基于扇區(qū)的,速度相對很慢(μs級),因此不宜實現(xiàn)XIP。

圖1 完全映射和XIP的比較

XIP可以分為以下2種:

① 內(nèi)核XIP。直接在Flash/ROM中運行內(nèi)核,可以節(jié)省復(fù)制和映像解壓的時間。Linux 2.6.10內(nèi)核已經(jīng)包含了XIP支持。

② 應(yīng)用程序XIP。直接從應(yīng)用程序代碼的存儲位置執(zhí)行,而不用將它加載到RAM中,這樣應(yīng)用程序的第一次執(zhí)行速度會比較快。要使用應(yīng)用程序XIP,應(yīng)該基于支持它的文件系統(tǒng)。

3.2 XIP文件系統(tǒng)

目前XIP文件系統(tǒng)的實現(xiàn)主要有2種: Linear XIP CRAMFS和Advanced XIP File System(AXFS)。

CRAMFS是一個壓縮的只讀文件系統(tǒng),本來用于桌面Linux系統(tǒng)的啟動,但CRAMFS經(jīng)過修改后可以支持嵌入式系統(tǒng)并支持XIP。Linear XIP CRAMFS用一個sticky bit對它管理的文件進行區(qū)分,標記為壓縮(按需分頁)或者未壓縮(XIP)。如果文件標記為XIP,則所有頁都不壓縮,而且要在Flash中連續(xù)存儲。在加載XIP文件時,直接對所有頁地址進行映射;而按需分頁的文件則在發(fā)生頁錯誤時,將相應(yīng)頁解壓到RAM中。

要創(chuàng)建Linear XIP CRAMFS文件系統(tǒng)映像,必須確定可執(zhí)行文件和庫文件的使用頻率,頻繁使用的文件適合于XIP,而其他文件應(yīng)該進行壓縮。現(xiàn)在有一些工具(如RAMUST和CFSST)可以幫助判斷哪些文件需要XIP,而哪些不需要。下面就可以給XIP文件加上標記并制作根文件系統(tǒng),以使用mkfs.cramfs工具為例:

chmod +t filenames

mkfs.cramfs–x rootfs rootfs.bin

另外,還要修改內(nèi)核配置參數(shù)以支持XIP:在啟動選項中向默認內(nèi)核命令字符串中加入rootfstype=cramfs,選擇內(nèi)核XIP并設(shè)置XIP內(nèi)核物理地址;在驅(qū)動程序中加入MTD對XIP的支持;在文件系統(tǒng)中加入對Linear XIP CRAMFS的支持。接下來就可以生成XIP映像了。

Linear XIP CRAMFS的一個缺陷在于它是基于文件的,即一個文件中的所有頁要么全部采用XIP,要么全部采用壓縮/按需分頁,但事實上同一文件中不同頁的使用頻率區(qū)別也很大。AXFS是Intel公司開發(fā)的一個新的只讀文件系統(tǒng),它從Linear XIP CRAMFS中繼承了許多方法,同時也進行了一些改進。AXFS的XIP粒度是基于頁的,并且自帶工具來判斷哪些頁需要XIP,哪些頁需要壓縮,從而更好地在速度和RAM/Flash的使用上取得平衡。

3.3 非XIP文件系統(tǒng)

XIP一般基于NOR Flash,成本相對較高。對于用戶數(shù)據(jù)量大的應(yīng)用,往往還要使用基于NAND Flash的,非XIP的文件系統(tǒng)常用的有JFFS2/YAFFS。

JFFS2是一種基于壓縮的文件系統(tǒng)。在多媒體應(yīng)用中,如果圖片、音視頻已經(jīng)經(jīng)過壓縮,則使用JFFS2無疑會給CPU帶來雙重的壓縮/解壓負擔(dān),訪問速度也會受到影響。因此,在這類應(yīng)用比較密集的應(yīng)用中,采用不壓縮的文件系統(tǒng)(如YAFFS/YAFFS2)可以加快系統(tǒng)速度。

YAFFS/YAFFS2是專為嵌入式系統(tǒng)使用NAND Flash設(shè)計的日志文件系統(tǒng)。與JFFS2相比,減少了一些功能(例如不支持數(shù)據(jù)壓縮),所以速度更快,掛載時間很短,對內(nèi)存的占用較小。YAFFS/YAFFS2自帶NAND芯片的驅(qū)動,用戶可以不使用MTD和VFS,直接對文件系統(tǒng)操作。YAFFS與YAFFS2的主要區(qū)別在于:前者僅支持小頁(512字節(jié)) NAND Flash;后者則可支持大頁(2 KB) NAND Flash,同時在內(nèi)存使用、垃圾回收、訪問速度等方面有所改進。

結(jié)語

快速啟動對于嵌入式Linux系統(tǒng)是比較迫切的要求之一。本文通過分析嵌入式系統(tǒng)的引導(dǎo)過程和關(guān)鍵時延因素,提出了相應(yīng)的解決辦法,并對XIP文件系統(tǒng)進行了介紹。由于啟動速度非常依賴于硬件平臺,而且有的方法互相排斥,因此在具體應(yīng)用時需要綜合考慮和選擇。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5087

    文章

    19148

    瀏覽量

    306196
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1369

    瀏覽量

    114783
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11322

    瀏覽量

    209869
收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式Linux啟動時優(yōu)化的秘密之三-內(nèi)核

    本文主要講述嵌入式Linux啟動時優(yōu)化的秘密之三-內(nèi)核,我們繼續(xù)上篇沒有講完的嵌入式Linux
    發(fā)表于 04-20 18:09 ?2480次閱讀

    嵌入式Linux啟動時優(yōu)化的秘密之四-啟動腳本

    本文主要講述嵌入式Linux啟動時優(yōu)化的秘密,我們繼續(xù)上篇沒有講完的嵌入式Linux
    發(fā)表于 04-21 09:22 ?2452次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>啟動時</b>間<b class='flag-5'>優(yōu)化</b>的秘密之四-<b class='flag-5'>啟動</b>腳本

    嵌入式Linux啟動時優(yōu)化的秘密之五-Bootloader

    本文主要講述嵌入式Linux啟動時優(yōu)化的秘密,我們繼續(xù)上篇沒有講完的嵌入式Linux
    發(fā)表于 04-21 17:24 ?2858次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>啟動時</b>間<b class='flag-5'>優(yōu)化</b>的秘密之五-Bootloader

    嵌入式Linux系統(tǒng)快速啟動方法

    1 嵌入式Linux系統(tǒng)啟動時序目前,嵌入式系統(tǒng)的硬件平臺和應(yīng)用方向區(qū)別很大,但總體啟動流程一致
    發(fā)表于 07-24 07:14

    如何對嵌入式linux系統(tǒng)快速啟動進行優(yōu)化

    嵌入式linux快速啟動的一些優(yōu)化方法,主要是要掌握嵌入式
    發(fā)表于 11-04 06:36

    嵌入式linux系統(tǒng)啟動時間測試方法

    嵌入式linux系統(tǒng)啟動時間測試方法轉(zhuǎn)載2016-08-17 10:41:43方法一:gpio(最準確的,未使用)1.找到一個空閑的gpi
    發(fā)表于 11-05 07:04

    從Bootloader的角度探討如何優(yōu)化進而縮短啟動時

    優(yōu)化嵌入式Linux啟動時間之Bootloader注:本文轉(zhuǎn)載自微信公眾號嵌入式客棧——優(yōu)化
    發(fā)表于 12-16 07:19

    如何優(yōu)化嵌入式Linux啟動時

    優(yōu)化嵌入式Linux啟動時間之啟動腳本注:本文轉(zhuǎn)載自微信公眾號嵌入式客棧——
    發(fā)表于 12-23 06:43

    嵌入式Linux系統(tǒng)中的快速啟動技術(shù)分析

    摘要 Linux在消費電子類產(chǎn)品中得到了廣泛應(yīng)用,由于嵌入式用戶對于系統(tǒng)啟動速度較為敏感,因此快速啟動技術(shù)逐漸成為研究和應(yīng)用中的一個重點。本
    發(fā)表于 03-29 15:11 ?1838次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b>中的<b class='flag-5'>快速</b><b class='flag-5'>啟動</b>技術(shù)<b class='flag-5'>分析</b>

    基于狀態(tài)保持恢復(fù)的嵌入式Linux快速啟動方法的研究陳鵬

    基于狀態(tài)保持恢復(fù)的嵌入式Linux快速啟動方法的研究_陳鵬
    發(fā)表于 03-15 08:00 ?1次下載

    嵌入式Linux快速啟動技術(shù)綜述張全勝

    嵌入式Linux快速啟動技術(shù)綜述_張全勝
    發(fā)表于 03-14 08:00 ?1次下載

    基于ARM嵌入式Linux快速啟動

      ARM平臺嵌入式Linux下有些應(yīng)用對系統(tǒng)啟動時間有著特殊的要求。在很多場合下,這些系統(tǒng)并不需要針對所有任務(wù)立即就位,但是針對某些關(guān)鍵任務(wù)(例如接收以太網(wǎng)命令或者顯示用戶界面)則必
    發(fā)表于 09-18 14:17 ?3次下載
    基于ARM<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>快速</b><b class='flag-5'>啟動</b>

    嵌入式linux系統(tǒng)快速啟動優(yōu)化的一些方法

    嵌入式linux快速啟動的一些優(yōu)化方法,主要是要掌握嵌入式
    發(fā)表于 11-01 17:06 ?8次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b><b class='flag-5'>系統(tǒng)</b><b class='flag-5'>快速</b><b class='flag-5'>啟動</b><b class='flag-5'>優(yōu)化</b>的一些<b class='flag-5'>方法</b>

    嵌入式linux系統(tǒng)啟動時間測試方法

    嵌入式linux系統(tǒng)啟動時間測試方法轉(zhuǎn)載2016-08-17 10:41:43方法一:gpio(最準確的,未使用)1.找到一個空閑的gpi
    發(fā)表于 11-02 09:21 ?10次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>之<b class='flag-5'>系統(tǒng)啟動時</b>間測試<b class='flag-5'>方法</b>

    優(yōu)化嵌入式Linux啟動時間之文件系統(tǒng)

    為一個挑戰(zhàn),對于大多數(shù)應(yīng)用開發(fā)人員而言,由于Linux系統(tǒng)的復(fù)雜性,對于如何提高啟動速度,往往無從下手。那么讀完優(yōu)化嵌入式
    發(fā)表于 11-02 14:36 ?9次下載
    <b class='flag-5'>優(yōu)化</b><b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>的<b class='flag-5'>啟動時</b>間之文件<b class='flag-5'>系統(tǒng)</b>
    主站蜘蛛池模板: a级午夜毛片免费一区二区| 日本在线视频精品| 操久久久| 操女人视频网站| 55夜色66夜色国产精品站| 在线一区观看| 久久国产精品免费看| se色成人亚洲综合| 在线观看黄网| 亚洲欧美综合一区二区三区四区| 国产成人毛片视频不卡在线| 国产情侣露脸| 免费高清特黄a 大片| 亚洲 欧美 校园| 奇米一区二区| 性欧美高清极品xx| 性配久久久| 亚洲综合欧美日本另类激情| 五月天婷婷在线视频| 日本黄色片免费看| 国模啪啪一区二区三区| 亚洲午夜久久久久国产| 免费在线观看理论片| 好爽好紧好大的免费视频国产| 男女午夜剧场| 色五月丁香五月综合五月| 久久综合久| 小雪被老外黑人撑破了| 久久国产精品岛国搬运工| 手机看高清特黄a大片| 永久免费在线观看| 欧美综合天天夜夜久久| 免费午夜影片在线观看影院| 欧美三级黄| 精品国产免费观看一区高清| 婷婷色婷婷| 精品三级国产精品经典三| 一级视频在线| 深夜桃色影院| 在线免费视频一区二区| 一级毛片 在线播放|