成人激情小说网站_国产精品91xxx_污污免费网站_亚洲免费观看高清完整版在线观看熊_欧美午夜18电影_…久久精品99久久香蕉国产_99国产精品99久久久久久_理论片午夜视频在线观看_欧美日韩国产小视频在线观看_日本亚州欧洲精品不卡

電子開發網

電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 嵌入式系統 >> ARM >> 正文

ARM的啟動分析

作者:佚名    文章來源:本站原創    點擊數:    更新時間:2013-7-9
  • STARTUP 
    1 ARM的啟動 
    一般的嵌入式系統在主程序執行之前都需要執行一些初始化的過程以創造嵌入式程序運行的環境,尤其是一些高級的嵌入式系統,由于核心芯片使用內存映射、內存保護等機制以及編程使用高級語言C,C++甚至JAVA語言,都需要先創建一個適合程序運行的硬件環境,然后初始化或者配置或者剪裁run-time library, 這些工作都必須在主程序運行前完成,所以一個startup程序或者程序組對于一個嵌入式系統來說是非常重要的。要編寫startup程序,需要對編譯器、鏈接器和匯編器的細節有一定的了解,同時對ARM芯片硬件本身的地址分配以及memory mapping機制也需要有一些了解。 
    2 ARM 程序的工作過程 
    首先由各種source file經過編譯產生object文件,然后object文件經過鏈接生成Image文件,然后通過ICE的方法,根據描述文件的指定下載到目標板上的固態存儲器指定地址當中,比如flash,EEPROM, ROM等等。在程序執行之前,根據某些描述文件,將需要讀寫數據的部分讀出放入動態存儲器比如RAM當中,然后程序從ROM開始執行。或者有時為了提高程序的運行速度,也可以將所有的程序(有一些root的部分除外,以后會提及)通過一個描述文件放入指定的RAM當中,然后程序從RAM開始執行,但是這樣會耗費大量的動態存儲器,所以大部分程序會取折中的方法,將需要快速運行的部分和要讀寫的部分放入RAM中(一般讀固態存儲器的過程和動態存儲器的過程是一樣的,但是寫就不同了,所以讀寫的部分一定要放到RAM中),而只讀的部分和對速度要求不是那么高的部分放入固態存儲器。同時ARM結構的異常向量表規定放在地址為0x00000000開始的地址空間上,而一般的CPU為了提高異常相應速度,會將這個向量段remap到其他的RAM當中,所以在描述文件當中必須精確指定異常向量跳轉程序的地址到remap的地方。在application程序執行前,還需要由一些文件描述application程序執行的環境。比如系統工作時鐘,總線頻率。現在一般嵌入式編程語言為C,C++等。如果在使用它們的時候使用的runtime-library,那么在程序執行前還需要為這些庫函數初始化heap。然后ARM可能工作在不同的模式,還需要為不同的工作模式設置stack。這樣,描述鏈接地址的文件,以及在application運行前所有的初始化程序就是startup程序組 
    3 STARTUP分類 
    這樣,將startup程序所完成的功能分類。一類是鏈接地址描述,一類是各種初始化的程序。根據不同的應用,描述文件和初始化程序的內容以及結構和復雜程度都會不同。但是基本上,它們都必須實現以下功能。 
    3.1 描述文件實現功能 
    描述文件可以是鏈接命令行上簡單的幾個字符,也可以是一個非常復雜的文件,但是它必須完成如下功能: 
    ; 指定程序下載的地址 
    ; 指定程序執行的地址 
    3.2 初始化程序實現的功能 
    初始化程序根據不同的應用,其結構和復雜度也不同,但是它必須完成如下基本功能: 
    ; 異常向量初始化 
    ; 內存環境初始化 
    ; 其他硬件環境初始化


基于ARM的芯片多數為復雜的片上系統,這種復雜系統里的多數硬件模塊都是可配置的,需要由軟件來設置其需要的工作狀態。因此在用戶的應用程序之前,需要由專門的一段代碼來完成對系統的初始化。由于這類代碼直接面對處理器內核和硬件控制器進行編程,一般都是用匯編語言。一般通用的內容包括:
中斷向量表
初始化存儲器系統
初始化堆棧
初始化有特殊要求的斷口,設備
初始化用戶程序執行環境
改變處理器模式
呼叫主應用程序 
1. 中斷向量表
ARM要求中斷向量表必須放置在從0地址開始,連續8X4字節的空間內。
每當一個中斷發生以后,ARM處理器便強制把PC指針置為向量表中對應中斷類型的地址值。因為每個中斷只占據向量表中1個字的存儲空間,只能放置一條ARM指令,使程序跳轉到存儲器的其他地方,再執行中斷處理。
中斷向量表的程序實現通常如下表示:
AREA Boot ,CODE, READONLY
ENTRY
B    ResetHandler
B    UndefHandler
B    SWIHandler
B    PreAbortHandler
B    DataAbortHandler
B
B    IRQHandler
B    FIQHandler
其中關鍵字ENTRY是指定編譯器保留這段代碼,因為編譯器可能會認為這是一段亢余代碼而加以優化。鏈接的時候要確保這段代碼被鏈接在0地址處,并且作為整個程序的入口。 
2. 初始化存儲器系統
(1)存儲器類型和時序配置
通常Flash和SRAM同屬于靜態存儲器類型,可以合用同一個存儲器端口;而DRAM因為有動態刷新和地址線復用等特性,通常配有專用的存儲器端口。
存儲器端口的接口時序優化是非常重要的,這會影響到整個系統的性能。因為一般系統運行的速度瓶頸都存在于存儲器訪問,所以存儲器訪問時序應盡可能的快;而同時又要考慮到由此帶來的穩定性問題。
(2)存儲器地址分布
一種典型的情況是啟動ROM的地址重映射。
3. 初始化堆棧
因為ARM有7種執行狀態,每一種狀態的堆棧指針寄存器(SP)都是獨立的。因此,對程序中需要用到的每一種模式都要給SP定義一個堆棧地址。方法是改變狀態寄存器內的狀態位,使處理器切換到不同的狀態,讓后給SP賦值。注意:不要切換到User模式進行User模式的堆棧設置,因為進入User模式后就不能再操作CPSR回到別的模式了,可能會對接下去的程序執行造成影響。
這是一段堆棧初始化的代碼示例,其中只定義了三種模式的SP指針:
MRS   R0,CPSR
BIC    R0,R0,#MODEMASK  安全起見,屏蔽模式位以外的其他位
ORR   R1,R0,#IRQMODE
MSR   CPSR_cxfs,R1
LDR   SP,=UndefStack

ORR   R1,R0,#FIQMODE
MSR   CPSR_cxsf,R1
LDR   SP,=FIQStack

ORR   R1,R0,#SVCMODE
MSR   CPSR_cxsf,R1
LDR   SP,=SVCStack
4. 初始化有特殊要求的端口,設備
5. 初始化應用程序執行環境
映像一開始總是存儲在ROM/Flash里面的,其RO部分即可以在ROM/Flash里面執行,也可以轉移到速度更快的RAM中執行;而RW和ZI這兩部分是必須轉移到可寫的RAM里去。所謂應用程序執行環境的初始化,就是完成必要的從ROM到RAM的數據傳輸和內容清零。
下面是在ADS下,一種常用存儲器模型的直接實現:
LDR    r0,=|Image$$RO$$Limit|      得到RW數據源的起始地址
LDR    r1,=|Image$$RW$$Base|      RW區在RAM里的執行區起始地址
LDR    r2,=|Image$$ZI$$Base|        ZI區在RAM里面的起始地址
CMP    r0,r1                      比較它們是否相等
      BEQ    %F1
0     CMP    r1,r3
      LDRCC  r2,[r0],#4
      STRCC  r2,[r1],#4
      BCC    %B0
1     LDR    r1,=|Image$$ZI$$Limit|
      MOV   r2,#0
2     CMP    r3,r1
      STRCC  r2,[r3],#4
      BCC    %B2
程序實現了RW數據的拷貝和ZI區域的清零功能。其中引用到的4個符號是由鏈接器第一輸出的。
|Image$$RO$$Limit|:表示RO區末地址后面的地址,即RW數據源的起始地址
|Image$$RW$$Base|:RW區在RAM里的執行區起始地址,也就是編譯器選項RW_Base指定的地址
|Image$$ZI$$Base|:ZI區在RAM里面的起始地址
|Image$$ZI$$Limit|:ZI區在RAM里面的結束地址后面的一個地址
程序先把ROM里|Image$$RO$$Limt|開始的RW初始數據拷貝到RAM里面|Image$$RW$$Base|開始的地址,當RAM這邊的目標地址到達|Image$$ZI$$Base|后就表示RW區的結束和ZI區的開始,接下去就對這片ZI區進行清零操作,直到遇到結束地址|Image$$ZI$$Limit|
6. 改變處理器模式
因為在初始化過程中,許多操作需要在特權模式下才能進行(比如對CPSR的修改),所以要特別注意不能過早的進入用戶模式。
內核級的中斷使能也可以考慮在這一步進行。如果系統中另外存在一個專門的中斷控制器,這么做總是安全的。
7. 呼叫主應用程序
當所有的系統初始化工作完成之后,就需要把程序流程轉入主應用程序。最簡單的一種情況是:
IMPORT main
B      main
直接從啟動代碼跳轉到應用程序的主函數入口,當然主函數名字可以由用戶隨便定義。
在ARM ADS環境中,還另外提供了一套系統級的呼叫機制。
IMPORT __main
B     __main
__main()是編譯系統提供的一個函數,負責完成庫函數的初始化和初始化應用程序執行環境,最后自動跳轉到main()函數。

* 文件      : 連載二 
* 版本   : V1.00 
* 作者      : 潘自強 
* 
* 對象      : ARM7 
* 模式      : ARM 
* 工具      : ADS1.20 
********************************************************************************************************* 
*/ 


4 描述文件 
要編寫描述文件,必須知道ARM Image文件的組成及ARM Image文件執行的機理。 
4.1 ARM Image的結構 
一個ARM Image structure由linker在以下幾個方面定義: 
 組成它的regions 和 output sections 
 當Image 下載的時候這些regions 和 sections 在內存中的位置 
 當Image 執行時這些regions和sections在內存中的位置 
4.1.1 ARM Image的組成 
一個ARM Image被保存在可執行文件當中,它的層次結構可以包括Image,regions,output sections和input sections。 
 一個Image由一個或多個regions組成,每個region包括一個或多個output sections 
 每個output section由一個或多個input sections組成 
 Input sections是一個object file中的code和data信息。 
Image的結構如 
下圖: 
1 附圖: tu1.JPG (24684 字節) 
NOTE Input section,output section和region的定義見ADS_LinkerGuide 3-3頁。 
同時Input section 有幾種屬性,分別為readonly,read-write,zero-initialized。分別稱為RO,RW和ZI。屬性來源于AREA后的attr屬性。 
比如CODE是RO,DATA是RW,NOINT默認為ZI,即用0值初始化,但是可以選擇不進行0值初始化。ZI屬性僅僅來源于SPACE, DCB, DCD, DCDU, DCQ, DCQU, DCW, 或者DCWU。由以上定義,ZI屬性的包含于RW屬性,它是有初始值的RW數據。又例如在C語言中,代碼為RO,靜態變量和全局變量是RW,ZI的。
1xx
文件      : 連載三 
* 版本   : V1.00 
* 作者      : 潘自強 
* 
* 對象      : ARM7 
* 模式      : ARM 
* 工具      : ADS1.20 
********************************************************************************************************* 
*/ 

4.1.2 Image 的Load view 和 execution view 
在下載的時候Image regions被放置在memory map當中,而在執行Image前,或許你需要將一些regions放置在它們執行時的地址上,并建立起ZI regions。例如,你初始化的RW數據需要從它在下載時的在ROM中的地址處移動到執行時RAM的地址處。 
1 附圖: tu2.jpg (640566 字節)
2xx

NOTE Load view 和execution view的詳細定義見ADS_LinkerGuide 3-4 
以上的描述包括二個內容,一是要指定各個section在load view和execution view時的地址即memory map,二是要在執行前根據這些地址進行section的初始化。 
4.1.3 制定Memory map 
制定memory map的方法基本上有二種,一是在link時使用命令行選項,并在程序執行前利用linker pre-define symbol使用匯編語言制定section的段初始化,二是使用scatter file。以上二種方法依應用程序的復雜度而定,一針對簡單的情況,二針對復雜的情況。


* 文件      : 連載四 
* 版本   : V1.00 
* 作者      : 潘自強 
* 
* 對象      : ARM7 
* 模式      : ARM 
* 工具      : ADS1.20 
****************************************************************************** 
*************************** 
*/ 

4.1.1.1 利用linker pre-define symbol使用匯編程序 
這是簡單的方法,針對簡單的memory map。在link時使用選項-ro, -rw, 等等指定memory map的地址。詳細說明參看ADS_LinkerGuide中命令行選項說明。然后利用匯編使用pre-define symbol,來進行各種段的定位。Linker pre-define定義如下: 
1 附圖: tu1.jpg (22811 字節)
3xx

由前面對ZI的說明,Image$$RW$$Limit = Image$$ZI$$Limit。 
2 附圖: tu2.jpg (30577 字節)
4xx

這些都是linker預先定義的外部變量,在使用的時候可以用IMPORT引入。下面給出一個例子。 
假設linker 選項為:-ro-base 0x40000000 -rw-base 0x40003000。程序和只讀變量(const 變量)大小為0x84,這樣RO section的大小為0x84 bytes。Data的大小為0x04 bytes,并且data被初始化,則RW section的大小為0x04,ZI section的大小為0x04。這樣程序 
在load view,地址是這樣的: 
0x40000000開始到地址0x40000080,是RO section部分(程序從0x40000000開始),Image$$RO$$Limit = 0x40000084. 
0x40000084地址開始到地址0x40000084,是RW section部分。 

在execution view,由linker的選項,各個section的地址是這樣的: 
RO section的地址不變。 
RW section的起始地址應當為0x40003000,則Image$$RW$$Base = 0x40003000。 
因為全部的0x04 bytes data被初始化,所以Image$$RW$$Limit = Image$$ZI$$Limt = 0x40003004。 
現在要做的就是將RW section移到以0x40003000開始的地方,并且創造一個ZI section。 
一個更通用的做法是: 
首先比較Image$$RO$$Limit和mage$$RW$$Base,如果相等,說明execution view下RW section的地址和load view 下RW section的地址相同,這樣,不需要移動RW section;如果不等,說明需要移動RW section 到它在execution view中的地方。然后將Image$$ZI$$Base地址到Image$$ZI$$Limt地址的內容清零。 
示例代碼如下: 
;讀入linker pre-define symbols 

IMPORT |Image$$RO$$Limit| 
IMPORT |Image$$RW$$Base| 
IMPORT |Image$$ZI$$Base| 
IMPORT |Image$$ZI$$Limit| 

; .......一些其他的代碼或偽指令 

;R0讀入section load address 
LDR R0,=|Image$$RO$$Limit| 
;R1讀入section execution address 
LDR R1,=|Image$$RW$$Base| 
;R2讀入execution section 后的緊跟的word address 
LDR R2,=|Image$$ZI$$Base| 
;檢查RW section的地址在load view和execution view下 
;是否相等,如果相等,就不移動RW section,直接建立 
;ZI scetion 
CMP R0,R1 
BEQ do_zi_init 

;否則就copy RW section到execution view下指定的地址 
BL copy 

; ...... 
; ...... 

;copy 是一個用于copy的子函數,它把從R0中的地址開始的 
;section copy到R1中的地址開始的section,這個section的 
;上限地址后緊跟的word address保存在R2中 
copy 
CMP R1,R2 
LDRCC R3,[R0],#4 
STRCC R3,[R1],#4 
BCC copy 
MOV PC,LR 

; ...... 
; ...... 
;do_zi_int子函數是為創建ZI section做一些準備工作 
do_zi_int 
;將ZI section開始的地址裝入R1 
LDR R1,=|Image$$ZI$$Base| 
;將ZI section結束后緊跟的word address裝入R2 
LDR R2,=|Image$$ZI$$Limit| 
;將ZI section 需要的初始化量裝入R3 
MOV R3,#0 
BL zi_int 


; ...... 
; ...... 
;zi_int子函數用于建立并初始化ZI section,ZI section的 
;開始地址儲存在R1,ZI section結束后緊跟的word address 
;地址儲存在R2 

zi_int 
CMP R1,R2 
STRCC R3,[R1],#4 
BCC zi_int 
MOV PC,LR 

; ...... 
; ...... 
這個方法針對比較簡單的應用,如果需要進行一個比較復雜的memory map,如下圖,那么這個方法就不適用了。為了解決復雜memory map的問題 
需要用到scatter load 機制。 
3 附圖: tu3.jpg (32473 字節)
5xx
Tags:ARM的啟動分析,ARM,知識點  
責任編輯:admin
  • 上一篇文章:
  • 下一篇文章: 沒有了
  • 請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
    1分 2分 3分 4分 5分

    還可以輸入 200 個字
    [ 查看全部 ] 網友評論
    關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
    返回頂部
    刷新頁面
    下到頁底
    晶體管查詢
    欧美日韩在线亚洲一区蜜芽| 亚洲天堂2017| 日韩中文理论片| 91精品国产黑色紧身裤美女| 亚洲女人小视频在线观看| 国产精品一二三| 亚洲无线一线二线三线区别av| 在这里有精品| 欧美理论影院| a视频在线免费看| 调教在线观看| 国产成人精品电影久久久| 自拍偷拍亚洲欧美| 日韩一区二区精品葵司在线| 精品成人久久av| 欧美国产精品v| 国产精品一二三| 久久精品伊人| 亚洲天堂免费| 色综合综合色| 视频二区欧美| 精品视频一区二区三区四区五区| 50度灰在线| 亚洲成人观看| 国产欧美一区二区三区久久人妖| 欧美高跟鞋交xxxxhd| 亚洲男人天堂古典| 日韩欧美一区在线| 欧洲中文字幕精品| 一个色综合av| 亚洲国产精品黑人久久久| 风间由美一区二区三区在线观看| 免费欧美日韩| 激情欧美一区| 久久综合成人| 猛男gaygay欧美视频| 精品国产一区二区三区2021| free欧美| 成人观看网址| 蜜臀av国内免费精品久久久夜夜| av网站在线播放| 午夜影院在线免费观看| 成人久久一区二区| 国产99在线|中文| 久久久久久久久久久亚洲| 中文字幕欧美日韩精品| 精品视频一区在线视频| 欧美成人艳星乳罩| 8v天堂国产在线一区二区| 色94色欧美sute亚洲线路一久| 亚洲午夜精品久久久久久久久| 国产精品美女一区二区三区| 久久一区二区三区四区| 成人毛片视频在线观看| 激情成人综合网| 免费人成在线不卡| 一本久道久久综合婷婷鲸鱼| 欧美日韩午夜| 欧美久久九九| 一本一本久久a久久综合精品| 热久久天天拍国产| 国产一区日韩| 国产精品视频一区二区三区四蜜臂| 精品国产18久久久久久洗澡| 婷婷综合国产| 日韩一区二区三区精品 | av在线播放网| 国产在线黄色| 国产高清自拍视频在线观看| 激情小视频在线| 色av男人的天堂免费在线| 真不卡电影网| 一本大道香蕉8中文在线视频| 粉嫩tv在线播放| 亚色视频在线播放| 永久免费不卡在线观看黄网站| 91精品久久久久久久久久久| 成人网址在线观看| 日日噜噜噜夜夜爽爽狠狠| 成人国产在线激情| 午夜3点看的视频| 91久久影院| 在线麻豆国产传媒1国产免费| 佐山爱痴汉视频一区二区三区| 最新在线观看av网站| 中国在线观看免费国语版电影 | 国产精品18hdxxxⅹ在线| 国产精品一线| 午夜精品影视国产一区在线麻豆| 蜜臀av免费一区二区三区| 九一亚洲精品| 久久国产成人精品| 伊人久久大香线| 欧美三级特黄| 老鸭窝毛片一区二区三区| 日日欢夜夜爽一区| 久久精品av麻豆的观看方式| 国产精品69久久久久水密桃| 成人激情免费电影网址| 91看片淫黄大片一级在线观看| 久久久不卡影院| 中文字幕av一区二区三区免费看| 亚洲欧美色图小说| 亚洲二区在线视频| 色成人在线视频| 91麻豆精品国产91久久久久久| 日韩欧美国产综合| 亚洲人成网7777777国产| 色哟哟网站入口亚洲精品| 欧美精品中文字幕一区| 欧美一性一乱一交一视频| 国产日本欧美一区二区三区在线| 久久久亚洲精华液精华液精华液 | 国产丝袜视频在线播放| 第84页国产精品| 四虎视频在线精品免费网址| 国产精品欧美大片| 日韩精品免费一区二区三区| 一区在线观看| 麻豆精品久久久| 成人国产精品免费观看动漫| 亚洲国产精品成人久久综合一区| 一区二区三区精品在线观看| 日本韩国一区二区三区视频| 日韩欧美久久一区| 在线视频欧美日韩| 国内精品久久久久久影视8| 国产精品久久一区主播| 最近最新mv在线观看免费高清| 国产高清一级毛片在线不卡| 国产99re66在线视频| 欧美成人毛片| 欧美毛片免费观看| 亚洲综合婷婷| 麻豆一区二区在线| 91网站视频在线观看| 亚洲日本在线看| 日韩欧美在线看| 欧美mv和日韩mv的网站| 日韩精品在线观看一区| 欧美老少配视频| 国产精品视频午夜| 欧美女优在线观看| 国产黄色大片在线观看| 国产精品一区二区精品视频观看| 国产不卡av一区二区| 亚洲日本久久| 国产成人综合网| 亚洲人成伊人成综合网小说| 欧美三级日韩三级| 亚洲欧洲在线观看| 欧美一级电影免费在线观看| 天天夜夜亚洲| www.8ⅹ8ⅹ羞羞漫画在线看| 警花av一区二区三区| 欧美成人直播| 久久精品99久久久| 国产精品美女视频| 欧美日韩在线综合| 中日韩美女免费视频网址在线观看 | 国产这里只有精品| aⅴ在线视频男人的天堂 | 中文字幕精品久久久久| 国产精品99蜜臀久久不卡二区| 男女视频在线观看免费| 中文在线8资源库| 欧美精品密入口播放| 日韩视频免费| 国产98色在线|日韩| 一区二区三区精品在线| 日韩一区二区麻豆国产| 欧美日本中文字幕| 情趣网站在线观看| 九色porny视频在线观看| 精品淫伦v久久水蜜桃| 99re国产精品| 久久一区二区三区国产精品| 在线影院国内精品| 色偷偷av一区二区三区乱| 国产精品中文字幕在线| a天堂中文在线官网在线| 一区二区三区亚洲变态调教大结局| 欧美成人首页| 成人av在线资源网| 欧美视频中文字幕在线| 国产一区二区三区中文 | 亚洲性视频在线| 一区在线播放| 久久婷婷国产综合国色天香| 91成人网在线| 久久精品小视频| 国产三级av在线| 波多野结衣91| 国产一区二区免费视频| 一区二区三区四区av| 亚洲成人av片在线观看| 日韩av片永久免费网站| 黄色一级片在线观看| 高清精品视频| 久久精品成人| 亚洲天堂福利av| 亚洲国产成人精品女人久久久 | 九热爱视频精品视频| 久久精品国产久精国产| 亚洲综合久久久| 亚洲人成电影在线观看天堂色| 国产在线视频2019最新视频| а√在线中文网新版地址在线| 视频国产一区| 国产一区二区三区免费| 同产精品九九九| 日韩中文字幕精品视频| 一本一道dvd在线观看免费视频| 亚洲第一会所001| 在线中文一区| 久久蜜桃香蕉精品一区二区三区| 在线播放/欧美激情| 77777少妇光屁股久久一区| 福利视频在线| 国产成人1区| 国产不卡视频一区二区三区| 色噜噜狠狠一区二区三区果冻| 欧美另类第一页| 91高清在线| 欧美福利在线播放网址导航| 久久精品国产一区二区三| 午夜精品一区二区三区免费视频 | 国产精品一区二区你懂的| 色94色欧美sute亚洲线路一ni| 欧美乱人伦中文字幕在线| 青青影院在线观看| 米奇777超碰欧美日韩亚洲| 国产精品中文字幕一区二区三区| 欧日韩精品视频| 久久久免费电影| av网站免费在线观看| 精品久久网站| 91影院在线观看| 精品欧美一区二区三区精品久久| 国产欧美一区二区白浆黑人| 日韩漫画puputoon| 免费久久99精品国产自在现线| 亚洲午夜在线视频| 久久视频在线播放| 欧美一区二区三区| 欧美日韩第一| 欧美多人乱p欧美4p久久| 免费看成年人视频在线观看| gogo大尺度成人免费视频| 丝袜美腿亚洲一区二区图片| 精品国产91久久久久久| 久久久亚洲影院| 678在线观看视频| 欧美三级免费| 亚洲最新视频在线观看| 久久影院模特热| 黄色网址在线免费| 99精品视频在线| 国产精品进线69影院| 一本色道久久综合狠狠躁篇怎么玩 | 日本福利午夜视频在线| 偷拍自拍亚洲色图| 91老师国产黑色丝袜在线| 日韩精品在线视频| 国外av在线| 日本不卡电影| 中文字幕av一区二区三区| 最近2019中文字幕在线高清| 性开放的欧美大片| 国产精品久久久久无码av| 国产精品国产自产拍高清av| 日韩中文在线视频| 污片在线免费观看| 亚洲国产日韩在线| 午夜精品福利一区二区蜜股av| 97超视频免费观看| 中文.日本.精品| 三级影片在线观看欧美日韩一区二区| 日本高清不卡视频| 国产精品视频永久免费播放| 国产一区精品二区| 成人一区在线观看| 日韩av在线免费看| 成年人在线视频| 91久久高清国语自产拍| 一区二区三区在线视频观看58| 久久久久国产精品一区| 中文字幕在线免费观看视频| 日本三级亚洲精品| 91亚洲大成网污www| 一区二区自拍| 国产精品成人在线观看| 欧美成人三级视频网站| 678在线观看视频| 日韩成人伦理电影在线观看| 欧美精品久久一区| 在线观看一级片| 国产欧美日韩| 最新日韩av在线| 性欧美长视频免费观看不卡| 成人午夜亚洲| 成人午夜免费视频| 夜夜嗨av一区二区三区免费区| 亚洲羞羞网站| 久久国产精品久久久久久电车 | 综合激情一区| 欧美特级www| 成人精品一区二区三区| 日韩av不卡一区| 综合在线观看色| 91成人在线视频| 日韩精品中文字幕一区二区| 91视频观看免费| 久久久91精品国产| 精品免费av在线| 波多野结衣91| 久久久精品一区二区| 在线成人av观看| 国产suv一区二区三区88区| 亚洲视频欧洲视频| 美女扒开腿让男人桶爽久久软| 麻豆成人在线观看| 日韩精品中文字幕在线播放| 手机在线免费看av| 日韩av不卡在线观看| 亚洲第一精品福利| 18av在线播放| 久久激五月天综合精品| 日本欧美大码aⅴ在线播放| 久久成人久久爱| 亚洲第一中文字幕在线观看| a黄色片在线观看| 日本少妇一区二区| 日韩精品福利在线| а√天堂8资源中文在线| 国产在线播精品第三| 中文字幕精品在线| 欧美一区 二区 三区| 成人av免费在线观看| 久久久久北条麻妃免费看| 日韩有码欧美| 久久久久99精品国产片| 97香蕉超级碰碰久久免费软件 | 国产精品观看在线亚洲人成网| 日韩大片在线免费观看| 亚洲国产视频直播| 欧美vide| 欧美特黄一区| 91精品国产aⅴ一区二区| 蜜桃av在线免费观看| 日韩精品电影在线| 亚洲免费成人av电影| 亚洲天堂av在线| 99视频在线观看一区三区| 欧美激情va永久在线播放| 粉嫩一区二区三区四区公司1| 亚洲老司机在线| 午夜影院免费| 午夜欧美理论片| 日韩视频国产视频| 少妇av在线| 国产成人精品免费在线| 欧美国产日本高清在线 | 日韩欧美的一区二区| 在线免费观看亚洲| 久久综合影院| 狠狠做深爱婷婷久久综合一区| 午夜男人视频在线观看| 亚洲高清激情| 亚洲精品不卡在线| 自由日本语热亚洲人| 久久久青草青青国产亚洲免观| 欧美怡春院一区二区三区| 九九精品久久| 欧美在线视频日韩| 思思99re6国产在线播放| 韩国三级大全久久网站| 国产一区二区三区精品在线观看| 欧美韩国日本不卡| 国产精品一区二区性色av| 999精品色在线播放| 91精品国产免费久久综合| av文字幕在线观看| 国产suv精品一区二区6| 午夜精品www| 欧美天天综合| 欧美绝品在线观看成人午夜影视| 在线播放免费av| av中文字幕一区| 日韩av男人的天堂| 91精品婷婷色在线观看| 日韩视频免费观看高清完整版在线观看| 波多野结衣乳巨码无在线观看| 97精品久久久久中文字幕| 国产精品69av| 韩日视频一区| 国产视频在线观看一区二区| 91视频亚洲| 欧美日韩国产激情| 日本高清在线观看wwwww色|