日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux and the Device Tree

發布時間:2025/4/16 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux and the Device Tree 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來之\kernel\Documentation\devicetree\usage-model.txt


Linux and the Device Tree

-------------------------
The Linux usage model for device tree data


Author: Grant Likely <grant.likely@secretlab.ca>


This article describes how Linux uses the device tree. ?An overview of
the device tree data format can be found on the device tree usage page
at devicetree.org[1].


[1] http://devicetree.org/Device_Tree_Usage


The "Open Firmware Device Tree", or simply Device Tree (DT), is a data
structure and language for describing hardware. ?More specifically, it
is a description of hardware that is readable by an operating system
so that the operating system doesn't need to hard code details of the
machine.


Structurally, the DT is a tree, or acyclic graph with named nodes, and
nodes may have an arbitrary number of named properties encapsulating
arbitrary data. ?A mechanism also exists to create arbitrary
links from one node to another outside of the natural tree structure.


Conceptually, a common set of usage conventions, called 'bindings',
is defined for how data should appear in the tree to describe typical
hardware characteristics including data busses, interrupt lines, GPIO
connections, and peripheral devices.


As much as possible, hardware is described using existing bindings to
maximize use of existing support code, but since property and node
names are simply text strings, it is easy to extend existing bindings
or create new ones by defining new nodes and properties. ?Be wary,
however, of creating a new binding without first doing some homework
about what already exists. ?There are currently two different,
incompatible, bindings for i2c busses that came about because the new
binding was created without first investigating how i2c devices were
already being enumerated in existing systems.


1. History
----------
The DT was originally created by Open Firmware as part of the
communication method for passing data from Open Firmware to a client
program (like to an operating system). ?An operating system used the
Device Tree to discover the topology of the hardware at runtime, and
thereby support a majority of available hardware without hard coded
information (assuming drivers were available for all devices).


Since Open Firmware is commonly used on PowerPC and SPARC platforms,
the Linux support for those architectures has for a long time used the
Device Tree.


In 2005, when PowerPC Linux began a major cleanup and to merge 32-bit
and 64-bit support, the decision was made to require DT support on all
powerpc platforms, regardless of whether or not they used Open
Firmware. ?To do this, a DT representation called the Flattened Device
Tree (FDT) was created which could be passed to the kernel as a binary
blob without requiring a real Open Firmware implementation. ?U-Boot,
kexec, and other bootloaders were modified to support both passing a
Device Tree Binary (dtb) and to modify a dtb at boot time. ?DT was
also added to the PowerPC boot wrapper (arch/powerpc/boot/*) so that
a dtb could be wrapped up with the kernel image to support booting
existing non-DT aware firmware.


Some time later, FDT infrastructure was generalized to be usable by
all architectures. ?At the time of this writing, 6 mainlined
architectures (arm, microblaze, mips, powerpc, sparc, and x86) and 1
out of mainline (nios) have some level of DT support.


2. Data Model
-------------
If you haven't already read the Device Tree Usage[1] page,
then go read it now. ?It's okay, I'll wait....


2.1 High Level View
-------------------
The most important thing to understand is that the DT is simply a data
structure that describes the hardware. ?There is nothing magical about
it, and it doesn't magically make all hardware configuration problems
go away. ?What it does do is provide a language for decoupling the
hardware configuration from the board and device driver support in the
Linux kernel (or any other operating system for that matter). ?Using
it allows board and device support to become data driven; to make
setup decisions based on data passed into the kernel instead of on
per-machine hard coded selections.


Ideally, data driven platform setup should result in less code
duplication and make it easier to support a wide range of hardware
with a single kernel image.


Linux uses DT data for three major purposes:
1) platform identification,
2) runtime configuration, and
3) device population.


2.2 Platform Identification
---------------------------
First and foremost, the kernel will use data in the DT to identify the
specific machine. ?In a perfect world, the specific platform shouldn't
matter to the kernel because all platform details would be described
perfectly by the device tree in a consistent and reliable manner.
Hardware is not perfect though, and so the kernel must identify the
machine during early boot so that it has the opportunity to run
machine-specific fixups.


In the majority of cases, the machine identity is irrelevant, and the
kernel will instead select setup code based on the machine's core
CPU or SoC. ?On ARM for example, setup_arch() in
arch/arm/kernel/setup.c will call setup_machine_fdt() in
arch/arm/kernel/devicetree.c which searches through the machine_desc
table and selects the machine_desc which best matches the device tree
data. ?It determines the best match by looking at the 'compatible'
property in the root device tree node, and comparing it with the
dt_compat list in struct machine_desc.


The 'compatible' property contains a sorted list of strings starting
with the exact name of the machine, followed by an optional list of
boards it is compatible with sorted from most compatible to least. ?For
example, the root compatible properties for the TI BeagleBoard and its
successor, the BeagleBoard xM board might look like:


compatible = "ti,omap3-beagleboard", "ti,omap3450", "ti,omap3";
compatible = "ti,omap3-beagleboard-xm", "ti,omap3450", "ti,omap3";


Where "ti,omap3-beagleboard-xm" specifies the exact model, it also
claims that it compatible with the OMAP 3450 SoC, and the omap3 family
of SoCs in general. ?You'll notice that the list is sorted from most
specific (exact board) to least specific (SoC family).


Astute readers might point out that the Beagle xM could also claim
compatibility with the original Beagle board. ?However, one should be
cautioned about doing so at the board level since there is typically a
high level of change from one board to another, even within the same
product line, and it is hard to nail down exactly what is meant when one
board claims to be compatible with another. ?For the top level, it is
better to err on the side of caution and not claim one board is
compatible with another. ?The notable exception would be when one
board is a carrier for another, such as a CPU module attached to a
carrier board.


One more note on compatible values. ?Any string used in a compatible
property must be documented as to what it indicates. ?Add
documentation for compatible strings in Documentation/devicetree/bindings.


Again on ARM, for each machine_desc, the kernel looks to see if
any of the dt_compat list entries appear in the compatible property.
If one does, then that machine_desc is a candidate for driving the
machine. ?After searching the entire table of machine_descs,
setup_machine_fdt() returns the 'most compatible' machine_desc based
on which entry in the compatible property each machine_desc matches
against. ?If no matching machine_desc is found, then it returns NULL.


The reasoning behind this scheme is the observation that in the majority
of cases, a single machine_desc can support a large number of boards
if they all use the same SoC, or same family of SoCs. ?However,
invariably there will be some exceptions where a specific board will
require special setup code that is not useful in the generic case.
Special cases could be handled by explicitly checking for the
troublesome board(s) in generic setup code, but doing so very quickly
becomes ugly and/or unmaintainable if it is more than just a couple of
cases.


Instead, the compatible list allows a generic machine_desc to provide
support for a wide common set of boards by specifying "less
compatible" value in the dt_compat list. ?In the example above,
generic board support can claim compatibility with "ti,omap3" or
"ti,omap3450". ?If a bug was discovered on the original beagleboard
that required special workaround code during early boot, then a new
machine_desc could be added which implements the workarounds and only
matches on "ti,omap3-beagleboard".


PowerPC uses a slightly different scheme where it calls the .probe()
hook from each machine_desc, and the first one returning TRUE is used.
However, this approach does not take into account the priority of the
compatible list, and probably should be avoided for new architecture
support.


2.3 Runtime configuration
-------------------------
In most cases, a DT will be the sole method of communicating data from
firmware to the kernel, so also gets used to pass in runtime and
configuration data like the kernel parameters string and the location
of an initrd image.


Most of this data is contained in the /chosen node, and when booting
Linux it will look something like this:


chosen {
bootargs = "console=ttyS0,115200 loglevel=8";
initrd-start = <0xc8000000>;
initrd-end = <0xc8200000>;
};


The bootargs property contains the kernel arguments, and the initrd-*
properties define the address and size of an initrd blob. ?Note that
initrd-end is the first address after the initrd image, so this doesn't
match the usual semantic of struct resource. ?The chosen node may also
optionally contain an arbitrary number of additional properties for
platform-specific configuration data.


During early boot, the architecture setup code calls of_scan_flat_dt()
several times with different helper callbacks to parse device tree
data before paging is setup. ?The of_scan_flat_dt() code scans through
the device tree and uses the helpers to extract information required
during early boot. ?Typically the early_init_dt_scan_chosen() helper
is used to parse the chosen node including kernel parameters,
early_init_dt_scan_root() to initialize the DT address space model,
and early_init_dt_scan_memory() to determine the size and
location of usable RAM.


On ARM, the function setup_machine_fdt() is responsible for early
scanning of the device tree after selecting the correct machine_desc
that supports the board.


2.4 Device population
---------------------
After the board has been identified, and after the early configuration data
has been parsed, then kernel initialization can proceed in the normal
way. ?At some point in this process, unflatten_device_tree() is called
to convert the data into a more efficient runtime representation.
This is also when machine-specific setup hooks will get called, like
the machine_desc .init_early(), .init_irq() and .init_machine() hooks
on ARM. ?The remainder of this section uses examples from the ARM
implementation, but all architectures will do pretty much the same
thing when using a DT.


As can be guessed by the names, .init_early() is used for any machine-
specific setup that needs to be executed early in the boot process,
and .init_irq() is used to set up interrupt handling. ?Using a DT
doesn't materially change the behaviour of either of these functions.
If a DT is provided, then both .init_early() and .init_irq() are able
to call any of the DT query functions (of_* in include/linux/of*.h) to
get additional data about the platform.


The most interesting hook in the DT context is .init_machine() which
is primarily responsible for populating the Linux device model with
data about the platform. ?Historically this has been implemented on
embedded platforms by defining a set of static clock structures,
platform_devices, and other data in the board support .c file, and
registering it en-masse in .init_machine(). ?When DT is used, then
instead of hard coding static devices for each platform, the list of
devices can be obtained by parsing the DT, and allocating device
structures dynamically.


The simplest case is when .init_machine() is only responsible for
registering a block of platform_devices. ?A platform_device is a concept
used by Linux for memory or I/O mapped devices which cannot be detected
by hardware, and for 'composite' or 'virtual' devices (more on those
later). ?While there is no 'platform device' terminology for the DT,
platform devices roughly correspond to device nodes at the root of the
tree and children of simple memory mapped bus nodes.


About now is a good time to lay out an example. ?Here is part of the
device tree for the NVIDIA Tegra board.


/{
compatible = "nvidia,harmony", "nvidia,tegra20";
#address-cells = <1>;
#size-cells = <1>;
interrupt-parent = <&intc>;


chosen { };
aliases { };


memory {
device_type = "memory";
reg = <0x00000000 0x40000000>;
};


soc {
compatible = "nvidia,tegra20-soc", "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
ranges;


intc: interrupt-controller@50041000 {
compatible = "nvidia,tegra20-gic";
interrupt-controller;
#interrupt-cells = <1>;
reg = <0x50041000 0x1000>, < 0x50040100 0x0100 >;
};


serial@70006300 {
compatible = "nvidia,tegra20-uart";
reg = <0x70006300 0x100>;
interrupts = <122>;
};


i2s1: i2s@70002800 {
compatible = "nvidia,tegra20-i2s";
reg = <0x70002800 0x100>;
interrupts = <77>;
codec = <&wm8903>;
};


i2c@7000c000 {
compatible = "nvidia,tegra20-i2c";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x7000c000 0x100>;
interrupts = <70>;


wm8903: codec@1a {
compatible = "wlf,wm8903";
reg = <0x1a>;
interrupts = <347>;
};
};
};


sound {
compatible = "nvidia,harmony-sound";
i2s-controller = <&i2s1>;
i2s-codec = <&wm8903>;
};
};


At .init_machine() time, Tegra board support code will need to look at
this DT and decide which nodes to create platform_devices for.
However, looking at the tree, it is not immediately obvious what kind
of device each node represents, or even if a node represents a device
at all. ?The /chosen, /aliases, and /memory nodes are informational
nodes that don't describe devices (although arguably memory could be
considered a device). ?The children of the /soc node are memory mapped
devices, but the codec@1a is an i2c device, and the sound node
represents not a device, but rather how other devices are connected
together to create the audio subsystem. ?I know what each device is
because I'm familiar with the board design, but how does the kernel
know what to do with each node?


The trick is that the kernel starts at the root of the tree and looks
for nodes that have a 'compatible' property. ?First, it is generally
assumed that any node with a 'compatible' property represents a device
of some kind, and second, it can be assumed that any node at the root
of the tree is either directly attached to the processor bus, or is a
miscellaneous system device that cannot be described any other way.
For each of these nodes, Linux allocates and registers a
platform_device, which in turn may get bound to a platform_driver.


Why is using a platform_device for these nodes a safe assumption?
Well, for the way that Linux models devices, just about all bus_types
assume that its devices are children of a bus controller. ?For
example, each i2c_client is a child of an i2c_master. ?Each spi_device
is a child of an SPI bus. ?Similarly for USB, PCI, MDIO, etc. ?The
same hierarchy is also found in the DT, where I2C device nodes only
ever appear as children of an I2C bus node. ?Ditto for SPI, MDIO, USB,
etc. ?The only devices which do not require a specific type of parent
device are platform_devices (and amba_devices, but more on that
later), which will happily live at the base of the Linux /sys/devices
tree. ?Therefore, if a DT node is at the root of the tree, then it
really probably is best registered as a platform_device.


Linux board support code calls of_platform_populate(NULL, NULL, NULL, NULL)
to kick off discovery of devices at the root of the tree. ?The
parameters are all NULL because when starting from the root of the
tree, there is no need to provide a starting node (the first NULL), a
parent struct device (the last NULL), and we're not using a match
table (yet). ?For a board that only needs to register devices,
.init_machine() can be completely empty except for the
of_platform_populate() call.


In the Tegra example, this accounts for the /soc and /sound nodes, but
what about the children of the SoC node? ?Shouldn't they be registered
as platform devices too? ?For Linux DT support, the generic behaviour
is for child devices to be registered by the parent's device driver at
driver .probe() time. ?So, an i2c bus device driver will register a
i2c_client for each child node, an SPI bus driver will register
its spi_device children, and similarly for other bus_types.
According to that model, a driver could be written that binds to the
SoC node and simply registers platform_devices for each of its
children. ?The board support code would allocate and register an SoC
device, a (theoretical) SoC device driver could bind to the SoC device,
and register platform_devices for /soc/interrupt-controller, /soc/serial,
/soc/i2s, and /soc/i2c in its .probe() hook. ?Easy, right?


Actually, it turns out that registering children of some
platform_devices as more platform_devices is a common pattern, and the
device tree support code reflects that and makes the above example
simpler. ?The second argument to of_platform_populate() is an
of_device_id table, and any node that matches an entry in that table
will also get its child nodes registered. ?In the tegra case, the code
can look something like this:


static void __init harmony_init_machine(void)
{
/* ... */
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
}


"simple-bus" is defined in the ePAPR 1.0 specification as a property
meaning a simple memory mapped bus, so the of_platform_populate() code
could be written to just assume simple-bus compatible nodes will
always be traversed. ?However, we pass it in as an argument so that
board support code can always override the default behaviour.


[Need to add discussion of adding i2c/spi/etc child devices]


Appendix A: AMBA devices
------------------------


ARM Primecells are a certain kind of device attached to the ARM AMBA
bus which include some support for hardware detection and power
management. ?In Linux, struct amba_device and the amba_bus_type is
used to represent Primecell devices. ?However, the fiddly bit is that
not all devices on an AMBA bus are Primecells, and for Linux it is
typical for both amba_device and platform_device instances to be
siblings of the same bus segment.


When using the DT, this creates problems for of_platform_populate()
because it must decide whether to register each node as either a
platform_device or an amba_device. ?This unfortunately complicates the
device creation model a little bit, but the solution turns out not to
be too invasive. ?If a node is compatible with "arm,amba-primecell", then
of_platform_populate() will register it as an amba_device instead of a
platform_device.

總結

以上是生活随笔為你收集整理的Linux and the Device Tree的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久久综合九色合综国产精品 | 日韩精品影视 | 国产精品久久久久久久久久了 | 久久久久久免费毛片精品 | av网站手机在线观看 | 久久怡红院| 亚洲欧美日韩精品久久久 | 国产一级精品绿帽视频 | 五月婷婷中文 | 国际精品久久久久 | 亚洲精品午夜视频 | 免费午夜网站 | 99精品视频免费在线观看 | 超碰97在线资源站 | 最新不卡av | 久久毛片网 | 久久er99热精品一区二区三区 | 超碰在线国产 | 久久免费国产 | 中文字幕一区二区三区视频 | 在线观看国产成人av片 | 综合成人在线 | 丁香六月网 | 国内丰满少妇猛烈精品播放 | 久久精品国产亚洲精品 | 在线亚洲小视频 | 国产福利中文字幕 | 成年人av在线播放 | 亚洲黄电影 | 亚洲精品视频在线看 | 成人免费视频a | 丁香综合av | 天天射综合网站 | 婷婷5月色 | 制服丝袜在线 | 欧美日韩亚洲国产一区 | 91在线你懂的 | 国产精品久久99综合免费观看尤物 | 久久理论电影网 | 国产又粗又猛又爽又黄的视频免费 | 国产精品视频全国免费观看 | 波多野结衣在线观看一区 | 最新极品jizzhd欧美 | 在线日韩中文 | 国产精品久久久久久爽爽爽 | 日韩在线免费不卡 | 西西444www| 96久久精品 | av在线永久免费观看 | 日韩专区中文字幕 | 精品久久一级片 | 91久草视频 | 香蕉视频久久久 | 久久桃花网 | 中文字幕一区二区三区乱码在线 | 69视频网站 | 久草在线视频精品 | 伊人开心激情 | 尤物九九久久国产精品的分类 | 在线亚洲成人 | 激情五月综合 | 日批视频在线播放 | 91激情小视频 | 在线观看电影av | 91精品国产成人观看 | 在线视频日韩精品 | 国产精品美女久久久久久久久 | 色就色,综合激情 | 在线看一区二区 | 伊人宗合网 | 99久久日韩精品免费热麻豆美女 | 这里只有精品视频在线观看 | av在线进入 | 久久久99精品免费观看 | 久久九九影视网 | 国产精品第三页 | 国产精品女人久久久 | 精品久久久成人 | 日韩高清成人 | 国产精品久久毛片 | 天天干天天干天天干 | 国产美腿白丝袜足在线av | 精壮的侍卫呻吟h | 麻豆视频免费看 | 欧美成人黄色片 | 日本黄色a级大片 | 狠狠操狠狠干天天操 | www操操 | 久久综合狠狠综合久久狠狠色综合 | 久久蜜臀av | 午夜精品久久 | 91麻豆国产福利在线观看 | 亚洲一级黄色片 | 99热99热 | 日韩精品中文字幕在线 | 成人在线超碰 | 最新日韩电影 | 国产香蕉av | 日韩免费电影在线观看 | 亚洲天堂精品视频在线观看 | 97在线免费观看 | 丁香花在线观看免费完整版视频 | 黄色午夜 | 一级精品视频在线观看宜春院 | 国产999精品视频 | 久久综合色播五月 | 久久久久久久久久久免费av | 狠狠88综合久久久久综合网 | 在线观看免费版高清版 | 最新91在线视频 | 日韩免费看| 国产美女视频网站 | 9幺看片| 特级a毛片 | 免费无遮挡动漫网站 | 精品产品国产在线不卡 | 久久不卡日韩美女 | 欧美天天干 | 国产精品99久久久 | 麻豆av一区二区三区在线观看 | 国内精品小视频 | 亚洲国产wwwccc36天堂 | 久久天堂亚洲 | 久久美女免费视频 | 成人午夜在线观看 | 激情深爱 | 久久视频国产 | 天天综合狠狠精品 | 91片网 | 欧美中文字幕久久 | 日韩av不卡在线观看 | 日韩视频免费在线观看 | 国产精品99精品 | 韩日精品在线观看 | 国产精品国产三级国产专区53 | 少妇自拍av| 久久黄色网页 | 日韩精品一区二区三区在线播放 | 国产精品激情偷乱一区二区∴ | 免费精品在线观看 | 99这里只有久久精品视频 | 91麻豆国产福利在线观看 | 成人黄色在线电影 | 日韩av电影中文字幕在线观看 | 欧美一级黄色网 | 有没有在线观看av | 狠狠操.com | 天天干天天想 | 国产视频在线观看一区二区 | 国产最新网站 | 欧美射射射| 色婷婷精品大在线视频 | 一区二区精品在线视频 | 免费观看国产精品 | 91经典在线 | 国产精品久久久久一区二区 | 一级一片免费观看 | 国产一区二区三区四区大秀 | 色爱成人网 | 国产二区精品 | 国产在线探花 | 久久精品xxx | 又色又爽又黄高潮的免费视频 | 欧美视频在线观看免费网址 | 97免费公开视频 | 黄网站www | 久久婷婷色综合 | 成人教育av | 久久精品视频18 | 欧美日韩久久不卡 | 国产精品欧美激情在线观看 | 国产精品理论片在线播放 | 国产视频观看 | 丁香六月婷婷综合 | 草久在线 | 99免在线观看免费视频高清 | 久久伦理视频 | h文在线观看免费 | 国产黄色在线看 | 久久不卡电影 | 成人黄色小视频 | 99久久久国产精品免费99 | www久久九| 免费在线播放视频 | 日韩精品久久久 | 亚洲一级二级三级 | 国产中文字幕在线观看 | 亚洲欧美日韩在线一区二区 | 午夜国产福利在线观看 | www色 | 天天色.com| 国产亚洲婷婷 | 精品国产乱码久久久久久三级人 | 国产成人资源 | 久久免费黄色大片 | 久久国产精品一区二区三区四区 | 免费色视频网址 | 综合久久精品 | 久久精品之 | 久久精品免费播放 | 日韩av电影国产 | 日韩久久久久久久久久 | 久久国产精品二国产精品中国洋人 | 久久婷婷激情 | a资源在线| 国产区在线 | 五月开心婷婷 | 狠狠色狠狠色综合日日92 | 91精品啪在线观看国产 | 五月黄色| 日本成人黄色片 | 伊人久久在线观看 | 久久久久久久免费 | 在线观看日本韩国电影 | 中国一级片在线观看 | 日韩久久精品一区二区 | 天天久久综合 | 久久福利在线 | 91福利视频网站 | 丁香婷婷激情啪啪 | 九九九九免费视频 | 91麻豆精品久久久久久 | 91手机在线看片 | 久久国产精品一区二区 | 永久免费在线 | 国产精久久久久久久 | 在线你懂的视频 | 国产精品高清在线观看 | 视频一区二区三区视频 | 天天射天 | 国产成视频在线观看 | 国产精品99久久久久久大便 | 日本久久高清视频 | 久久大香线蕉app | 激情网五月婷婷 | 亚洲精品在线观看av | 国产18精品乱码免费看 | 亚洲视频免费在线观看 | av成人黄色| 麻豆成人精品 | 久综合网 | 国产精品自在线拍国产 | 菠萝菠萝在线精品视频 | 欧美日韩国产精品久久 | 日韩精品中字 | 99热国产在线观看 | 国内精品久久久久久久久久 | 久久精品亚洲一区二区三区观看模式 | 久久免费视频在线观看6 | 不卡的av在线 | 免费看的黄色网 | 精品毛片在线 | 欧美精品在线一区二区 | 99视频精品全部免费 在线 | 91污在线观看 | 日韩三级av | 国产午夜精品理论片在线 | 午夜精品一区二区三区四区 | 亚洲精品在线观看免费 | 九色琪琪久久综合网天天 | 91麻豆免费看 | 国产黄色在线网站 | 中文字幕网址 | 欧美成人基地 | 精品在线亚洲视频 | 亚洲va欧美va | 久99久视频 | 国产高清一区二区 | av在线播放快速免费阴 | 国产精品一区二区av日韩在线 | 亚洲视频 视频在线 | 亚洲精品午夜国产va久久成人 | 久久精品久久精品 | 99精品视频精品精品视频 | 国产在线色站 | 在线观看日韩专区 | 日本不卡一区二区三区在线观看 | 欧美韩日在线 | 欧美成人影音 | 欧美色伊人 | 久草久视频 | 四虎国产精品成人免费影视 | a在线视频v视频 | 国产一级片一区二区三区 | 一区二区亚洲精品 | 99爱这里只有精品 | 精品国产一区二区三区蜜臀 | 欧美精品久久久久久久免费 | 色资源网免费观看视频 | 中国一级片在线播放 | 伊人中文在线 | av888.com| 在线看欧美 | 亚洲精品国产成人 | av福利在线看 | 国产中文字幕网 | 欧美三级免费 | 五月天久久 | av免费观看高清 | 日韩成人高清在线 | 最近中文字幕高清字幕在线视频 | av在线网站大全 | 日韩久久久久久久久久 | 91免费视频黄| 伊人国产女 | 99久久精品久久久久久清纯 | 国产精品theporn | www.天天成人国产电影 | 成年人黄色免费看 | 色多多在线观看 | 久久国产成人午夜av影院潦草 | 黄污视频网站大全 | 日韩在线网 | 在线视频精品播放 | 中文字幕一区av | 国产精品手机在线播放 | 国产老熟| 999久久久久 | 亚洲免费不卡 | 超碰在线免费97 | 免费精品人在线二线三线 | 久久tv | 久久av在线播放 | 亚洲免费在线观看视频 | 九九久久久久久久久激情 | 在线免费日韩 | 国产精品人成电影在线观看 | www.人人草 | 免费av高清 | 成人高清av在线 | 91视频在线看 | a√天堂资源 | 在线观看激情av | 日日日日 | 四虎成人精品在永久免费 | 在线a人片免费观看视频 | 亚洲精品国产精品国产 | 四虎影视成人永久免费观看亚洲欧美 | 伊人五月天综合 | 久久黄色小说视频 | 欧洲亚洲精品 | 少妇bbbb搡bbbb搡bbbb | 一区免费视频 | 中文字幕乱码一区二区 | 国产精品99久久久久久有的能看 | 91精品视频一区 | 一级黄色片在线 | 国产精品永久久久久久久www | 国产a级免费 | 久久综合九色综合久久久精品综合 | 国产美女网站视频 | 亚洲欧洲一级 | 久久在线观看视频 | 欧美aaa视频 | 国产亚洲久一区二区 | 91最新视频在线观看 | 一级片免费在线 | 97在线观看 | 18国产精品福利片久久婷 | 欧美日韩一区久久 | 久草在线视频精品 | 国产精品九九九 | 亚洲天堂香蕉 | 中文字幕 影院 | 成年人电影免费在线观看 | 麻豆免费视频网站 | 在线视频观看你懂的 | 99精品一级欧美片免费播放 | 久久久人人爽 | 久久夜色精品国产欧美乱极品 | 亚洲免费视频观看 | 成人午夜电影在线播放 | 国产在线免费观看 | 久久精品理论 | 狠狠干2018 | 国产清纯在线 | 最新日本中文字幕 | 99热高清| 国产成人福利片 | 韩日电影在线观看 | 成人免费视频在线观看 | 在线观看视频你懂的 | 国产 字幕 制服 中文 在线 | 欧美性生活小视频 | 国产精品久免费的黄网站 | 综合天堂av久久久久久久 | 精品国产一区二区三区久久 | 亚洲黄色a| 国产精品女同一区二区三区久久夜 | 在线观看911视频 | 免费av 在线 | 国产精品美女久久久久久网站 | 麻豆一精品传二传媒短视频 | 黄www在线观看 | 一区在线观看视频 | 美女视频黄网站 | 成人高清在线观看 | 国产在线高清视频 | av动图| 狠狠干狠狠久久 | 五月天丁香综合 | 日韩专区在线播放 | 国产97色| 亚洲综合色播 | 免费日韩一区 | 日韩 在线观看 | 香蕉视频免费在线播放 | 欧美精品首页 | 精品国产aⅴ一区二区三区 在线直播av | 国产精品成人自产拍在线观看 | 久久久久观看 | 久久理论片 | 久久精品a | 91高清免费看 | 久久亚洲影院 | 成人黄色av免费在线观看 | 亚洲免费在线观看视频 | 午夜av在线免费 | 欧美日韩三区二区 | 亚洲免费av一区二区 | 九九热有精品 | 一区二区视频欧美 | 91麻豆视频 | 精品久久精品久久 | 国产精品久久99精品毛片三a | 中文字幕大全 | 亚洲理论电影网 | 免费看一及片 | 精品亚洲一区二区 | 美女在线国产 | 一区二区三区精品在线视频 | 免费看毛片网站 | 国产原创av片 | 久久爱综合 | 狠狠色伊人亚洲综合成人 | 久草视频免费在线播放 | 国产高清黄| 久久国产乱 | 午夜精品视频福利 | 精品一区二区在线观看 | 日韩欧美大片免费观看 | 成人国产精品一区二区 | 亚洲精品欧美成人 | 日韩在线不卡视频 | 2019天天干夜夜操 | 日韩欧美在线高清 | 又爽又黄在线观看 | 国产精国产精品 | 成年人视频在线免费观看 | 超碰在线97国产 | 免费在线观看av片 | 亚洲专区视频在线观看 | 在线观看成人av | 久久av高清| 中文字幕高清av | 色综合久久88色综合天天人守婷 | 国产剧情一区 | 久久综合久久久久88 | av大全在线播放 | 日韩免费中文 | 天天爽天天爽天天爽 | 中文字幕电影高清在线观看 | 精品99在线观看 | 91最新国产 | 黄色三级在线看 | 日韩免费观看视频 | 久视频在线 | av片无限看 | 久久精品99国产精品日本 | 久久精品这里都是精品 | 欧美成年人在线视频 | 波多野结衣亚洲一区二区 | 亚洲黄色av | 欧美日韩国语 | 毛片网在线 | 天堂v中文 | 99精品国产高清在线观看 | 日韩理论电影在线观看 | 国产亚洲精品xxoo | 91自拍91 | 国产一级做a | 天躁狠狠躁 | 亚洲最新毛片 | 国产精品一区二区av日韩在线 | 亚洲精品免费在线 | 最近日本字幕mv免费观看在线 | 亚洲狠狠婷婷综合久久久 | 免费在线国产黄色 | 久久久久国产成人免费精品免费 | 久久欧洲视频 | 日产av在线播放 | 成人免费电影 | www.久艹 | 亚洲精品男人天堂 | 亚洲精品国产精品国产 | 一区精品久久 | 丁香五月缴情综合网 | 成人免费观看在线视频 | 国产高清绿奴videos | 欧美综合在线视频 | 欧美一区在线看 | 婷婷色 亚洲 | 欧美日韩一区二区三区视频 | 中文字幕在线视频国产 | 精品国产一区二区三区日日嗨 | 中文字幕在线观看视频网站 | 国产成人福利在线 | 偷拍精偷拍精品欧洲亚洲网站 | 国产精品婷婷午夜在线观看 | www.亚洲精品| 亚洲国产小视频在线观看 | 美女网站免费福利视频 | 久操中文字幕在线观看 | 国产精品专区在线观看 | 久久免费精品一区二区三区 | 日日爱网站 | 日韩精品视频免费专区在线播放 | 人人藻人人澡人人爽 | 91精品办公室少妇高潮对白 | 一区二区国产精品 | 亚洲精品一区二区18漫画 | 欧美视频在线观看免费网址 | zzijzzij日本成熟少妇 | 97成人精品视频在线观看 | 色偷偷网站视频 | 成人av电影免费 | 成人资源在线观看 | 最近更新好看的中文字幕 | 色在线免费 | 久久久精品国产免费观看一区二区 | 丁香网婷婷 | 免费看黄在线观看 | 国产精品久久久久久久av电影 | 亚洲精品午夜久久久久久久久久久 | www.av中文字幕.com | 日韩欧美久久 | 久99久在线 | 最新中文字幕在线资源 | 婷婷福利影院 | av一区二区三区在线播放 | 手机av在线网站 | 五月天久久婷婷 | 欧美日韩在线观看不卡 | 亚洲精品456在线播放 | 日韩av免费观看网站 | 久久久国产精品一区二区中文 | 久久色在线观看 | 丁香午夜婷婷 | 99久久精品午夜一区二区小说 | www.玖玖玖 | 久草91视频 | 国产偷v国产偷∨精品视频 在线草 | 五月花激情 | 波多野结衣在线视频一区 | 国产精品久久久久久五月尺 | 久久综合九色综合97_ 久久久 | 欧美日韩在线精品一区二区 | 天天天射| 亚洲成人999 | 丁香综合| 色国产精品一区在线观看 | 国产精品久久久久9999 | 亚洲伦理一区二区 | 国产亚洲高清视频 | 夜夜澡人模人人添人人看 | 国产精品不卡在线观看 | 九九九九免费视频 | 日产乱码一二三区别在线 | 国产精品门事件 | 成人影音av | 日本丶国产丶欧美色综合 | 日韩三级久久 | 中国精品少妇 | 国产a网站| 国产大陆亚洲精品国产 | 岛国av在线免费 | 国产剧情一区二区 | 国产黄色片在线 | 婷婷爱五月天 | a在线一区 | 五月天丁香综合 | www.香蕉视频| 91在线播放综合 | 国产精品自在欧美一区 | 精品久久久久久电影 | 国内精品视频一区二区三区八戒 | 国产欧美中文字幕 | 少妇啪啪av入口 | 九九久久免费视频 | 天天色天天爱天天射综合 | 日韩精品一区二区免费视频 | 9999在线视频 | 国产一区二区精 | 久久这里精品视频 | 天天天干天天射天天天操 | 精品久久久久久久久久久久久 | 国产在线播放观看 | 精品国产亚洲日本 | 天天干天天干天天色 | 欧美亚洲三级 | 在线视频你懂 | 国产精品久久一区二区三区不卡 | 九九日九九操 | 欧美成人性战久久 | 国产成人区 | 久久人人看 | 国产不卡一区二区视频 | av激情五月 | 四川bbb搡bbb爽爽视频 | 黄色免费大全 | 亚洲精品乱码久久久久久蜜桃欧美 | 国产激情电影综合在线看 | 国产精品久久久久永久免费看 | 国产精品一区二区62 | 在线观看亚洲精品视频 | 中文永久免费观看 | 日韩精品免费在线观看视频 | 91精品在线观看入口 | 一级黄色片在线免费看 | 人人狠狠综合久久亚洲婷 | 免费看黄在线观看 | 黄色网址在线播放 | 成人av网站在线播放 | 最新中文在线视频 | 久久亚洲免费视频 | 精品久久久久久国产91 | av在线短片 | 亚洲va欧美va人人爽春色影视 | 午夜精品成人一区二区三区 | 黄色亚洲精品 | 久久九九视频 | 91在线一区二区 | 国产精品 久久 | 中文字幕高清视频 | 免费大片av | 制服丝袜在线91 | 在线观看完整版免费 | 亚洲精选在线观看 | 国产高清视频在线播放一区 | 亚洲午夜久久久综合37日本 | 999免费视频 | 欧美一二三专区 | 在线视频亚洲 | 人人玩人人弄 | 久久免费成人精品视频 | 国产精品高清一区二区三区 | 国产精品久久久久久久久久久久午夜 | 成年人在线观看网站 | 国产一二三四在线观看视频 | 国产在线观看h | 久久婷婷国产 | 久久精品老司机 | av综合站 | 国产精品成人a免费观看 | 国产一区欧美日韩 | 日韩视频免费观看高清完整版在线 | 日三级在线| 999久久久久久 | 黄色av播放 | 国产精品久久久久免费观看 | 在线久草视频 | 亚洲免费永久精品国产 | 久艹视频在线免费观看 | 久草在线视频在线观看 | 五月激情亚洲 | 手机看片99 | 人人爽人人爱 | 欧美色综合天天久久综合精品 | 三级动态视频在线观看 | 麻豆久久 | 久久国产精品久久国产精品 | 久久电影色 | www五月| 国精产品满18岁在线 | 视频在线一区二区三区 | 日韩久久视频 | 国产xx在线 | 黄色精品在线看 | 一区二区三区中文字幕在线观看 | 97在线影院 | 婷婷色社区 | 精品国产资源 | 亚洲人成网站精品片在线观看 | 黄色亚洲免费 | 夜色成人网 | 99综合久久 | 国产乱对白刺激视频不卡 | 一级免费av| 亚洲精品动漫成人3d无尽在线 | 国产精品伦一区二区三区视频 | 综合网五月天 | 成人在线视频免费观看 | 国产精品一区二区美女视频免费看 | 热re99久久精品国产66热 | .国产精品成人自产拍在线观看6 | 国产成人综合精品 | 中文字幕日本在线观看 | 麻豆影视在线免费观看 | 国产韩国日本高清视频 | 久久久一本精品99久久精品 | 国产午夜三级一二三区 | 狠狠躁夜夜躁人人爽超碰91 | 国产91精品久久久久久 | 国产精品系列在线 | www色网站 | 亚洲japanese制服美女 | 免费看片黄色 | 999亚洲国产996395 | 白丝av免费观看 | 超碰激情在线 | 色婷婷www | 正在播放国产91 | 日韩午夜电影 | 精品在线亚洲视频 | 免费观看www小视频的软件 | 亚洲伊人第一页 | 国产手机在线观看 | 国产69精品久久久久99 | 97超碰国产精品女人人人爽 | 国产在线免费 | 亚洲精品小区久久久久久 | 免费日韩一级片 | 五月综合婷 | 97国产在线视频 | 丁香激情视频 | 国产精品久久久777 成人手机在线视频 | 欧美精品中文在线免费观看 | 亚洲精品美女久久久 | 国产精品女主播一区二区三区 | 九九热视频在线 | 国产另类xxxxhd高清 | 日本黄色黄网站 | 中文字幕免费观看 | 免费视频你懂得 | 99精品国产99久久久久久97 | 激情欧美xxxx | 亚洲黄色在线观看 | 天堂av影院 | 黄网站免费大全入口 | 一区二区中文字幕在线观看 | 在线视频观看成人 | 九九影视理伦片 | 久久久久久久久久久福利 | 91成人看片| 久久久91精品国产一区二区三区 | 97手机电影网 | 天天干天天拍天天操天天拍 | 最新国产精品拍自在线播放 | 9免费视频 | 久久网站av| 国产精品mm | 国产视频 久久久 | 国产手机在线观看 | 国产 欧美 日本 | www在线免费观看 | 精品一区 在线 | 一区二区三区在线观看免费视频 | 国产成年免费视频 | 欧美日韩视频精品 | 国产精品美女免费视频 | 日韩中文在线播放 | 日韩一区在线免费观看 | 国产精品99蜜臀久久不卡二区 | 中文字幕精品一区二区精品 | 国产精品毛片网 | 欧美性生活一级片 | 91九色porny蝌蚪视频 | 欧美色图狠狠干 | 日日摸日日 | 国产成人在线播放 | 久久久久久国产精品久久 | 成人免费在线视频观看 | 国内精品小视频 | 亚洲精品久久久蜜桃 | 超级碰碰免费视频 | 99精品在线视频播放 | 欧美国产日韩中文 | 另类五月激情 | 日韩免费播放 | 欧美激情视频一二区 | 夜夜躁日日躁 | 伊人va| 中文字幕资源在线观看 | 国产自产高清不卡 | 国产精品久久三 | 久久久久国产精品一区 | 97成人超碰 | 国内精品久久久久影院一蜜桃 | 在线观看黄色 | 久久成人国产精品一区二区 | 亚洲在线精品 | 九精品| 国产精品视频你懂的 | 国产在线美女 | 亚洲影视九九影院在线观看 | 麻豆极品 | 日韩视频精品在线 | 色婷婷综合成人av | 国产精品久久久久久69 | 久久久久久美女 | 中文字幕在线观看视频免费 | 碰碰影院| 免费在线观看日韩 | 三上悠亚一区二区在线观看 | 免费色网站 | 国产成人一区二区三区电影 | 欧美日韩不卡一区二区三区 | 国产在线播放一区二区三区 | 亚洲久草在线 | 久久久久北条麻妃免费看 | 丁香久久激情 | 狠狠操操 | 婷婷狠狠操 | 96久久欧美麻豆网站 | 亚洲精品欧美专区 | 久久视频网址 | 欧美日韩视频在线 | 欧美aa级| 色婷婷狠狠操 | 日韩欧美视频免费看 | 九九免费观看视频 | 91成人免费看片 | 在线观看免费版高清版 | 国产视频二| 久久社区视频 | 欧美另类xxx | 九九在线播放 | 日本系列中文字幕 | 国产高清在线观看 | a级片网站 | 久久久久亚洲精品国产 | 国产精品女 | 亚洲精品无 | 黄色资源在线观看 | 久久久精品国产免费观看一区二区 | 91福利视频久久久久 | 日韩在线电影一区 | 在线 视频 一区二区 | 精品久久久久久一区二区里番 | 视频在线精品 | 中文字幕成人 | 热久久99这里有精品 | 97超碰在线久草超碰在线观看 | 日本99久久 | 成年人av在线播放 | 亚洲视频999| 九精品 | 88av色 | 91最新国产 | 色婷婷亚洲综合 | 亚洲国产精品影院 | 大胆欧美gogo免费视频一二区 | 国产成人亚洲精品自产在线 | 欧美精品久久久久久久免费 | 色偷偷88888欧美精品久久久 | 在线观看91 | 国产精品久久嫩一区二区免费 | 久久国产乱 | 国产精品av一区二区 | 国产精品日韩欧美 | 天天干天天色2020 | 亚洲精品视频在线观看网站 | 久久久久成人精品 | 婷婷免费视频 | 免费看三片 | 久草精品免费 | 国产剧情一区 | 亚洲 成人 一区 | 国产精品一区专区欧美日韩 | 超碰97在线看 | 国产一区二区三区在线免费观看 | 免费a级大片 | 成人在线一区二区 | 亚洲春色成人 | 国内精品久久久久久久久久清纯 | 中国一级片在线观看 | 日本黄色大片免费看 | 丁香花在线视频观看免费 | 国产精品久久网站 | 国产成人av网| 丁香婷婷在线 | 99国产在线 | 国产精品久久久久四虎 | 在线精品视频在线观看高清 | 精品亚洲在线 | 一区二区视频在线观看免费 | 国内视频| 欧美日韩大片在线观看 | 在线免费黄色av | 欧美日比视频 | 天天干天天射天天爽 | 国产精品爽爽久久久久久蜜臀 | 亚洲精品午夜视频 | 99热 精品在线 | 欧美福利精品 | 高清免费av在线 | 日韩免费一区 | 日韩久久久久久 | 丁香影院在线 | 色无五月 | 一区二区欧美日韩 | 日韩二区在线 | 精品国偷自产国产一区 | 天天操比 | 色老板在线视频 | 国产资源中文字幕 | 超碰av在线播放 | 国产高清一区二区 | 四虎成人精品在永久免费 | 国产裸体视频网站 | 91视频首页 | 天堂va欧美va亚洲va老司机 | 国产在线精品观看 | 人人爽人人爽人人爽 | 日韩精品一区二区三区免费观看视频 | 久久久久久久久久久久久9999 | 激情亚洲综合在线 | 一本—道久久a久久精品蜜桃 | 伊人婷婷久久 | 国产精品久久久久久久久久久久午夜 | 色福利网站 | avlulu久久精品| 久久手机在线视频 | 天天爱天天舔 | 久久综合久久综合久久 | 18久久久久久 | 婷婷综合亚洲 | 久久久久久久久久国产精品 | www.狠狠插.com | 黄色日本片| 久久精品一区二区三 | 18性欧美xxxⅹ性满足 | 久久久一本精品99久久精品 | 免费久久久 | 99色精品视频 | 成人av高清在线观看 | 99在线精品视频 | 在线免费观看国产精品 | 亚洲aⅴ在线| 97在线观视频免费观看 | 国产99一区视频免费 | 成人av免费在线观看 | 日韩高清黄色 | 婷婷伊人五月 | av官网| 国产精品久久久久免费a∨ 欧美一级性生活片 | 黄色大全在线观看 | 91丨九色丨蝌蚪丰满 | 91黄色小网站 | 成人免费在线观看av | 粉嫩av一区二区三区四区五区 | 国产成人久 | 91手机电视 | 四虎永久网站 | av大全在线 | 色狠狠操 | 超碰在线天天 | 午夜精品一区二区三区在线观看 | 欧美性色综合网站 | 婷婷在线网站 | 日韩一区二区三区高清免费看看 | 在线免费观看黄色 | 少妇bbr搡bbb搡bbb | 9色在线视频 | 午夜视频二区 | 亚洲日本va午夜在线电影 | 少妇18xxxx性xxxx片 | 国产91精品看黄网站 | 国产麻豆视频免费观看 | 成人免费影院 | 色婷婷久久久综合中文字幕 | 午夜精品福利在线 | 黄a在线看| 91精品在线播放 | 九九综合在线 | 久久草av| 奇米影视999 | 一区二区影视 | 91最新地址永久入口 | 亚洲婷婷网 | 国产精品免费久久久 | 青青河边草免费观看 | 精品免费久久久久 | 久久久久久久久精 | 在线岛国av | 又黄又爽又刺激 | 在线观看视频亚洲 | 国产精品毛片一区二区在线 | 在线视频18在线视频4k | 97碰碰精品嫩模在线播放 | 最新色站 | 麻豆免费精品视频 | 欧美精品国产综合久久 | 日本中文字幕久久 | 天天综合人人 | 国产精品入口麻豆www | 中文理论片 | 成人97视频 |