《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 其他 > 教學:secure boot (一)FIT Image

教學:secure boot (一)FIT Image

2022-09-05
來源:電子技術應用專欄作家 嵌入式與Linux那些事
關鍵詞: secureboot FITImage

  前言

  secure boot 和FIT Image是前段時間接觸到的,其實早就該總結下了,奈何懶癌犯了,拖了好久才寫出來。

  之前也有人問我,工作后最大的感受是什么?我的回答是:“快速學習”。

  就嵌入式來講,大多數應屆生在校期間可能都沒做過完整的項目,僅憑在校期間學習的內容很難勝任公司的要求。

  就底層驅動來講,雖然我之前也學習過韋東山老師的上s3c2440的課程,但是到了公司才發現,這些內容其實都已經過時了。

  但并不是說這些內容都沒有必要去學習了。在學習的過程中,認為最重要的是培養我們的自學能力。

  很多初學者在剛開始學習時,可能就敗在了搭建環境上。搭建環境時遇到問題不知道怎么辦?

  我們日常開發中遇到的90%的問題,在網上都有人遇到過,也有相應的解決辦法。學會利用bing,google,stackoverflow等搜索工具是一項很重要的技能。

  如果遇到了網上沒有的問題怎么辦?軟件問題要先搞清楚原理,再去看代碼邏輯。硬件問題看官方手冊。像Linux kernel,ARM等都提供了完善的手冊,大部分問題在手冊中都有相應說明。

  好了,扯遠了。下面回歸正題。

  本文主要介紹了FIT Image起源,制作方法,its的語法結構,bootm 啟動FIT Image的方式。

  本文這篇文章是對后面介紹的secure boot做鋪墊。ARMv8 secure boot一種實現的方式就是利用了FIT Image的特性。

  zImage,uImage, Legacy uImage 和 FIT uImage

  內核經過編譯后,會生成一個elf的可執行程序,叫vmlinux,這個就是原始的未經任何處理加工的原版內核elf文件。不過,最終燒寫在嵌入式設備上的并不是這個文件。而是經過objcopy工具加工后的專門用于燒錄的鏡像格式Image。

  原則上Image就可以直接被燒錄到Flash上進行啟動執行,但linux的內核開發者覺得Image還是太大了,因此對Image進行了壓縮,并且在Image壓縮后的文件的前端附加了一部分解壓縮代碼,構成了一個壓縮格式的鏡像文件就叫zImage。

  解壓的時候,通過zImage鏡像頭部的解壓縮代碼進行自解壓,然后執行解壓出來的內核鏡像。

  Uboot要正確啟動Linux內核,就需要知道內核的一些信息,比如鏡像的類型(kernel image,dtb,ramdisk image),鏡像在內存的位置,鏡像的鏈接地址,鏡像文件是否有壓縮等等。

  Uboot為了拿到這些信息,發明了一種內核格式叫uImage,也叫Legacy uImage。uImage是由zImage加工得到的,uboot中有一個工具mkimage,該工具會給zImage加一個64字節的header,將啟動內核所需的信息存儲在header中。uboot啟動后,從header中讀取所需的信息,按照指示,進行相應的動作即可。

  header格式可以參考:include/image.h。mkimage源碼在tools/mkimage

  FIT image的來源

  有了Legacy uImage后,為什么又搞出來一個FIT uImage呢?

  在Linus Torvalds 看來,內核中arch/arm/mach-xxx充斥著大量的垃圾代碼。因為內核并不關心板級細節,比如板上的platform設備、resource、i2c_board_info、spi_board_info等等。大家有興趣可以看下s3c2410的板級目錄,代碼量在數萬行。

  因此,ARM社區引入了Device Tree,使用Device Tree后,許多硬件的細節可以直接透過它傳遞給Linux,而不再需要在kernel中進行大量的冗余編碼。

  為了更好的支持單個固件的通用性,Uboot也需要對這種uImage固件進行支持。FIT uImage中加入多個dtb文件 和ramdisk文件,當然如果需要的話,同樣可以支持多個kernel文件。

  內核中的FDT全程為flattened device tree,FIT全稱叫flattened image tree。FIT利用了Device Tree Source files(DTS)的語法,生成的Image文件也和dtb文件類似(稱作itb)。

  這樣的目的就是能夠使同一個uImage能夠在Uboot中選擇特定的kernel/dtb和ramdisk進行啟動了,達成一個uImage可以通用多個板型的目的。

  制作FIT Image

  制作FIT Image需要用到兩個工具,mkimage和的dtc。dtc要導入到環境變量$PATH中,mkimage會調用dtc。

  mkimage的輸入為 image source file,它定義了啟動過程中image的各種屬性,擴展名為.its。its只是描述了Image的屬性,實際的Image data 是在uImage中,具體路徑由its指定。

  微信圖片_20220905173802.png

  如下是kernel 的its文件,后面會介紹各項內容的含義。

  /*

  * Simple U-Boot uImage source file containing a single kernel

  */

  /dts-v1/;

  / {

  description = "Simple image with single Linux kernel";

  #address-cells = <1>;

  images {

  kernel@1 {

  description = "Vanilla Linux kernel";

  data = /incbin/("./vmlinux.bin.gz"); # Image data 具體路徑

  type = "kernel";

  arch = "ppc";

  os = "linux";

  compression = "gzip";

  load = <00000000>;

  entry = <00000000>;

  hash@1 {

  algo = "crc32";

  };

  hash@2 {

  algo = "sha1";

  };

  };

  };

  configurations {

  default = "config@1";

  config@1 {

  description = "Boot Linux kernel";

  kernel = "kernel@1";

  };

  };

  };

  mkimage的輸出是一個后綴為.itb的二進制文件,包含了所有需要的數據(kernel,dtb,ramdisk)。itb文件制作好之后,就可以直接加載到嵌入式設備上,通過bootm命令啟動。

  總結下制作FIT Image的4個必要文件:

  mkimage,

  dtc

  its(image source file (*.its))

  image data file(s)。

  its語法結構

  uImage Tree 的根節點結構

  / o image-tree

  |- description = "image description"

  |- timestamp = <12399321>

  |- #address-cells = <1>

  |

  o images

  | |

  | o image@1 {...}

  | o image@2 {...}

  | ...

  |

  o configurations

  |- default = "conf@1"

  |

  o conf@1 {...}

  o conf@2 {...}

  ...

  description:描述uImage的文本。

  timestamp:修改Image鏡像的時間,由mkimage工具自動生成。在security boot中,timestamp不同也會被認為是不同的Image。

  images:子鏡像,如kernel Image,ramdisk Image。

  configurations:配置項節點,可以將不同類型的二進制文件,根據不同的場景,組合起來,形成一個個的配置項。u-boot在boot的時候,以配置項為單位加載、執行,這樣就可以根據不同的場景,方便的選擇不同的配置。

  '/images' node

  該節點中描述了Image鏡像必要的信息.

  o image@1

  |- description = "component sub-image description"

  |- data = /incbin/("path/to/data/file.bin")

  |- type = "sub-image type name"

  |- arch = "ARCH name"

  |- os = "OS name"

  |- compression = "compression name"

  |- load = <00000000>

  |- entry = <00000000>

  |

  o hash@1 {...}

  o hash@2 {...}

  ...

  description:子鏡像的文本描述,可以隨便寫。

  type:子鏡像的類型,比如standalone,kernel,ramdisk,firmware等等。

  data:包含該節點二進制文件的路徑。

  compression:壓縮方式,比如none,gzip,bzip2。

  os:操作系統的名稱,如solaris,uboot,qnx等。

  arch:平臺架構,如arm,mips,i386等。

  entry:二進制文件入口地址,即鏈接地址。

  load:二進制文件的加載位置。

  hash@1:鏡像使用的校驗算法,如sha256,crc32等。

  Hash nodes

  o hash@1

  |- algo = "hash or checksum algorithm name"

  |- value = [hash or checksum value]

  algo:算法名稱,如crc32,md5,sha256等。

  value:算法校驗值,即algo計算后的數值。

  '/configurations' node

  o configurations

  |- default = "default configuration sub-node unit name"

  |

  o config@1 {...}

  o config@2 {...}

  ...

  default:默認的子節點的配置

  config@1: 該配置具體使用那些kernel Image,ramdisk Image等。

  Configuration nodes

  o config@1

  |- description = "configuration description"

  |- kernel = "kernel sub-node unit name"

  |- ramdisk = "ramdisk sub-node unit name"

  |- fdt = "fdt sub-node unit-name" [, "fdt overlay sub-node unit-name", ...]

  |- fpga = "fpga sub-node unit-name"

  |- loadables = "loadables sub-node unit-name"

  description:該配置的名稱。

  kernel:鏡像類型為kernel的單元的名稱。

  ramdisk:鏡像類型為ramdisk的單元的名稱。

  fdt:鏡像類型為fdt的單元的名稱。

  loadables:額外的可加載的二進制文件的列表,U-Boot將在給定的起始地址加載每個二進制文件。

  舉例

  如下是一個有多種kernels, ramdisks and FDT blobs鏡像多套配置的its文件。它包含了3種配置,每種配置使用了不同的kernel、ramdisk和fdt,默認配置項由“default”指定,當然也可以在運行時指定。

  /*

  * U-Boot uImage source file with multiple kernels, ramdisks and FDT blobs

  */

  /dts-v1/;

  / {

  description = "Various kernels, ramdisks and FDT blobs";

  #address-cells = <1>;

  images {

  kernel@1 {

  description = "vanilla-2.6.23";

  data = /incbin/("./vmlinux.bin.gz");

  type = "kernel";

  arch = "ppc";

  os = "linux";

  compression = "gzip";

  load = <00000000>;

  entry = <00000000>;

  hash@1 {

  algo = "md5";

  };

  hash@2 {

  algo = "sha1";

  };

  };

  kernel@2 {

  description = "2.6.23-denx";

  data = /incbin/("./2.6.23-denx.bin.gz");

  type = "kernel";

  arch = "ppc";

  os = "linux";

  compression = "gzip";

  load = <00000000>;

  entry = <00000000>;

  hash@1 {

  algo = "sha1";

  };

  };

  kernel@3 {

  description = "2.4.25-denx";

  data = /incbin/("./2.4.25-denx.bin.gz");

  type = "kernel";

  arch = "ppc";

  os = "linux";

  compression = "gzip";

  load = <00000000>;

  entry = <00000000>;

  hash@1 {

  algo = "md5";

  };

  };

  ramdisk@1 {

  description = "eldk-4.2-ramdisk";

  data = /incbin/("./eldk-4.2-ramdisk");

  type = "ramdisk";

  arch = "ppc";

  os = "linux";

  compression = "gzip";

  load = <00000000>;

  entry = <00000000>;

  hash@1 {

  algo = "sha1";

  };

  };

  ramdisk@2 {

  description = "eldk-3.1-ramdisk";

  data = /incbin/("./eldk-3.1-ramdisk");

  type = "ramdisk";

  arch = "ppc";

  os = "linux";

  compression = "gzip";

  load = <00000000>;

  entry = <00000000>;

  hash@1 {

  algo = "crc32";

  };

  };

  fdt@1 {

  description = "tqm5200-fdt";

  data = /incbin/("./tqm5200.dtb");

  type = "flat_dt";

  arch = "ppc";

  compression = "none";

  hash@1 {

  algo = "crc32";

  };

  };

  fdt@2 {

  description = "tqm5200s-fdt";

  data = /incbin/("./tqm5200s.dtb");

  type = "flat_dt";

  arch = "ppc";

  compression = "none";

  load = <00700000>;

  hash@1 {

  algo = "sha1";

  };

  };

  };

  configurations {

  default = "config@1";

  config@1 {

  description = "tqm5200 vanilla-2.6.23 configuration";

  kernel = "kernel@1";

  ramdisk = "ramdisk@1";

  fdt = "fdt@1";

  };

  config@2 {

  description = "tqm5200s denx-2.6.23 configuration";

  kernel = "kernel@2";

  ramdisk = "ramdisk@1";

  fdt = "fdt@2";

  };

  config@3 {

  description = "tqm5200s denx-2.4.25 configuration";

  kernel = "kernel@3";

  ramdisk = "ramdisk@2";

  };

  };

  };

  FIT Image的編譯和啟動

  在服務器上,可以使用mkimage工具制作 FIT Image。

  如下是kernel_fdt.its,下面將使用該文件制作itb。

  /*

  * Simple U-Boot uImage source file containing a single kernel and FDT blob

  */

  /dts-v1/;

  / {

  description = "Simple image with single Linux kernel and FDT blob";

  #address-cells = <1>;

  images {

  kernel@1 {

  description = "Vanilla Linux kernel";

  data = /incbin/("./vmlinux.bin.gz");

  type = "kernel";

  arch = "ppc";

  os = "linux";

  compression = "gzip";

  load = <00000000>;

  entry = <00000000>;

  hash@1 {

  algo = "crc32";

  };

  hash@2 {

  algo = "sha1";

  };

  };

  fdt@1 {

  description = "Flattened Device Tree blob";

  data = /incbin/("./target.dtb");

  type = "flat_dt";

  arch = "ppc";

  compression = "none";

  hash@1 {

  algo = "crc32";

  };

  hash@2 {

  algo = "sha1";

  };

  };

  };

  configurations {

  default = "conf@1";

  conf@1 {

  description = "Boot Linux kernel with FDT blob";

  kernel = "kernel@1";

  fdt = "fdt@1";

  };

  };

  };

  $ mkimage -f kernel_fdt.its kernel_fdt.itb

  DTC: dts->dtb  on file "kernel_fdt.its"

  $

  $ mkimage -l kernel_fdt.itb

  FIT description: Simple image with single Linux kernel and FDT blob

  Created:  Tue Mar 11 16:29:22 2008

  Image 0 (kernel@1)

  Description: Vanilla Linux kernel

  Type:  Kernel Image

  Compression: gzip compressed

  Data Size: 1092037 Bytes = 1066.44 kB = 1.04 MB

  Architecture: PowerPC

  OS:  Linux

  Load Address: 0x00000000

  Entry Point: 0x00000000

  Hash algo: crc32

  Hash value: 2c0cc807

  Hash algo: sha1

  Hash value: 264b59935470e42c418744f83935d44cdf59a3bb

  Image 1 (fdt@1)

  Description: Flattened Device Tree blob

  Type:  Flat Device Tree

  Compression: uncompressed

  Data Size: 16384 Bytes = 16.00 kB = 0.02 MB

  Architecture: PowerPC

  Hash algo: crc32

  Hash value: 0d655d71

  Hash algo: sha1

  Hash value: 25ab4e15cd4b8a5144610394560d9c318ce52def

  Default Configuration: 'conf@1'

  Configuration 0 (conf@1)

  Description: Boot Linux kernel with FDT blob

  Kernel: kernel@1

  FDT:  fdt@1

  在當前目錄下就可以找到kernel_fdt.itb,itb文件就可以加載到設備上啟動。

  > tftp 900000 /path/to/tftp/location/kernel_fdt.itb

  Using FEC device

  TFTP from server 192.168.1.1; our IP address is 192.168.160.5

  Filename '/path/to/tftp/location/kernel_fdt.itb'.

  Load address: 0x900000

  Loading: #################################################################

  ###########

  done

  Bytes transferred = 1109776 (10ef10 hex)

  => iminfo

  ## Checking Image at 00900000 ...

  FIT image found

  FIT description: Simple image with single Linux kernel and FDT blob

  Created:     2008-03-11 15:29:22 UTC

  Image 0 (kernel@1)

  Description:  Vanilla Linux kernel

  Type:    Kernel Image

  Compression:  gzip compressed

  Data Start:   0x009000ec

  Data Size:    1092037 Bytes =  1 MB

  Architecture: PowerPC

  OS:    Linux

  Load Address: 0x00000000

  Entry Point:  0x00000000

  Hash algo:    crc32

  Hash value:   2c0cc807

  Hash algo:    sha1

  Hash value:   264b59935470e42c418744f83935d44cdf59a3bb

  Image 1 (fdt@1)

  Description:  Flattened Device Tree blob

  Type:    Flat Device Tree

  Compression:  uncompressed

  Data Start:   0x00a0abdc

  Data Size:    16384 Bytes = 16 kB

  Architecture: PowerPC

  Hash algo:    crc32

  Hash value:   0d655d71

  Hash algo:    sha1

  Hash value:   25ab4e15cd4b8a5144610394560d9c318ce52def

  Default Configuration: 'conf@1'

  Configuration 0 (conf@1)

  Description:  Boot Linux kernel with FDT blob

  Kernel:    kernel@1

  FDT:    fdt@1

  => bootm

  ## Booting kernel from FIT Image at 00900000 ...

  Using 'conf@1' configuration

  Trying 'kernel@1' kernel subimage

  Description:  Vanilla Linux kernel

  Type:    Kernel Image

  Compression:  gzip compressed

  Data Start:   0x009000ec

  Data Size:    1092037 Bytes =  1 MB

  Architecture: PowerPC

  OS:    Linux

  Load Address: 0x00000000

  Entry Point:  0x00000000

  Hash algo:    crc32

  Hash value:   2c0cc807

  Hash algo:    sha1

  Hash value:   264b59935470e42c418744f83935d44cdf59a3bb

  Verifying Hash Integrity ... crc32+ sha1+ OK

  Uncompressing Kernel Image ... OK

  ## Flattened Device Tree from FIT Image at 00900000

  Using 'conf@1' configuration

  Trying 'fdt@1' FDT blob subimage

  Description:  Flattened Device Tree blob

  Type:    Flat Device Tree

  Compression:  uncompressed

  Data Start:   0x00a0abdc

  Data Size:    16384 Bytes = 16 kB

  Architecture: PowerPC

  Hash algo:    crc32

  Hash value:   0d655d71

  Hash algo:    sha1

  Hash value:   25ab4e15cd4b8a5144610394560d9c318ce52def

  Verifying Hash Integrity ... crc32+ sha1+ OK

  Booting using the fdt blob at 0xa0abdc

  Loading Device Tree to 007fc000, end 007fffff ... OK

  [    0.000000] Using lite5200 machine description

  [    0.000000] Linux version 2.6.24-rc6-gaebecdfc (m8@hekate) (gcc version 4.0.0 (DENX ELDK 4.1 4.0.0)) #1 Sat Jan 12 15:38:48 CET 2008

  bootm啟動不同的配置

  對于FIT Image,bootm有多種啟動方式。

  1. bootm <addr1>

  2. bootm [<addr1>]:<subimg1>

  3. bootm [<addr1>]#<conf>[#<extra-conf[#...]]

  4. bootm [<addr1>]:<subimg1> [<addr2>]:<subimg2>

  5. bootm [<addr1>]:<subimg1> [<addr2>]:<subimg2> [<addr3>]:<subimg3>

  6. bootm [<addr1>]:<subimg1> [<addr2>]:<subimg2> <addr3>

  7. bootm [<addr1>]:<subimg1> -     [<addr3>]:<subimg3>

  8. bootm [<addr1>]:<subimg1> -     <addr3>

  對于有多種鏡像,多套配置的itb,都是以configurations 中default 指定的配置啟動。

  bootm 200000

  也可以手動指定使用那套配置

  bootm 200000#cfg@1

  也可以手動搭配不同的鏡像節點啟動

  bootm 200000:kernel@1 800000:ramdisk@2

  bootm 200000:kernel@1 800000:ramdisk@1 800000:fdt@1

  bootm 200000:kernel@2 200000:ramdisk@2 600000

  bootm 200000:kernel@2 - 200000:fdt@1

  如果bootm的時候不指定地址,則會使用CONFIG_SYS_LOAD_ADDR配置的地址。

  總結

  本文對FIT Image作了簡單的介紹,更詳細的內容可以參考官方文檔。后面有時間會動手制作一個FIT Image在板子上跑下。

  FIT Image可以兼容于多種板子,而無需重新進行編譯燒寫。對于有多個kernel節點或者fdt節點等等,兼容性更強。同時,可以有多種configurations,來對kernel、fdt、ramdisk來進行組合。


 更多信息可以來這里獲取==>>電子技術應用-AET<<

微信圖片_20210517164139.jpg

微信圖片_20220708145705.jpg

電子技術應用專欄作家  嵌入式與Linux那些事

原文鏈接:https://mp.weixin.qq.com/s/MtfGhhP_6PSa_mTeLn_XFQ

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美理论电影在线播放| 久久亚洲春色中文字幕久久久| 国产精品久久久久久久久久ktv| 国产精品永久免费在线| 亚洲国产欧洲综合997久久| 欧美本精品男人aⅴ天堂| 国产精品一区二区在线| 欧美日韩国产经典色站一区二区三区| 日韩网站在线| 亚洲午夜三级在线| 国产日韩精品一区二区三区在线| 欧美日韩国产成人| 亚洲精品国产精品国产自| 国产精品99一区| 亚洲福利小视频| 欧美日韩国产影片| 国产伪娘ts一区| 亚洲新中文字幕| 国产精品日韩一区二区三区| 国产精品毛片在线看| 国产欧美日韩精品a在线观看| 国内久久视频| 欧美成人精精品一区二区频| 欧美一区二区精品在线| 一区二区三区日韩| 亚洲人成网在线播放| 久久深夜福利免费观看| 欧美日韩免费一区| 欧美特黄一级大片| 伊人久久久大香线蕉综合直播| 一区二区三区欧美在线观看| 欧美激情一区二区三区蜜桃视频| 久久久不卡网国产精品一区| 久久亚洲一区二区三区四区| 欧美三级日本三级少妇99| 亚洲一区二区精品视频| 男女精品网站| 国产精品成人久久久久| 国产午夜精品美女毛片视频| 久久综合久久久久88| 免费成人av资源网| 欧美诱惑福利视频| 久久综合给合久久狠狠色| 欧美精品在线极品| 欧美激情国产日韩精品一区18| 欧美成年网站| 麻豆精品视频在线| 国产日韩精品一区二区三区在线| 国产日本欧美视频| 91久久久一线二线三线品牌| 欧美va天堂| 国际精品欧美精品| 免费日韩精品中文字幕视频在线| 欧美日韩精品系列| 午夜精品久久久久久久男人的天堂| 欧美视频在线观看 亚洲欧| 久久大逼视频| 久久久www免费人成黑人精品| 久久精品视频在线看| 亚洲欧美影音先锋| 午夜精品在线视频| 亚洲国产成人91精品| 欧美成人自拍视频| 国产精品免费一区二区三区观看| 国产欧美在线观看| 欧美精品日韩一区| 免费h精品视频在线播放| 国产视频精品免费播放| 亚洲欧美日韩视频二区| 欧美精品免费视频| 亚洲激精日韩激精欧美精品| 日韩视频一区二区三区在线播放免费观看| 亚洲一区二区少妇| 亚洲丰满在线| 在线视频国产日韩| 欧美福利视频在线观看| 久久人人97超碰人人澡爱香蕉| 亚洲午夜性刺激影院| 亚洲免费观看在线视频| 久久人体大胆视频| 激情av一区| 欧美揉bbbbb揉bbbbb| 亚洲欧洲一区二区在线观看| 国内伊人久久久久久网站视频| 午夜在线精品| 国内精品模特av私拍在线观看| 欧美三级电影大全| 欧美高清在线观看| 91久久久一线二线三线品牌| 久久九九电影| 欧美一区三区三区高中清蜜桃| 欧美成人自拍视频| 亚洲高清在线视频| 国产一区美女| 欧美中文字幕在线视频| 欧美色欧美亚洲高清在线视频| 欧美大香线蕉线伊人久久国产精品| 久久精品系列| 久久精品国产一区二区电影| 欧美激情一级片一区二区| 国产自产在线视频一区| 国产精品国产三级国产专播精品人| 你懂的视频欧美| 久久亚洲精品一区二区| 一本一本久久a久久精品综合妖精| 久久夜精品va视频免费观看| 一区二区高清| 国产九九精品视频| 国产日韩欧美制服另类| 久久综合九色综合久99| 精品动漫3d一区二区三区免费版| 欧美喷水视频| 最近中文字幕日韩精品| 在线观看欧美日本| 欧美亚洲综合在线| 香蕉成人啪国产精品视频综合网| 国产精品一区一区三区| 欧美日韩国产区一| 狠狠色综合网站久久久久久久| 国产精品久久久久久久久久久久久久| 亚洲激情亚洲| 久久久激情视频| 这里只有精品视频在线| 久久久水蜜桃av免费网站| 国产精品久久久久久久久久免费| 免费欧美在线| 国产美女搞久久| 欧美精品1区| 欧美日韩一区二区视频在线| 亚洲精品一区二区三区在线观看| 久久国产欧美精品| 欧美阿v一级看视频| 久久精品av麻豆的观看方式| 久久久久看片| 亚洲欧美成人综合| 99视频超级精品| 欧美主播一区二区三区| 国产欧美日本一区视频| 亚洲精品黄网在线观看| 久久久999精品视频| 欧美风情在线| 欧美精品v日韩精品v国产精品| 国产一区在线视频| 欧美另类69精品久久久久9999| 国产综合18久久久久久| 在线日韩一区二区| 91久久精品日日躁夜夜躁欧美| 欧美黄色成人网| 欧美日韩精品在线观看| 国产精品欧美日韩一区| 日韩一级黄色大片| 国产一区日韩欧美| 亚洲在线成人精品| 韩国av一区二区三区在线观看| 久久精品日韩一区二区三区| 一道本一区二区| 中文日韩在线| 欧美一区二区在线免费观看| 欧美一区二区大片| 欧美激情第三页| 午夜老司机精品| 日韩午夜在线观看视频| 亚洲电影在线看| 欧美国产精品| 狠狠做深爱婷婷久久综合一区| 欧美极品在线观看| 欧美激情精品久久久久久蜜臀| 你懂的一区二区| 美女免费视频一区| 国产精品成人一区二区| 久久久之久亚州精品露出| 亚洲免费在线精品一区| 欧美呦呦网站| 国产视频在线观看一区| 免费亚洲电影在线观看| 国产主播一区| 欧美激情一区二区| 亚洲欧美精品中文字幕在线| 国产精品欧美经典| 韩国久久久久| 亚洲深夜福利在线| 国产一区二区精品久久| 在线精品一区二区| 亚洲午夜视频在线| 久久精品99无色码中文字幕| 亚洲小视频在线| 欧美精品在线网站| 亚洲精品久久久久| 国产精品国产三级国产aⅴ浪潮| 欧美激情国产精品| 亚洲福利久久| 国产一区二区三区网站| 欧美麻豆久久久久久中文| 欧美成人午夜| 久久综合一区二区| 欧美极品在线播放| 亚洲精品一区二区三区不| 亚洲欧美综合国产精品一区| 欧美日韩视频免费播放| 久久婷婷国产麻豆91天堂| 欧美午夜a级限制福利片| 国产亚洲欧洲997久久综合| 欧美一区二区啪啪| 亚洲美女视频在线免费观看| 久久aⅴ国产欧美74aaa| 亚洲一区二区黄| 欧美日韩精品免费观看| 久久久91精品国产一区二区精品| 最新成人在线| 欧美在线观看一区二区| 欧美不卡一卡二卡免费版| 欧美激情视频一区二区三区免费| 亚洲精品色婷婷福利天堂| 亚洲激情六月丁香| 欧美激情一区二区三区在线视频观看| 久久综合色播五月| 欧美午夜片欧美片在线观看| 一区二区三区欧美激情| 欧美日产国产成人免费图片| 久久夜色精品国产欧美乱| 久久精品视频免费观看| 日韩午夜一区| 欧美一区二区三区在线观看| 国产亚洲制服色| 国产精品综合不卡av| 蜜桃久久av一区| 欧美日韩亚洲一区二区三区| 国产欧美精品在线播放| 欧美不卡视频一区发布| 亚洲香蕉伊综合在人在线视看| 国产精品素人视频| 国内成人精品视频| 亚洲一区亚洲| 欧美日本久久| 国产精品电影观看| 久久se精品一区精品二区| 欧美日韩大陆在线| 国产精品爱久久久久久久| 国产精品高清网站| 国产精品视频yy9299一区| 国产女人aaa级久久久级| 久久裸体视频| 欧美激情日韩| 久久精品噜噜噜成人av农村| 国产精品亚洲а∨天堂免在线| 国产精品美女主播在线观看纯欲| 午夜在线观看免费一区| 国产精品青草综合久久久久99| 麻豆成人91精品二区三区| 欧美一站二站| 在线观看一区视频| 欧美成人精品福利| 中国成人亚色综合网站| 鲁大师成人一区二区三区| 欧美在线三级| 久久久久免费观看| 欧美精品免费播放| 欧美香蕉视频| 亚洲激情在线观看| 亚洲美女免费精品视频在线观看| 另类天堂视频在线观看| 亚洲欧美国产日韩中文字幕| 亚洲免费av电影| 久久久爽爽爽美女图片| 亚洲国产视频一区二区| 国产亚洲日本欧美韩国| 国产亚洲欧美在线| 亚洲国产片色| 亚洲伦理网站| 亚洲欧美电影院| 欧美日韩视频| 小黄鸭精品密入口导航| 欧美精品性视频| 蜜臀99久久精品久久久久久软件| 国产精品乱子久久久久| 久久国产视频网| 一区二区三区四区五区精品视频| 国产乱码精品一区二区三区五月婷| 正在播放日韩| 久久婷婷国产麻豆91天堂| 欧美一区二区三区婷婷月色| 久久福利毛片| 一区二区激情视频| 国产人久久人人人人爽| 亚洲精品激情| 欧美一区国产一区| 一区二区欧美日韩视频| 欧美日本一区二区视频在线观看| 好吊日精品视频| 红杏aⅴ成人免费视频| 在线看片第一页欧美| 韩国欧美国产1区| 国产欧美1区2区3区| 香蕉成人啪国产精品视频综合网| 伊人成人在线| 欧美福利在线| 红桃视频国产精品| 国产专区综合网| 亚洲欧美国产精品桃花| 欧美日韩国产片| 久久综合影音| 久久精品99国产精品日本| 亚洲激情在线观看| 一色屋精品视频在线观看网站| 日韩一级在线观看| 亚洲影院一区| 在线观看日韩av先锋影音电影院| 欧美日韩中文字幕| 欧美激情精品久久久久久变态| 99re6这里只有精品| 国产精品第一页第二页第三页| 亚洲成色777777女色窝| 亚洲靠逼com| 91久久久一线二线三线品牌| 国产精品成人观看视频免费| 136国产福利精品导航网址应用| 亚洲激情偷拍| 亚洲网站在线播放| 欧美一区二区精美| 国产欧美一区二区精品性色| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲欧美日韩精品久久| 亚洲一区二区av电影| 欧美99在线视频观看| 欧美涩涩视频| 夜夜嗨av一区二区三区免费区| 亚洲国产精品va在线看黑人| 国产精品久久激情|