3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

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

windows

【转载】【FS】FATFS文件系统介绍(未完待续........2018.4.1)

發布時間:2025/4/16 windows 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转载】【FS】FATFS文件系统介绍(未完待续........2018.4.1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、這是個什么玩意

它是一個文件系統,那文件系統是個什么玩意,直接從字面意思理解,它就是個管理文件的系統,所以叫文件系統,直白吧,也可以說是文件存儲協議。但是繼續追問的話會問,怎么來管理文件呢?好,基于怎么管理文件這個問題,就會產生不同的文件系統,不同的文件系統管理的策略都有不同(這里就不展開了說了,只說fatfs,有精力的話可以多了解幾種通用的文件系統,yaffs,jffs等,或者對于嵌入式開發有限的資源可以自己編寫文件系統)。下面說下fatfs。

fatfs是開源的。可以從官網下載源碼。當前的fatfs文件系統有兩個版本,一個是標準完整的fatfs,另一個是Tiny版本,適合ram比較小的設備,部分功能被禁止。不過兩個版本都支持FAT12,FAT16和FAT32。通過宏_FS_TINY可以配置。從官網下載(http://elm-chan.org/fsw/ff/00index_e.html)下來解壓會有兩個文件夾,doc和src。doc里是關于FatFs的說明,包括特性,系統函數介紹,en是英語,ja是日語,res是資源文件夾,剩下官網主頁。src里是文件系統實現源碼。option文件夾是代碼頁表,可以不用管。剩下各個文件的功能可以參考00readme.txt。

??00readme.txt???This file.
??00history.txt??Revision history.
??ff.c???????????FatFs module.
??ffconf.h???????Configuration file of FatFs module.
??ff.h???????????Common include file for FatFs and application module.
??diskio.h???????Common include file for FatFs and disk I/O module.
??diskio.c???????An example of glue function to attach existing disk I/O module to FatFs.
??integer.h??????Integer type definitions for FatFs.
??option?????????Optional external modules.

二、有毛用啊

文件系統在整個系統中的作用非常重要。對上(對用戶或應用)可以方便的管理文件,上層可以隨意管理文件(夾)。對下(各種設備)也可以合理的管理使用設備(硬盤,SD卡,Flash等)。對于硬盤還好點可以隨意擦寫,但是對于flash的話在寫之前比如先擦,如果沒有文件系統的話,上層直接訪問操作的是物理空間,這就相當不方便了。

三、怎么用啊

所謂怎么用其實就是移植fatfs到你的系統,能夠新建,打開,讀,寫,刪出文件。fatfs的設計分層已經幫你設計好了,文件系統的實現已經和具體的硬件介質無關,只需要實現和介質相關的訪問介質的各個接口(disk_initialize,disk_read,disk_write和disk_ioctl),除此之外就是修改配置文件,主要是兩個,一個是interger.h文件,這個是文件系統所需的變量類型,和具體的處理器相關,可能會修改。另一個是ffconf.h文件,這個文件是具體配置文件系統的,根據自己的項目需求對文件系統進行裁剪。

在上面調試完成后,怎么使用fatfa就相對容易多了,主要是以下幾個接口。format,mount,open,wirte,read,close。

下圖是FAT32文件系統的結構:(FAT12、FAT16可能會有調整,這個得源碼了,下面內容參考于https://www.cnblogs.com/amanlikethis/p/3793077.html#lab5?該部分講的比較好,在此感謝)

  概念與分區功能簡述:

MBR:

  保存了磁盤的分區信息(分區的起始地址、分區大小、分區結束地址)

DBR:

  保存了當前分區的詳細參數(比如FAT表的位置、FAT表的的大小、簇大小、扇區大小、根目錄中最大目錄項數等等)

FAT表:

  以簇的形式對數據區重新劃分空間,在FAT表中建立了簇的使用情況,哪些已經被占用,哪些沒有被占用;簇鏈的結構,也即是簇與簇之間的連接關系。

目錄:

  在目錄中,存在眾多的目錄項,目錄項記錄了文件名、大小、起始地址等等。

目錄項:

  目錄中的存儲單位,記錄了每一個文件或者目錄的信息。

數據區:

  數據區中純粹的文件數據

扇區:

  SD卡最小的讀寫單位,512字節,也就是說一次最少讀取或者寫入的數據是512字節。

☆??說明

<1> 有些SD卡格式化后,并沒有MBR部分,而且SD卡格式化后磁盤上只存在一個磁盤分區。也就是說,即使SD卡上有MBR部分,在MBR的DPT(硬盤分區表)中也只有一個分區記錄。

<2> 位于數據區之前的可以稱之為文件系統管理區,此區域是以物理扇區為單位進行管理的,數據區則是以簇為單位進行管理的。

筆者認為1:

  狹義上的文件專指普通文件,目錄則是位于普通文件的上層,用于管理處在其中的文件或者目錄欄。筆者認為廣義上的文件包含”目錄和普通文件”。這樣說目錄,表示目錄實際上也是一個文件,只不過是一個管理文件信息的特殊文件。

  可以說文件與目錄既有區別,又有聯系。普通文件在文件管理的時候,給文件設計了一個管理變量—文件指針,用于指示文件當前讀取或者寫入的位置,它是以字節為單位進行計算的;而目錄其實也有一個管理讀取或者寫入的位置的變量—目錄指針,它則是以目錄項(32字節)為單位進行計算的。

筆者認為2:

  文件 = 目錄中的目錄項、FAT表、文件對應的數據區內容

<1> 查看磁盤信息就是查看DBR和FAT表

<2> 讀取文件就是查看目錄項、FAT表和文件對應的數據區內容

<3> 寫文件就是修改目錄項、FAT表、文件對應的數據區內容

(參考結束,在此感謝)上述的內容如有理解不深入,直接擼代碼。

本人用的是R0.12C版本,算是比較新的代碼了,由于代碼量還是不小,我只列部分,如有需要請郵件624801474@qq.com

1、首先來看ffconf.h文件

/*-----------------------------------------------------------------------------/
/ Function Configurations功能配置
/-----------------------------------------------------------------------------*/

#define _FS_READONLY?????????0??????/* 0 to 1?*/配置讀寫或只讀,配成只讀的話不支持一些接口如 f_write(), f_sync()等

#define _FS_MINIMIZE?????????0??????/* 0 to 3 */函數功能支持,具體定義不同的值支持的函數也不同

#define _USE_STRFUNC?????????2??????/* 0:Disable or 1-2:Enable */使能或禁止字符串函數

#define _USE_FIND????????????0??????/* 0 to 1?*/能或禁用在指定目錄內搜索指定文件函數

#define _USE_MKFS????????????1????/* 0 to 1?*/使能或禁用f_mkfs函數

#define _USE_FASTSEEK????????1/* 0 to 1?*/使能或禁用快速搜索功能

#define?_USE_EXPAND???1????/* 0 to 1?*/使能或禁用f_expand函數,該函數可以為文件分配連續數據區域

#define _USE_CHMOD??0??/* 0 to 1?*/使能或禁用元數據控制函數:f_chmod和f_utime。

#define _USE_LABEL???????????0???/* 0 to 1?*/使能或禁用卷標簽API函數:f_getlabel和f_setlabel。

#define _USE_FORWARD?????????0????/* 0 to 1?*/使能或禁用f_forward函數。

/*-----------------------------------------------------------------------------/
/ Locale and Namespace Configurations命名空間和本地環境配置
/-----------------------------------------------------------------------------*/

#define _CODE_PAGE?????????850?????規定目標系統使用的OEM代碼。如果該代碼設置的不正確,可能會引起文件打開失敗。如果沒有根本沒有使用擴展字符,則使用任何代碼都沒區別。
/???1???- ASCII (No extended character. Non-LFN cfg. only)
/???437 - U.S.
/???720 - Arabic
/???737 - Greek
/???771 - KBL
/???775 - Baltic
/???850 - Latin 1
/???852 - Latin 2
/???855 - Cyrillic
/???857 - Turkish
/???860 - Portuguese
/???861 - Icelandic
/???862 - Hebrew
/???863 - Canadian French
/???864 - Arabic
/???865 - Nordic
/???866 - Russian
/???869 - Greek 2
/???932 - Japanese (DBCS)
/???936 - Simplified Chinese (DBCS)
/???949 - Korean (DBCS)
/???950 - Traditional Chinese (DBCS)
*/

#define _USE_LFN?????0????/* 0 to 3 */??使能或禁用長文件名(LFN)
#define _MAX_LFN?????255??定義長文件名工作緩沖區大小,可以為12~255字節。當禁用長文件名時,此選項無效。

#define _LFN_UNICODE????0 /* 0:ANSI/OEM or 1:Unicode */使能或禁用Unicode

#define _STRF_ENCODE????3 /* 0 to 3 */??通過設置_LFN_UNICODE為1使能Unicode API函數時,這個選項定義通過字符串I/O函數讀寫的文件字符編碼。

#define _FS_RPATH???????0 /* 0 to 2 */配置相對路徑函數。

/*---------------------------------------------------------------------------/
/ Drive/Volume Configurations卷/驅動器配置
/----------------------------------------------------------------------------*/

#define _VOLUMES????2 配置可用卷的數目,可設置為1~10。

/* USER CODE BEGIN Volumes */??
#define _STR_VOLUME_ID??????????0?/* 0:Use only 0-9 for drive ID, 1:Use strings for drive ID */使能或禁用字符串卷標識
#define _VOLUME_STRS????????????"RAM","NAND","CF","SD1","SD2","USB1","USB2","USB3"定義每一個邏輯驅動器ID。ID數目不能少于_VOLUMES。驅動器ID有效字符只能為A-Z和0-9。

#define _MULTI_PARTITION?????0 /* 0:Single partition, 1:Multiple partition */使能或禁止多分區函數。
#define _MIN_SS????512??/* 512, 1024, 2048 or 4096 */
#define _MAX_SS????4096??/* 512, 1024, 2048 or 4096 */定義扇區大小,有效值為512、1024、2048、4096,需要根據硬件配置來定義。_MIN_SS定義最小扇區大小,_MAX_SS定義最大扇區大小。

#define?_USE_TRIM??????0 /* 0 to?1 */使能或禁用ATA-TRIM函數。

#define _FS_NOFSINFO????0 /* 0,1,2 or 3 */使能或禁用空閑簇計數和最后分配的簇計數。

/*---------------------------------------------------------------------------/
/ System Configurations系統配置
/----------------------------------------------------------------------------*/

#define _FS_TINY????1??????/* 0:Normal or 1:Tiny */配置FatFs為正常模式或者微型(TINY)模式。

#define _FS_EXFAT?0?????/* 0 to?1 */???使能或禁用exFAT文件系統。

#define _FS_NORTC?0??/* 0 to?1 */???使能或禁用時間戳函數。
#define _NORTC_MON?1
#define _NORTC_MDAY?1
#define _NORTC_YEAR?2018???如果系統沒有RTC,這些宏用來定義固定時間戳。只讀或者_FS_NORTC=0時,這些宏無意義。

#define _FS_LOCK????4?????/* 0:Disable or >=1:Enable */使能或禁用文件鎖功能。控制重復打開文件和非法打開文件對象。注意:文件鎖功能不具有可重入性。只讀模式下,這個宏必須為0。

#define _FS_REENTRANT????1/* 0:Disable or 1:Enable */使能或禁用FatFs模塊的可重入特性。
#define _FS_TIMEOUT??????1000 /* Timeout period in unit of time ticks */設置超時時間,單位為系統時鐘滴答周期,當宏_FS_REENTRANT=0時,本設置無效。
#define _SYNC_t??????????osSemaphoreId 定義同步對象類型,取決于O/S。

2、integer.h文件忽略。

3、ff.h文件系統頭文件,這個文件都是文件系統使用的各種宏定義、頭文件和函數聲明

/* Definitions of volume management */ 定義卷管理

#if _MULTI_PARTITION??/* Multiple partition configuration */
typedef struct {
?BYTE pd;?/* Physical drive number */
?BYTE pt;?/* Partition: 0:Auto detect, 1-4:Forced partition) */
} PARTITION;分區表,定義了物理設備和邏輯分區的映射關系
extern PARTITION VolToPart[];?/* Volume - Partition resolution table */
#endif

/* Type of path name strings on FatFs API */文件系統源碼中暫時沒什么用,先不用管

#if _LFN_UNICODE???/* Unicode (UTF-16) string */
#if _USE_LFN == 0
#error _LFN_UNICODE must be 0 at non-LFN cfg.
#endif
#ifndef _INC_TCHAR
typedef WCHAR TCHAR;
#define _T(x) L ## x
#define _TEXT(x) L ## x
#endif
#else??????/* ANSI/OEM string */
#ifndef _INC_TCHAR
typedef char TCHAR;
#define _T(x) x
#define _TEXT(x) x
#endif
#endif

/* Type of file size variables */文件大小變量類型

#if _FS_EXFAT
#if _USE_LFN == 0
#error LFN must be enabled when enable exFAT
#endif
typedef QWORD FSIZE_t;
#else
typedef DWORD FSIZE_t;
#endif

/* File system object structure (FATFS) */文件系統結構體(重要之一)

typedef struct {
?BYTE?fs_type;??/* File system type (0:N/A) */FAT文件系統的類型
?BYTE?drv;???/* Physical drive number */物理驅動號
?BYTE?n_fats;???/* Number of FATs (1 or 2) */FAT表數量
?BYTE?wflag;???/* win[] flag (b0:dirty) */win是否回寫標志
?BYTE?fsi_flag;??/* FSINFO flags (b7:disabled, b0:dirty) */FSINFO臟標志
?WORD?id;????/* File system mount ID */文件系統mountID
?WORD?n_rootdir;??/* Number of root directory entries (FAT12/16) */根目錄中的目錄項項數
?WORD?csize;???/* Cluster size [sectors] */簇數目
#if _MAX_SS != _MIN_SS
?WORD?ssize;???/* Sector size (512, 1024, 2048 or 4096) */扇區大小
#endif
#if _USE_LFN != 0
?WCHAR*?lfnbuf;???/* LFN working buffer */LFN工作緩沖
#endif
#if _FS_EXFAT
?BYTE*?dirbuf;???/* Directory entry block scratchpad buffer */目錄塊暫存
#endif
#if _FS_REENTRANT
?_SYNC_t?sobj;???/* Identifier of sync object */同步對象
#endif
#if !_FS_READONLY
?DWORD?last_clst;??/* Last allocated cluster */最后分配的簇
?DWORD?free_clst;??/* Number of free clusters */空閑簇的數量
#endif
#if _FS_RPATH != 0
?DWORD?cdir;???/* Current directory start cluster (0:root) */當前目錄的起始簇
#if _FS_EXFAT這三個不懂
?DWORD?cdc_scl;??/* Containing directory start cluster (invalid when cdir is 0) */
?DWORD?cdc_size;??/* b31-b8:Size of containing directory, b7-b0: Chain status */
?DWORD?cdc_ofs;??/* Offset in the containing directory (invalid when cdir is 0) */
#endif
#endif
?DWORD?n_fatent;??/* Number of FAT entries (number of clusters + 2) */
?DWORD?fsize;???/* Size of an FAT [sectors] */FAT表的大小(扇區數)
?DWORD?volbase;??/* Volume base sector */卷起始扇區
?DWORD?fatbase;??/* FAT base sector */FAT起始扇區
?DWORD?dirbase;??/* Root directory base sector/cluster */根目錄起始扇區
?DWORD?database;??/* Data base sector */數據起始扇區
?DWORD?winsect;??/* Current sector appearing in the win[] */保存在win[]中的當前扇區地址
?BYTE?win[_MAX_SS];?/* Disk access window for Directory, FAT (and file data at tiny cfg) */目錄和FAT分配表的緩沖區
} FATFS;

/* Object ID and allocation information (_FDID) */該結構體是后來的版本才有的,個人理解是在FILE和DIR中抽象出來的共同體,分配信息對象

typedef struct {
?FATFS*?fs;???/* Pointer to the owner file system object */
?WORD?id;???/* Owner file system mount ID */
?BYTE?attr;??/* Object attribute */
?BYTE?stat;??/* Object chain status (b1-0: =0:not contiguous, =2:contiguous (no data on FAT), =3:flagmented in this session, b2:sub-directory stretched) */
?DWORD?sclust;??/* Object start cluster (0:no cluster or root directory) */
?FSIZE_t?objsize;?/* Object size (valid when sclust != 0) */
#if _FS_EXFAT
?DWORD?n_cont;??/* Size of first fragment, clusters - 1 (valid when stat == 3) */
?DWORD?n_frag;??/* Size of last fragment needs to be written (valid when not zero) */
?DWORD?c_scl;??/* Containing directory start cluster (valid when sclust != 0) */
?DWORD?c_size;??/* b31-b8:Size of containing directory, b7-b0: Chain status (valid when c_scl != 0) */
?DWORD?c_ofs;??/* Offset in the containing directory (valid when sclust != 0 and non-directory object) */
#endif
#if _FS_LOCK != 0
?UINT?lockid;??/* File lock ID origin from 1 (index of file semaphore table Files[]) */
#endif
} _FDID;

/* File object structure (FIL) */

typedef struct {
?_FDID?obj;???/* Object identifier (must be the 1st member to detect invalid object pointer) */
?BYTE?flag;???/* File status flags */
?BYTE?err;???/* Abort flag (error code) */
?FSIZE_t?fptr;???/* File read/write pointer (Zeroed on file open) */
?DWORD?clust;???/* Current cluster of fpter (invalid when fptr is 0) */
?DWORD?sect;???/* Sector number appearing in buf[] (0:invalid) */
#if !_FS_READONLY
?DWORD?dir_sect;??/* Sector number containing the directory entry */
?BYTE*?dir_ptr;??/* Pointer to the directory entry in the win[] */
#endif
#if _USE_FASTSEEK
?DWORD*?cltbl;???/* Pointer to the cluster link map table (nulled on open, set by application) */
#endif
#if !_FS_TINY
?BYTE?buf[_MAX_SS];?/* File private data read/write window */
#endif
} FIL;

/* Directory object structure (DIR) */

typedef struct {
?_FDID?obj;???/* Object identifier */
?DWORD?dptr;???/* Current read/write offset */
?DWORD?clust;???/* Current cluster */
?DWORD?sect;???/* Current sector (0:Read operation has terminated) */
?BYTE*?dir;???/* Pointer to the directory item in the win[] */
?BYTE?fn[12];???/* SFN (in/out) {body[8],ext[3],status[1]} */
#if _USE_LFN != 0
?DWORD?blk_ofs;??/* Offset of current entry block being processed (0xFFFFFFFF:Invalid) */
#endif
#if _USE_FIND
?const TCHAR* pat;??/* Pointer to the name matching pattern */
#endif
} DIR;

/* File information structure (FILINFO) */

typedef struct {
?FSIZE_t?fsize;???/* File size */
?WORD?fdate;???/* Modified date */
?WORD?ftime;???/* Modified time */
?BYTE?fattrib;??/* File attribute */
#if _USE_LFN != 0
?TCHAR?altname[13];???/* Alternative file name */
?TCHAR?fname[_MAX_LFN + 1];?/* Primary file name */
#else
?TCHAR?fname[13];??/* File name */
#endif
} FILINFO;

/* File function return code (FRESULT) */

typedef enum {
?FR_OK = 0,????/* (0) Succeeded */
?FR_DISK_ERR,???/* (1) A hard error occurred in the low level disk I/O layer */
?FR_INT_ERR,????/* (2) Assertion failed */
?FR_NOT_READY,???/* (3) The physical drive cannot work */
?FR_NO_FILE,????/* (4) Could not find the file */
?FR_NO_PATH,????/* (5) Could not find the path */
?FR_INVALID_NAME,??/* (6) The path name format is invalid */
?FR_DENIED,????/* (7) Access denied due to prohibited access or directory full */
?FR_EXIST,????/* (8) Access denied due to prohibited access */
?FR_INVALID_OBJECT,??/* (9) The file/directory object is invalid */
?FR_WRITE_PROTECTED,??/* (10) The physical drive is write protected */
?FR_INVALID_DRIVE,??/* (11) The logical drive number is invalid */
?FR_NOT_ENABLED,???/* (12) The volume has no work area */
?FR_NO_FILESYSTEM,??/* (13) There is no valid FAT volume */
?FR_MKFS_ABORTED,??/* (14) The f_mkfs() aborted due to any problem */
?FR_TIMEOUT,????/* (15) Could not get a grant to access the volume within defined period */
?FR_LOCKED,????/* (16) The operation is rejected according to the file sharing policy */
?FR_NOT_ENOUGH_CORE,??/* (17) LFN working buffer could not be allocated */
?FR_TOO_MANY_OPEN_FILES,?/* (18) Number of open files > _FS_LOCK */
?FR_INVALID_PARAMETER?/* (19) Given parameter is invalid */
} FRESULT;

/*--------------------------------------------------------------*/
/* FatFs module application interface???????????????????????????*/

FRESULT f_open (FIL* fp, const TCHAR* path, BYTE mode);????/* Open or create a file */
FRESULT f_close (FIL* fp);???????????/* Close an open file object */
FRESULT f_read (FIL* fp, void* buff, UINT btr, UINT* br);???/* Read data from the file */
FRESULT f_write (FIL* fp, const void* buff, UINT btw, UINT* bw);?/* Write data to the file */
FRESULT f_lseek (FIL* fp, FSIZE_t ofs);????????/* Move file pointer of the file object */
FRESULT f_truncate (FIL* fp);??????????/* Truncate the file */
FRESULT f_sync (FIL* fp);???????????/* Flush cached data of the writing file */
FRESULT f_opendir (DIR* dp, const TCHAR* path);??????/* Open a directory */
FRESULT f_closedir (DIR* dp);??????????/* Close an open directory */
FRESULT f_readdir (DIR* dp, FILINFO* fno);???????/* Read a directory item */
FRESULT f_findfirst (DIR* dp, FILINFO* fno, const TCHAR* path, const TCHAR* pattern);?/* Find first file */
FRESULT f_findnext (DIR* dp, FILINFO* fno);???????/* Find next file */
FRESULT f_mkdir (const TCHAR* path);????????/* Create a sub directory */
FRESULT f_unlink (const TCHAR* path);????????/* Delete an existing file or directory */
FRESULT f_rename (const TCHAR* path_old, const TCHAR* path_new);?/* Rename/Move a file or directory */
FRESULT f_stat (const TCHAR* path, FILINFO* fno);?????/* Get file status */
FRESULT f_chmod (const TCHAR* path, BYTE attr, BYTE mask);???/* Change attribute of a file/dir */
FRESULT f_utime (const TCHAR* path, const FILINFO* fno);???/* Change timestamp of a file/dir */
FRESULT f_chdir (const TCHAR* path);????????/* Change current directory */
FRESULT f_chdrive (const TCHAR* path);????????/* Change current drive */
FRESULT f_getcwd (TCHAR* buff, UINT len);???????/* Get current directory */
FRESULT f_getfree (const TCHAR* path, DWORD* nclst, FATFS** fatfs);?/* Get number of free clusters on the drive */
FRESULT f_getlabel (const TCHAR* path, TCHAR* label, DWORD* vsn);?/* Get volume label */
FRESULT f_setlabel (const TCHAR* label);???????/* Set volume label */
FRESULT f_forward (FIL* fp, UINT(*func)(const BYTE*,UINT), UINT btf, UINT* bf);?/* Forward data to the stream */
FRESULT f_expand (FIL* fp, FSIZE_t szf, BYTE opt);?????/* Allocate a contiguous block to the file */
FRESULT f_mount (FATFS* fs, const TCHAR* path, BYTE opt);???/* Mount/Unmount a logical drive */
FRESULT f_mkfs (const TCHAR* path, BYTE opt, DWORD au, void* work, UINT len);?/* Create a FAT volume */
FRESULT f_fdisk (BYTE pdrv, const DWORD* szt, void* work);???/* Divide a physical drive into some partitions */
int f_putc (TCHAR c, FIL* fp);??????????/* Put a character to the file */
int f_puts (const TCHAR* str, FIL* cp);????????/* Put a string to the file */
int f_printf (FIL* fp, const TCHAR* str, ...);??????/* Put a formatted string to the file */
TCHAR* f_gets (TCHAR* buff, int len, FIL* fp);??????/* Get a string from the file */

#define f_eof(fp) ((int)((fp)->fptr == (fp)->obj.objsize))
#define f_error(fp) ((fp)->err)
#define f_tell(fp) ((fp)->fptr)
#define f_size(fp) ((fp)->obj.objsize)
#define f_rewind(fp) f_lseek((fp), 0)
#define f_rewinddir(dp) f_readdir((dp), 0)
#define f_rmdir(path) f_unlink(path)

#ifndef EOF
#define EOF (-1)
#endif

/*--------------------------------------------------------------*/
/* Additional user defined functions????????????????????????????*/

/* RTC function */
#if !_FS_READONLY && !_FS_NORTC
DWORD get_fattime (void);
#endif

/* Unicode support functions */
#if _USE_LFN != 0??????/* Unicode - OEM code conversion */
WCHAR ff_convert (WCHAR chr, UINT dir);?/* OEM-Unicode bidirectional conversion */
WCHAR ff_wtoupper (WCHAR chr);???/* Unicode upper-case conversion */
#if _USE_LFN == 3??????/* Memory functions */
void* ff_memalloc (UINT msize);???/* Allocate memory block */
void ff_memfree (void* mblock);???/* Free memory block */
#endif
#endif

/* Sync functions */
#if _FS_REENTRANT
int ff_cre_syncobj (BYTE vol, _SYNC_t* sobj);?/* Create a sync object */
int ff_req_grant (_SYNC_t sobj);????/* Lock sync object */
void ff_rel_grant (_SYNC_t sobj);????/* Unlock sync object */
int ff_del_syncobj (_SYNC_t sobj);????/* Delete a sync object */
#endif

/*--------------------------------------------------------------*/
/* Flags and offset address?????????????????????????????????????*/

/* File access mode and open method flags (3rd argument of f_open) */
#define?FA_READ????0x01
#define?FA_WRITE???0x02
#define?FA_OPEN_EXISTING?0x00
#define?FA_CREATE_NEW??0x04
#define?FA_CREATE_ALWAYS?0x08
#define?FA_OPEN_ALWAYS??0x10
#define?FA_OPEN_APPEND??0x30

/* Fast seek controls (2nd argument of f_lseek) */
#define CREATE_LINKMAP?((FSIZE_t)0 - 1)

/* Format options (2nd argument of f_mkfs) */
#define FM_FAT??0x01
#define FM_FAT32?0x02
#define FM_EXFAT?0x04
#define FM_ANY??0x07
#define FM_SFD??0x08

/* Filesystem type (FATFS.fs_type) */
#define FS_FAT12?1
#define FS_FAT16?2
#define FS_FAT32?3
#define FS_EXFAT?4

/* File attribute bits for directory entry (FILINFO.fattrib) */
#define?AM_RDO?0x01?/* Read only */
#define?AM_HID?0x02?/* Hidden */
#define?AM_SYS?0x04?/* System */
#define AM_DIR?0x10?/* Directory */
#define AM_ARC?0x20?/* Archive */

4、ff.c(部分內容)

f_mkfs函數,比較重要

/*-----------------------------------------------------------------------*/
/* Create an FAT/exFAT volume????????????????????????????????????????????*/
/*-----------------------------------------------------------------------*/

FRESULT f_mkfs (
?const TCHAR* path,?/* Logical drive number */
?BYTE opt,???/* Format option */
?DWORD au,???/* Size of allocation unit (cluster) [byte] */
?void* work,???/* Pointer to working buffer */
?UINT len???/* Size of working buffer */
)
{
?const UINT n_fats = 2;??/* Number of FATs for FAT12/16/32 volume (1 or 2) */
?const UINT n_rootdir = 512;?/* Number of root directory entries for FAT12/16 volume */
?static const WORD cst[] = {1, 4, 16, 64, 256, 512, 0};?/* Cluster size boundary for FAT12/16 volume (4Ks unit) */
?static const WORD cst32[] = {1, 2, 4, 8, 16, 32, 0};?/* Cluster size boundary for FAT32 volume (128Ks unit) */
?BYTE fmt, sys, *buf, *pte, pdrv, part;
?WORD ss;
?DWORD szb_buf, sz_buf, sz_blk, n_clst, pau, sect, nsect, n;
?DWORD b_vol, b_fat, b_data;????/* Base LBA for volume, fat, data */
?DWORD sz_vol, sz_rsv, sz_fat, sz_dir;?/* Size for volume, fat, dir, data */
?UINT i;
?int vol;
?DSTATUS stat;
#if _USE_TRIM || _FS_EXFAT
?DWORD tbl[3];
#endif


?/* Check mounted drive and clear work area */
?vol = get_ldnumber(&path);?????/* Get target logical drive */
?if (vol < 0) return FR_INVALID_DRIVE;
?if (FatFs[vol]) FatFs[vol]->fs_type = 0;?/* Clear the volume */
?pdrv = LD2PD(vol);?/* Physical drive */
?part = LD2PT(vol);?/* Partition (0:create as new, 1-4:get from partition table) */

?/* Check physical drive status */
?stat = disk_initialize(pdrv);
?if (stat & STA_NOINIT) return FR_NOT_READY;
?if (stat & STA_PROTECT) return FR_WRITE_PROTECTED;
?if (disk_ioctl(pdrv, GET_BLOCK_SIZE, &sz_blk) != RES_OK || !sz_blk || sz_blk > 32768 || (sz_blk & (sz_blk - 1))) sz_blk = 1;?/* Erase block to align data area */
#if _MAX_SS != _MIN_SS??/* Get sector size of the medium if variable sector size cfg. */
?if (disk_ioctl(pdrv, GET_SECTOR_SIZE, &ss) != RES_OK) return FR_DISK_ERR;
?if (ss > _MAX_SS || ss < _MIN_SS || (ss & (ss - 1))) return FR_DISK_ERR;
#else
?ss = _MAX_SS;
#endif
?if ((au != 0 && au < ss) || au > 0x1000000 || (au & (au - 1))) return FR_INVALID_PARAMETER;?/* Check if au is valid */
?au /= ss;?/* Cluster size in unit of sector */

?/* Get working buffer */
?buf = (BYTE*)work;??/* Working buffer */
?sz_buf = len / ss;??/* Size of working buffer (sector) */
?szb_buf = sz_buf * ss;?/* Size of working buffer (byte) */
?if (!szb_buf) return FR_MKFS_ABORTED;

?/* Determine where the volume to be located (b_vol, sz_vol) */
?if (_MULTI_PARTITION && part != 0) {
??/* Get partition information from partition table in the MBR */
??if (disk_read(pdrv, buf, 0, 1) != RES_OK) return FR_DISK_ERR;?/* Load MBR */
??if (ld_word(buf + BS_55AA) != 0xAA55) return FR_MKFS_ABORTED;?/* Check if MBR is valid */
??pte = buf + (MBR_Table + (part - 1) * SZ_PTE);
??if (!pte[PTE_System]) return FR_MKFS_ABORTED;?/* No partition? */
??b_vol = ld_dword(pte + PTE_StLba);??/* Get volume start sector */
??sz_vol = ld_dword(pte + PTE_SizLba);?/* Get volume size */
?} else {
??/* Create a single-partition in this function */
??if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_vol) != RES_OK) return FR_DISK_ERR;
??b_vol = (opt & FM_SFD) ? 0 : 63;??/* Volume start sector */
??if (sz_vol < b_vol) return FR_MKFS_ABORTED;
??sz_vol -= b_vol;??????/* Volume size */
?}
?if (sz_vol < 128) return FR_MKFS_ABORTED;?/* Check if volume size is >=128s */

?/* Pre-determine the FAT type */
?do {
??if (_FS_EXFAT && (opt & FM_EXFAT)) {?/* exFAT possible? */
???if ((opt & FM_ANY) == FM_EXFAT || sz_vol >= 0x4000000 || au > 128) {?/* exFAT only, vol >= 64Ms or au > 128s ? */
????fmt = FS_EXFAT; break;
???}
??}
??if (au > 128) return FR_INVALID_PARAMETER;?/* Too large au for FAT/FAT32 */
??if (opt & FM_FAT32) {?/* FAT32 possible? */
???if ((opt & FM_ANY) == FM_FAT32 || !(opt & FM_FAT)) {?/* FAT32 only or no-FAT? */
????fmt = FS_FAT32; break;
???}
??}
??if (!(opt & FM_FAT)) return FR_INVALID_PARAMETER;?/* no-FAT? */
??fmt = FS_FAT16;
?} while (0);

#if _FS_EXFAT
?if (fmt == FS_EXFAT) {?/* Create an exFAT volume */
??DWORD szb_bit, szb_case, sum, nb, cl;
??WCHAR ch, si;
??UINT j, st;
??BYTE b;

??if (sz_vol < 0x1000) return FR_MKFS_ABORTED;?/* Too small volume? */
#if _USE_TRIM
??tbl[0] = b_vol; tbl[1] = b_vol + sz_vol - 1;?/* Inform the device the volume area may be erased */
??disk_ioctl(pdrv, CTRL_TRIM, tbl);
#endif
??/* Determine FAT location, data location and number of clusters */
??if (!au) {?/* au auto-selection */
???au = 8;
???if (sz_vol >= 0x80000) au = 64;??/* >= 512Ks */
???if (sz_vol >= 0x4000000) au = 256;?/* >= 64Ms */
??}
??b_fat = b_vol + 32;??????????/* FAT start at offset 32 */
??sz_fat = ((sz_vol / au + 2) * 4 + ss - 1) / ss;???/* Number of FAT sectors */
??b_data = (b_fat + sz_fat + sz_blk - 1) & ~(sz_blk - 1);?/* Align data area to the erase block boundary */
??if (b_data >= sz_vol / 2) return FR_MKFS_ABORTED;??/* Too small volume? */
??n_clst = (sz_vol - (b_data - b_vol)) / au;????/* Number of clusters */
??if (n_clst <16) return FR_MKFS_ABORTED;?????/* Too few clusters? */
??if (n_clst > MAX_EXFAT) return FR_MKFS_ABORTED;???/* Too many clusters? */

??szb_bit = (n_clst + 7) / 8;??????/* Size of allocation bitmap */
??tbl[0] = (szb_bit + au * ss - 1) / (au * ss);?/* Number of allocation bitmap clusters */

??/* Create a compressed up-case table */
??sect = b_data + au * tbl[0];?/* Table start sector */
??sum = 0;??????/* Table checksum to be stored in the 82 entry */
??st = si = i = j = szb_case = 0;
??do {
???switch (st) {
???case 0:
????ch = ff_wtoupper(si);?/* Get an up-case char */
????if (ch != si) {
?????si++; break;??/* Store the up-case char if exist */
????}
????for (j = 1; (WCHAR)(si + j) && (WCHAR)(si + j) == ff_wtoupper((WCHAR)(si + j)); j++) ;?/* Get run length of no-case block */
????if (j >= 128) {
?????ch = 0xFFFF; st = 2; break;?/* Compress the no-case block if run is >= 128 */
????}
????st = 1;???/* Do not compress short run */
????/* go to next case */
???case 1:
????ch = si++;??/* Fill the short run */
????if (--j == 0) st = 0;
????break;

???default:
????ch = (WCHAR)j; si += j;?/* Number of chars to skip */
????st = 0;
???}
???sum = xsum32(buf[i + 0] = (BYTE)ch, sum);??/* Put it into the write buffer */
???sum = xsum32(buf[i + 1] = (BYTE)(ch >> 8), sum);
???i += 2; szb_case += 2;
???if (!si || i == szb_buf) {??/* Write buffered data when buffer full or end of process */
????n = (i + ss - 1) / ss;
????if (disk_write(pdrv, buf, sect, n) != RES_OK) return FR_DISK_ERR;
????sect += n; i = 0;
???}
??} while (si);
??tbl[1] = (szb_case + au * ss - 1) / (au * ss);?/* Number of up-case table clusters */
??tbl[2] = 1;??????????/* Number of root dir clusters */

??/* Initialize the allocation bitmap */
??sect = b_data; nsect = (szb_bit + ss - 1) / ss;?/* Start of bitmap and number of sectors */
??nb = tbl[0] + tbl[1] + tbl[2];?????/* Number of clusters in-use by system */
??do {
???mem_set(buf, 0, szb_buf);
???for (i = 0; nb >= 8 && i < szb_buf; buf[i++] = 0xFF, nb -= 8) ;
???for (b = 1; nb && i < szb_buf; buf[i] |= b, b <<= 1, nb--) ;
???n = (nsect > sz_buf) ? sz_buf : nsect;??/* Write the buffered data */
???if (disk_write(pdrv, buf, sect, n) != RES_OK) return FR_DISK_ERR;
???sect += n; nsect -= n;
??} while (nsect);

??/* Initialize the FAT */
??sect = b_fat; nsect = sz_fat;?/* Start of FAT and number of FAT sectors */
??j = nb = cl = 0;
??do {
???mem_set(buf, 0, szb_buf); i = 0;?/* Clear work area and reset write index */
???if (cl == 0) {?/* Set entry 0 and 1 */
????st_dword(buf + i, 0xFFFFFFF8); i += 4; cl++;
????st_dword(buf + i, 0xFFFFFFFF); i += 4; cl++;
???}
???do {???/* Create chains of bitmap, up-case and root dir */
????while (nb && i < szb_buf) {???/* Create a chain */
?????st_dword(buf + i, (nb > 1) ? cl + 1 : 0xFFFFFFFF);
?????i += 4; cl++; nb--;
????}
????if (!nb && j < 3) nb = tbl[j++];?/* Next chain */
???} while (nb && i < szb_buf);
???n = (nsect > sz_buf) ? sz_buf : nsect;?/* Write the buffered data */
???if (disk_write(pdrv, buf, sect, n) != RES_OK) return FR_DISK_ERR;
???sect += n; nsect -= n;
??} while (nsect);

??/* Initialize the root directory */
??mem_set(buf, 0, szb_buf);
??buf[SZDIRE * 0 + 0] = 0x83;??/* 83 entry (volume label) */
??buf[SZDIRE * 1 + 0] = 0x81;??/* 81 entry (allocation bitmap) */
??st_dword(buf + SZDIRE * 1 + 20, 2);
??st_dword(buf + SZDIRE * 1 + 24, szb_bit);
??buf[SZDIRE * 2 + 0] = 0x82;??/* 82 entry (up-case table) */
??st_dword(buf + SZDIRE * 2 + 4, sum);
??st_dword(buf + SZDIRE * 2 + 20, 2 + tbl[0]);
??st_dword(buf + SZDIRE * 2 + 24, szb_case);
??sect = b_data + au * (tbl[0] + tbl[1]);?nsect = au;?/* Start of the root directory and number of sectors */
??do {?/* Fill root directory sectors */
???n = (nsect > sz_buf) ? sz_buf : nsect;
???if (disk_write(pdrv, buf, sect, n) != RES_OK) return FR_DISK_ERR;
???mem_set(buf, 0, ss);
???sect += n; nsect -= n;
??} while (nsect);

??/* Create two set of the exFAT VBR blocks */
??sect = b_vol;
??for (n = 0; n < 2; n++) {
???/* Main record (+0) */
???mem_set(buf, 0, ss);
???mem_cpy(buf + BS_JmpBoot, "\xEB\x76\x90" "EXFAT???", 11);?/* Boot jump code (x86), OEM name */
???st_dword(buf + BPB_VolOfsEx, b_vol);?????/* Volume offset in the physical drive [sector] */
???st_dword(buf + BPB_TotSecEx, sz_vol);?????/* Volume size [sector] */
???st_dword(buf + BPB_FatOfsEx, b_fat - b_vol);???/* FAT offset [sector] */
???st_dword(buf + BPB_FatSzEx, sz_fat);?????/* FAT size [sector] */
???st_dword(buf + BPB_DataOfsEx, b_data - b_vol);???/* Data offset [sector] */
???st_dword(buf + BPB_NumClusEx, n_clst);?????/* Number of clusters */
???st_dword(buf + BPB_RootClusEx, 2 + tbl[0] + tbl[1]);?/* Root dir cluster # */
???st_dword(buf + BPB_VolIDEx, GET_FATTIME());????/* VSN */
???st_word(buf + BPB_FSVerEx, 0x100);??????/* File system version (1.00) */
???for (buf[BPB_BytsPerSecEx] = 0, i = ss; i >>= 1; buf[BPB_BytsPerSecEx]++) ;?/* Log2 of sector size [byte] */
???for (buf[BPB_SecPerClusEx] = 0, i = au; i >>= 1; buf[BPB_SecPerClusEx]++) ;?/* Log2 of cluster size [sector] */
???buf[BPB_NumFATsEx] = 1;?????/* Number of FATs */
???buf[BPB_DrvNumEx] = 0x80;????/* Drive number (for int13) */
???st_word(buf + BS_BootCodeEx, 0xFEEB);?/* Boot code (x86) */
???st_word(buf + BS_55AA, 0xAA55);???/* Signature (placed here regardless of sector size) */
???for (i = sum = 0; i < ss; i++) {??/* VBR checksum */
????if (i != BPB_VolFlagEx && i != BPB_VolFlagEx + 1 && i != BPB_PercInUseEx) sum = xsum32(buf[i], sum);
???}
???if (disk_write(pdrv, buf, sect++, 1) != RES_OK) return FR_DISK_ERR;
???/* Extended bootstrap record (+1..+8) */
???mem_set(buf, 0, ss);
???st_word(buf + ss - 2, 0xAA55);?/* Signature (placed at end of sector) */
???for (j = 1; j < 9; j++) {
????for (i = 0; i < ss; sum = xsum32(buf[i++], sum)) ;?/* VBR checksum */
????if (disk_write(pdrv, buf, sect++, 1) != RES_OK) return FR_DISK_ERR;
???}
???/* OEM/Reserved record (+9..+10) */
???mem_set(buf, 0, ss);
???for ( ; j < 11; j++) {
????for (i = 0; i < ss; sum = xsum32(buf[i++], sum)) ;?/* VBR checksum */
????if (disk_write(pdrv, buf, sect++, 1) != RES_OK) return FR_DISK_ERR;
???}
???/* Sum record (+11) */
???for (i = 0; i < ss; i += 4) st_dword(buf + i, sum);??/* Fill with checksum value */
???if (disk_write(pdrv, buf, sect++, 1) != RES_OK) return FR_DISK_ERR;
??}

?} else
#endif?/* _FS_EXFAT */
?{?/* Create an FAT12/16/32 volume */
??do {
???pau = au;
???/* Pre-determine number of clusters and FAT sub-type */
???if (fmt == FS_FAT32) {?/* FAT32 volume */
????if (!pau) {?/* au auto-selection */
?????n = sz_vol / 0x20000;?/* Volume size in unit of 128KS */
?????for (i = 0, pau = 1; cst32[i] && cst32[i] <= n; i++, pau <<= 1) ;?/* Get from table */
????}
????n_clst = sz_vol / pau;?/* Number of clusters */
????sz_fat = (n_clst * 4 + 8 + ss - 1) / ss;?/* FAT size [sector] */
????sz_rsv = 32;?/* Number of reserved sectors */
????sz_dir = 0;??/* No static directory */
????if (n_clst <= MAX_FAT16 || n_clst > MAX_FAT32) return FR_MKFS_ABORTED;
???} else {????/* FAT12/16 volume */
????if (!pau) {?/* au auto-selection */
?????n = sz_vol / 0x1000;?/* Volume size in unit of 4KS */
?????for (i = 0, pau = 1; cst[i] && cst[i] <= n; i++, pau <<= 1) ;?/* Get from table */
????}
????n_clst = sz_vol / pau;
????if (n_clst > MAX_FAT12) {
?????n = n_clst * 2 + 4;??/* FAT size [byte] */
????} else {
?????fmt = FS_FAT12;
?????n = (n_clst * 3 + 1) / 2 + 3;?/* FAT size [byte] */
????}
????sz_fat = (n + ss - 1) / ss;??/* FAT size [sector] */
????sz_rsv = 1;??????/* Number of reserved sectors */
????sz_dir = (DWORD)n_rootdir * SZDIRE / ss;?/* Rootdir size [sector] */
???}
???b_fat = b_vol + sz_rsv;??????/* FAT base */
???b_data = b_fat + sz_fat * n_fats + sz_dir;?/* Data base */

???/* Align data base to erase block boundary (for flash memory media) */
???n = ((b_data + sz_blk - 1) & ~(sz_blk - 1)) - b_data;?/* Next nearest erase block from current data base */
???if (fmt == FS_FAT32) {??/* FAT32: Move FAT base */
????sz_rsv += n; b_fat += n;
???} else {?????/* FAT12/16: Expand FAT size */
????sz_fat += n / n_fats;
???}

???/* Determine number of clusters and final check of validity of the FAT sub-type */
???if (sz_vol < b_data + pau * 16 - b_vol) return FR_MKFS_ABORTED;?/* Too small volume */
???n_clst = (sz_vol - sz_rsv - sz_fat * n_fats - sz_dir) / pau;
???if (fmt == FS_FAT32) {
????if (n_clst <= MAX_FAT16) {?/* Too few clusters for FAT32 */
?????if (!au && (au = pau / 2) != 0) continue;?/* Adjust cluster size and retry */
?????return FR_MKFS_ABORTED;
????}
???}
???if (fmt == FS_FAT16) {
????if (n_clst > MAX_FAT16) {?/* Too many clusters for FAT16 */
?????if (!au && (pau * 2) <= 64) {
??????au = pau * 2; continue;??/* Adjust cluster size and retry */
?????}
?????if ((opt & FM_FAT32)) {
??????fmt = FS_FAT32; continue;?/* Switch type to FAT32 and retry */
?????}
?????if (!au && (au = pau * 2) <= 128) continue;?/* Adjust cluster size and retry */
?????return FR_MKFS_ABORTED;
????}
????if??(n_clst <= MAX_FAT12) {?/* Too few clusters for FAT16 */
?????if (!au && (au = pau * 2) <= 128) continue;?/* Adjust cluster size and retry */
?????return FR_MKFS_ABORTED;
????}
???}
???if (fmt == FS_FAT12 && n_clst > MAX_FAT12) return FR_MKFS_ABORTED;?/* Too many clusters for FAT12 */

???/* Ok, it is the valid cluster configuration */
???break;
??} while (1);

#if _USE_TRIM
??tbl[0] = b_vol; tbl[1] = b_vol + sz_vol - 1;?/* Inform the device the volume area can be erased */
??disk_ioctl(pdrv, CTRL_TRIM, tbl);
#endif
??/* Create FAT VBR */
??mem_set(buf, 0, ss);
??mem_cpy(buf + BS_JmpBoot, "\xEB\xFE\x90" "MSDOS5.0", 11);/* Boot jump code (x86), OEM name */
??st_word(buf + BPB_BytsPerSec, ss);????/* Sector size [byte] */
??buf[BPB_SecPerClus] = (BYTE)pau;????/* Cluster size [sector] */
??st_word(buf + BPB_RsvdSecCnt, (WORD)sz_rsv);?/* Size of reserved area */
??buf[BPB_NumFATs] = (BYTE)n_fats;????/* Number of FATs */
??st_word(buf + BPB_RootEntCnt, (WORD)((fmt == FS_FAT32) ? 0 : n_rootdir));?/* Number of root directory entries */
??if (sz_vol < 0x10000) {
???st_word(buf + BPB_TotSec16, (WORD)sz_vol);?/* Volume size in 16-bit LBA */
??} else {
???st_dword(buf + BPB_TotSec32, sz_vol);??/* Volume size in 32-bit LBA */
??}
??buf[BPB_Media] = 0xF8;???????/* Media descriptor byte */
??st_word(buf + BPB_SecPerTrk, 63);????/* Number of sectors per track (for int13) */
??st_word(buf + BPB_NumHeads, 255);????/* Number of heads (for int13) */
??st_dword(buf + BPB_HiddSec, b_vol);????/* Volume offset in the physical drive [sector] */
??if (fmt == FS_FAT32) {
???st_dword(buf + BS_VolID32, GET_FATTIME());?/* VSN */
???st_dword(buf + BPB_FATSz32, sz_fat);??/* FAT size [sector] */
???st_dword(buf + BPB_RootClus32, 2);???/* Root directory cluster # (2) */
???st_word(buf + BPB_FSInfo32, 1);????/* Offset of FSINFO sector (VBR + 1) */
???st_word(buf + BPB_BkBootSec32, 6);???/* Offset of backup VBR (VBR + 6) */
???buf[BS_DrvNum32] = 0x80;?????/* Drive number (for int13) */
???buf[BS_BootSig32] = 0x29;?????/* Extended boot signature */
???mem_cpy(buf + BS_VolLab32, "NO NAME????" "FAT32???", 19);?/* Volume label, FAT signature */
??} else {
???st_dword(buf + BS_VolID, GET_FATTIME());?/* VSN */
???st_word(buf + BPB_FATSz16, (WORD)sz_fat);?/* FAT size [sector] */
???buf[BS_DrvNum] = 0x80;??????/* Drive number (for int13) */
???buf[BS_BootSig] = 0x29;??????/* Extended boot signature */
???mem_cpy(buf + BS_VolLab, "NO NAME????" "FAT?????", 19);?/* Volume label, FAT signature */
??}
??st_word(buf + BS_55AA, 0xAA55);?????/* Signature (offset is fixed here regardless of sector size) */
??if (disk_write(pdrv, buf, b_vol, 1) != RES_OK) return FR_DISK_ERR;?/* Write it to the VBR sector */

??/* Create FSINFO record if needed */
??if (fmt == FS_FAT32) {
???disk_write(pdrv, buf, b_vol + 6, 1);??/* Write backup VBR (VBR + 6) */
???mem_set(buf, 0, ss);
???st_dword(buf + FSI_LeadSig, 0x41615252);
???st_dword(buf + FSI_StrucSig, 0x61417272);
???st_dword(buf + FSI_Free_Count, n_clst - 1);?/* Number of free clusters */
???st_dword(buf + FSI_Nxt_Free, 2);???/* Last allocated cluster# */
???st_word(buf + BS_55AA, 0xAA55);
???disk_write(pdrv, buf, b_vol + 7, 1);??/* Write backup FSINFO (VBR + 7) */
???disk_write(pdrv, buf, b_vol + 1, 1);??/* Write original FSINFO (VBR + 1) */
??}

??/* Initialize FAT area */
??mem_set(buf, 0, (UINT)szb_buf);
??sect = b_fat;??/* FAT start sector */
??for (i = 0; i < n_fats; i++) {???/* Initialize FATs each */
???if (fmt == FS_FAT32) {
????st_dword(buf + 0, 0xFFFFFFF8);?/* Entry 0 */
????st_dword(buf + 4, 0xFFFFFFFF);?/* Entry 1 */
????st_dword(buf + 8, 0x0FFFFFFF);?/* Entry 2 (root directory) */
???} else {
????st_dword(buf + 0, (fmt == FS_FAT12) ? 0xFFFFF8 : 0xFFFFFFF8);?/* Entry 0 and 1 */
???}
???nsect = sz_fat;??/* Number of FAT sectors */
???do {?/* Fill FAT sectors */
????n = (nsect > sz_buf) ? sz_buf : nsect;
????if (disk_write(pdrv, buf, sect, (UINT)n) != RES_OK) return FR_DISK_ERR;
????mem_set(buf, 0, ss);
????sect += n; nsect -= n;
???} while (nsect);
??}

??/* Initialize root directory (fill with zero) */
??nsect = (fmt == FS_FAT32) ? pau : sz_dir;?/* Number of root directory sectors */
??do {
???n = (nsect > sz_buf) ? sz_buf : nsect;
???if (disk_write(pdrv, buf, sect, (UINT)n) != RES_OK) return FR_DISK_ERR;
???sect += n; nsect -= n;
??} while (nsect);
?}

?/* Determine system ID in the partition table */
?if (_FS_EXFAT && fmt == FS_EXFAT) {
??sys = 0x07;???/* HPFS/NTFS/exFAT */
?} else {
??if (fmt == FS_FAT32) {
???sys = 0x0C;??/* FAT32X */
??} else {
???if (sz_vol >= 0x10000) {
????sys = 0x06;?/* FAT12/16 (>=64KS) */
???} else {
????sys = (fmt == FS_FAT16) ? 0x04 : 0x01;?/* FAT16 (<64KS) : FAT12 (<64KS) */
???}
??}
?}

?/* Update partition information */
?if (_MULTI_PARTITION && part != 0) {?/* Created in the existing partition */
??/* Update system ID in the partition table */
??if (disk_read(pdrv, buf, 0, 1) != RES_OK) return FR_DISK_ERR;?/* Read the MBR */
??buf[MBR_Table + (part - 1) * SZ_PTE + PTE_System] = sys;??/* Set system ID */
??if (disk_write(pdrv, buf, 0, 1) != RES_OK) return FR_DISK_ERR;?/* Write it back to the MBR */
?} else {????????/* Created as a new single partition */
??if (!(opt & FM_SFD)) {?/* Create partition table if in FDISK format */
???mem_set(buf, 0, ss);
???st_word(buf + BS_55AA, 0xAA55);??/* MBR signature */
???pte = buf + MBR_Table;????/* Create partition table for single partition in the drive */
???pte[PTE_Boot] = 0;?????/* Boot indicator */
???pte[PTE_StHead] = 1;????/* Start head */
???pte[PTE_StSec] = 1;?????/* Start sector */
???pte[PTE_StCyl] = 0;?????/* Start cylinder */
???pte[PTE_System] = sys;????/* System type */
???n = (b_vol + sz_vol) / (63 * 255);?/* (End CHS may be invalid) */
???pte[PTE_EdHead] = 254;????/* End head */
???pte[PTE_EdSec] = (BYTE)(n >> 2 | 63);?/* End sector */
???pte[PTE_EdCyl] = (BYTE)n;???/* End cylinder */
???st_dword(pte + PTE_StLba, b_vol);?/* Start offset in LBA */
???st_dword(pte + PTE_SizLba, sz_vol);?/* Size in sectors */
???if (disk_write(pdrv, buf, 0, 1) != RES_OK) return FR_DISK_ERR;?/* Write it to the MBR */
??}
?}

?if (disk_ioctl(pdrv, CTRL_SYNC, 0) != RES_OK) return FR_DISK_ERR;

?return FR_OK;
}

f_mount函數

/*---------------------------------------------------------------------------

???Public Functions (FatFs API)

----------------------------------------------------------------------------*/

/*-----------------------------------------------------------------------*/
/* Mount/Unmount a Logical Drive?????????????????????????????????????????*/
/*-----------------------------------------------------------------------*/

FRESULT f_mount (
?FATFS* fs,???/* Pointer to the file system object (NULL:unmount)*/
?const TCHAR* path,?/* Logical drive number to be mounted/unmounted */
?BYTE opt???/* Mode option 0:Do not mount (delayed mount), 1:Mount immediately */
)
{
?FATFS *cfs;
?int vol;
?FRESULT res;
?const TCHAR *rp = path;


?/* Get logical drive number */
?vol = get_ldnumber(&rp);
?if (vol < 0) return FR_INVALID_DRIVE;
?cfs = FatFs[vol];?????/* Pointer to fs object */

?if (cfs) {
#if _FS_LOCK != 0
??clear_lock(cfs);
#endif
#if _FS_REENTRANT??????/* Discard sync object of the current volume */
??if (!ff_del_syncobj(cfs->sobj)) return FR_INT_ERR;
#endif
??cfs->fs_type = 0;????/* Clear old fs object */
?}

?if (fs) {
??fs->fs_type = 0;????/* Clear new fs object */
#if _FS_REENTRANT??????/* Create sync object for the new volume */
??if (!ff_cre_syncobj((BYTE)vol, &fs->sobj)) return FR_INT_ERR;
#endif
?}
?FatFs[vol] = fs;?????/* Register new fs object */

?if (!fs || opt != 1) return FR_OK;?/* Do not mount now, it will be mounted later */

?res = find_volume(&path, &fs, 0);?/* Force mounted the volume */
?LEAVE_FF(fs, res);
}
這里面最重要的find_volume函數就不粘貼了,太多了……

5、diskio.h

#define _USE_WRITE?1?/* 1: Enable disk_write function */
#define _USE_IOCTL?1?/* 1: Enable disk_ioctl function */

#include "integer.h"


/* Status of Disk Functions */
typedef BYTE?DSTATUS;

/* Results of Disk Functions */
typedef enum {
?RES_OK = 0,??/* 0: Successful */
?RES_ERROR,??/* 1: R/W Error */
?RES_WRPRT,??/* 2: Write Protected */
?RES_NOTRDY,??/* 3: Not Ready */
?RES_PARERR??/* 4: Invalid Parameter */
} DRESULT;


/*---------------------------------------*/
/* Prototypes for disk control functions */


DSTATUS disk_initialize (BYTE pdrv);
DSTATUS disk_status (BYTE pdrv);
DRESULT disk_read (BYTE pdrv, BYTE* buff, DWORD sector, UINT count);
DRESULT disk_write (BYTE pdrv, const BYTE* buff, DWORD sector, UINT count);
DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);
DWORD get_fattime (void);

/* Disk Status Bits (DSTATUS) */

#define STA_NOINIT??0x01?/* Drive not initialized */
#define STA_NODISK??0x02?/* No medium in the drive */
#define STA_PROTECT??0x04?/* Write protected */


/* Command code for disk_ioctrl fucntion */

/* Generic command (Used by FatFs) */
#define CTRL_SYNC??0?/* Complete pending write process (needed at _FS_READONLY == 0) */
#define GET_SECTOR_COUNT?1?/* Get media size (needed at _USE_MKFS == 1) */
#define GET_SECTOR_SIZE??2?/* Get sector size (needed at _MAX_SS != _MIN_SS) */
#define GET_BLOCK_SIZE??3?/* Get erase block size (needed at _USE_MKFS == 1) */
#define CTRL_TRIM??4?/* Inform device that the data on the block of sectors is no longer used (needed at _USE_TRIM == 1) */

/* Generic command (Not used by FatFs) */
#define CTRL_POWER???5?/* Get/Set power status */
#define CTRL_LOCK???6?/* Lock/Unlock media removal */
#define CTRL_EJECT???7?/* Eject media */
#define CTRL_FORMAT???8?/* Create physical format on the media */

/* MMC/SDC specific ioctl command */
#define MMC_GET_TYPE??10?/* Get card type */
#define MMC_GET_CSD???11?/* Get CSD */
#define MMC_GET_CID???12?/* Get CID */
#define MMC_GET_OCR???13?/* Get OCR */
#define MMC_GET_SDSTAT??14?/* Get SD status */

/* ATA/CF specific ioctl command */
#define ATA_GET_REV???20?/* Get F/W revision */
#define ATA_GET_MODEL??21?/* Get model name */
#define ATA_GET_SN???22?/* Get serial number */

6、diskio.c文件

DSTATUS disk_status (
?BYTE pdrv??/* Physical drive number to identify the drive */
)
{
??DSTATUS stat;

??stat = disk.drv[pdrv]->disk_status(disk.lun[pdrv]);
??return stat;
}

/**
??* @brief??Initializes a Drive
??* @param??pdrv: Physical drive number (0..)
??* @retval DSTATUS: Operation status
??*/
DSTATUS disk_initialize (
?BYTE pdrv????/* Physical drive nmuber to identify the drive */
)
{
??DSTATUS stat = RES_OK;

??if(disk.is_initialized[pdrv] == 0)
??{
????disk.is_initialized[pdrv] = 1;
????stat = disk.drv[pdrv]->disk_initialize(disk.lun[pdrv]);
??}
??return stat;
}

/**
??* @brief??Reads Sector(s)
??* @param??pdrv: Physical drive number (0..)
??* @param??*buff: Data buffer to store read data
??* @param??sector: Sector address (LBA)
??* @param??count: Number of sectors to read (1..128)
??* @retval DRESULT: Operation result
??*/
DRESULT disk_read (
?BYTE pdrv,??/* Physical drive nmuber to identify the drive */
?BYTE *buff,??/* Data buffer to store read data */
?DWORD sector,?????????/* Sector address in LBA */
?UINT count??/* Number of sectors to read */
)
{
??DRESULT res;

??res = disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count);
??return res;
}

/**
??* @brief??Writes Sector(s)
??* @param??pdrv: Physical drive number (0..)
??* @param??*buff: Data to be written
??* @param??sector: Sector address (LBA)
??* @param??count: Number of sectors to write (1..128)
??* @retval DRESULT: Operation result
??*/
#if _USE_WRITE == 1
DRESULT disk_write (
?BYTE pdrv,??/* Physical drive nmuber to identify the drive */
?const BYTE *buff,?/* Data to be written */
?DWORD sector,??/* Sector address in LBA */
?UINT count?????????/* Number of sectors to write */
)
{
??DRESULT res;

??res = disk.drv[pdrv]->disk_write(disk.lun[pdrv], buff, sector, count);
??return res;
}
#endif /* _USE_WRITE == 1 */

/**
??* @brief??I/O control operation
??* @param??pdrv: Physical drive number (0..)
??* @param??cmd: Control code
??* @param??*buff: Buffer to send/receive control data
??* @retval DRESULT: Operation result
??*/
#if _USE_IOCTL == 1
DRESULT disk_ioctl (
?BYTE pdrv,??/* Physical drive nmuber (0..) */
?BYTE cmd,??/* Control code */
?void *buff??/* Buffer to send/receive control data */
)
{
??DRESULT res;

??res = disk.drv[pdrv]->disk_ioctl(disk.lun[pdrv], cmd, buff);
??return res;
}
#endif /* _USE_IOCTL == 1 */

/**
??* @brief??Gets Time from RTC
??* @param??None
??* @retval Time in DWORD
??*/
__weak DWORD get_fattime (void)
{
??return 0;
}

上面就是整個文件系統我的理解添加的注釋

1. FatFs中有兩個重要的緩沖區:win[]和buffer。win[]在FATFS結構體中,buffer在FIL結構體中。

????win[]:系統緩沖區。當操作MBR,DBR,FAT表,根目錄區時,使用該緩沖區;

????buffer:文件緩沖區。當對文件的內容進行操作時,如讀、寫、修改時,才使用該緩沖區。

2. 在對文件的f_read和f_write過程中(不考慮f_lseek的情況),只有需要讀寫的最后一個扇區(內容小于512字節)才會被暫存到buffer中,而前面的扇區內容是直接通過磁盤驅動disk_read/disk_write在用戶緩沖區和物理磁盤之間進行交互的。
---------------------?
作者:m0_37580896?
來源:CSDN?
原文:https://blog.csdn.net/m0_37580896/article/details/79753135?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

總結

以上是生活随笔為你收集整理的【转载】【FS】FATFS文件系统介绍(未完待续........2018.4.1)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

无码人妻黑人中文字幕 | 人妻少妇精品视频专区 | 欧美老熟妇乱xxxxx | 日本成熟视频免费视频 | 亚洲精品中文字幕久久久久 | 中文字幕无码av波多野吉衣 | 国产福利视频一区二区 | 亚洲欧洲日本无在线码 | 无码任你躁久久久久久久 | 欧美喷潮久久久xxxxx | 色欲久久久天天天综合网精品 | 性欧美疯狂xxxxbbbb | 色综合视频一区二区三区 | 在线成人www免费观看视频 | 成人精品一区二区三区中文字幕 | 人人妻在人人 | 久久综合九色综合欧美狠狠 | 国产成人精品必看 | 中文字幕精品av一区二区五区 | 少妇高潮一区二区三区99 | 亚洲欧美综合区丁香五月小说 | 成人性做爰aaa片免费看 | 97久久精品无码一区二区 | 熟妇人妻无乱码中文字幕 | 少妇激情av一区二区 | 啦啦啦www在线观看免费视频 | 久久国产36精品色熟妇 | 久久zyz资源站无码中文动漫 | 国产特级毛片aaaaaa高潮流水 | 精品日本一区二区三区在线观看 | 久久国产精品精品国产色婷婷 | 婷婷丁香五月天综合东京热 | 欧美国产日产一区二区 | 乱码午夜-极国产极内射 | 中文字幕av无码一区二区三区电影 | 国产精品美女久久久久av爽李琼 | 内射巨臀欧美在线视频 | 少妇被黑人到高潮喷出白浆 | 99久久99久久免费精品蜜桃 | 亚洲熟女一区二区三区 | 国产av一区二区三区最新精品 | 秋霞特色aa大片 | 在线播放无码字幕亚洲 | 无码人妻丰满熟妇区五十路百度 | 性色欲网站人妻丰满中文久久不卡 | 丰满少妇熟乱xxxxx视频 | 久久亚洲精品中文字幕无男同 | 久久亚洲精品中文字幕无男同 | 国产一区二区不卡老阿姨 | 丰满诱人的人妻3 | 国产人成高清在线视频99最全资源 | 欧美日韩在线亚洲综合国产人 | 欧美喷潮久久久xxxxx | 377p欧洲日本亚洲大胆 | 东京热男人av天堂 | 自拍偷自拍亚洲精品被多人伦好爽 | 乌克兰少妇xxxx做受 | 无码国模国产在线观看 | 久久久中文久久久无码 | 日本xxxx色视频在线观看免费 | 人妻aⅴ无码一区二区三区 | 无遮挡啪啪摇乳动态图 | 2020最新国产自产精品 | 精品国产乱码久久久久乱码 | 人妻插b视频一区二区三区 | 又色又爽又黄的美女裸体网站 | 欧美日韩久久久精品a片 | 欧美性生交活xxxxxdddd | 欧美精品一区二区精品久久 | 少妇被粗大的猛进出69影院 | 红桃av一区二区三区在线无码av | 四虎国产精品一区二区 | 国产精品久免费的黄网站 | 中文无码精品a∨在线观看不卡 | 国产成人久久精品流白浆 | 日韩精品成人一区二区三区 | 亚洲va欧美va天堂v国产综合 | 久久久久久久人妻无码中文字幕爆 | 性色av无码免费一区二区三区 | 精品久久久中文字幕人妻 | 狠狠色色综合网站 | 麻豆国产97在线 | 欧洲 | 国产精品久久久久久无码 | 亚洲精品鲁一鲁一区二区三区 | √8天堂资源地址中文在线 | 免费人成网站视频在线观看 | 国内揄拍国内精品少妇国语 | 中文字幕无线码 | 国产人妻精品一区二区三区 | 人人妻人人澡人人爽欧美一区 | 精品人妻人人做人人爽夜夜爽 | 亚洲狠狠婷婷综合久久 | 亚洲综合伊人久久大杳蕉 | 理论片87福利理论电影 | 亚洲成a人片在线观看无码3d | 一区二区传媒有限公司 | 在线天堂新版最新版在线8 | 精品人妻中文字幕有码在线 | 少妇性荡欲午夜性开放视频剧场 | 久久国内精品自在自线 | 日日干夜夜干 | 国产午夜亚洲精品不卡下载 | 日本丰满护士爆乳xxxx | 麻豆人妻少妇精品无码专区 | 无码吃奶揉捏奶头高潮视频 | 麻花豆传媒剧国产免费mv在线 | 免费国产成人高清在线观看网站 | 国产舌乚八伦偷品w中 | 亚洲a无码综合a国产av中文 | aⅴ亚洲 日韩 色 图网站 播放 | 久久婷婷五月综合色国产香蕉 | 美女毛片一区二区三区四区 | 日本成熟视频免费视频 | 精品国产av色一区二区深夜久久 | 亚洲色www成人永久网址 | 久久久久se色偷偷亚洲精品av | 精品成在人线av无码免费看 | 人人爽人人澡人人高潮 | 欧美国产日韩亚洲中文 | 国产精品va在线播放 | a在线亚洲男人的天堂 | 亚洲 另类 在线 欧美 制服 | 国产片av国语在线观看 | 精品国产aⅴ无码一区二区 | 国内丰满熟女出轨videos | 精品无码国产自产拍在线观看蜜 | 中文字幕精品av一区二区五区 | 久久久久亚洲精品男人的天堂 | 成人欧美一区二区三区黑人 | 久久精品丝袜高跟鞋 | 色情久久久av熟女人妻网站 | 曰韩无码二三区中文字幕 | 无码国产色欲xxxxx视频 | 欧美国产日韩久久mv | 中文字幕 人妻熟女 | 国产精品毛片一区二区 | 亚洲综合无码一区二区三区 | 欧美高清在线精品一区 | 国产精品无码成人午夜电影 | 亚洲成a人片在线观看无码3d | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 中文字幕精品av一区二区五区 | 精品国产一区二区三区av 性色 | 国产又粗又硬又大爽黄老大爷视 | 久久精品成人欧美大片 | 丰满少妇女裸体bbw | 无遮挡国产高潮视频免费观看 | 国产在线精品一区二区三区直播 | 成人av无码一区二区三区 | 久久亚洲中文字幕精品一区 | 性色欲情网站iwww九文堂 | 日产精品高潮呻吟av久久 | 国产人妻久久精品二区三区老狼 | 国产成人无码区免费内射一片色欲 | 精品人妻人人做人人爽 | 人妻熟女一区 | 亚洲精品国产精品乱码视色 | 精品久久综合1区2区3区激情 | 午夜熟女插插xx免费视频 | 亚洲 另类 在线 欧美 制服 | 嫩b人妻精品一区二区三区 | 国产精品永久免费视频 | 在线观看免费人成视频 | 3d动漫精品啪啪一区二区中 | 图片小说视频一区二区 | 久久久久se色偷偷亚洲精品av | 乌克兰少妇xxxx做受 | 亚洲中文字幕无码中文字在线 | 少妇人妻大乳在线视频 | 国产亚洲人成a在线v网站 | 精品国产乱码久久久久乱码 | 日本熟妇乱子伦xxxx | 少妇性l交大片欧洲热妇乱xxx | 亚洲精品成a人在线观看 | 国产精品毛片一区二区 | 一本久久a久久精品vr综合 | 色窝窝无码一区二区三区色欲 | 丰满人妻翻云覆雨呻吟视频 | 黑人巨大精品欧美一区二区 | 97久久精品无码一区二区 | 日本精品少妇一区二区三区 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 玩弄少妇高潮ⅹxxxyw | 国产精品久久福利网站 | 中文字幕日韩精品一区二区三区 | 少妇性俱乐部纵欲狂欢电影 | 午夜丰满少妇性开放视频 | 2020久久香蕉国产线看观看 | 日日橹狠狠爱欧美视频 | 老太婆性杂交欧美肥老太 | 久久久久人妻一区精品色欧美 | 国产国语老龄妇女a片 | 无码中文字幕色专区 | 亚洲精品一区二区三区四区五区 | 疯狂三人交性欧美 | 色一情一乱一伦一区二区三欧美 | 在线观看国产一区二区三区 | 色爱情人网站 | 樱花草在线播放免费中文 | 在线观看国产午夜福利片 | 亚洲中文无码av永久不收费 | 色诱久久久久综合网ywww | 精品久久久无码人妻字幂 | 久久成人a毛片免费观看网站 | 日韩精品无码一本二本三本色 | 九九综合va免费看 | 国产人成高清在线视频99最全资源 | 人妻无码αv中文字幕久久琪琪布 | 国产人妻大战黑人第1集 | 国产成人午夜福利在线播放 | 欧美老妇与禽交 | 日本乱偷人妻中文字幕 | 精品国偷自产在线 | 扒开双腿吃奶呻吟做受视频 | 国产农村妇女高潮大叫 | 成人动漫在线观看 | 久9re热视频这里只有精品 | 荫蒂添的好舒服视频囗交 | 少妇高潮喷潮久久久影院 | 亚洲gv猛男gv无码男同 | 狠狠躁日日躁夜夜躁2020 | 亚洲日本va午夜在线电影 | 影音先锋中文字幕无码 | 日日鲁鲁鲁夜夜爽爽狠狠 | 无码av中文字幕免费放 | 久久视频在线观看精品 | 美女黄网站人色视频免费国产 | 女人和拘做爰正片视频 | 色狠狠av一区二区三区 | 丰满诱人的人妻3 | 久久精品国产99久久6动漫 | 帮老师解开蕾丝奶罩吸乳网站 | 亚洲色偷偷偷综合网 | yw尤物av无码国产在线观看 | 亚洲精品www久久久 | 国产精品视频免费播放 | 色狠狠av一区二区三区 | 日韩无码专区 | 一个人看的www免费视频在线观看 | 亚洲精品成人av在线 | 亚洲欧美日韩国产精品一区二区 | 久久婷婷五月综合色国产香蕉 | 超碰97人人射妻 | 国产精品igao视频网 | 蜜臀av在线播放 久久综合激激的五月天 | 波多野结衣乳巨码无在线观看 | 欧美阿v高清资源不卡在线播放 | 久久久精品人妻久久影视 | 国产精品久久精品三级 | 2020久久香蕉国产线看观看 | 人人妻人人澡人人爽欧美精品 | 99久久精品无码一区二区毛片 | 亚洲精品欧美二区三区中文字幕 | 久久婷婷五月综合色国产香蕉 | 日本在线高清不卡免费播放 | 人妻少妇精品无码专区二区 | 少妇人妻偷人精品无码视频 | 亚洲人成无码网www | 成人精品视频一区二区 | 噜噜噜亚洲色成人网站 | 亚洲va中文字幕无码久久不卡 | 成人精品视频一区二区三区尤物 | v一区无码内射国产 | 欧美熟妇另类久久久久久多毛 | 精品 日韩 国产 欧美 视频 | 漂亮人妻洗澡被公强 日日躁 | 婷婷六月久久综合丁香 | 亚洲国精产品一二二线 | 天天躁日日躁狠狠躁免费麻豆 | 国产熟女一区二区三区四区五区 | 日韩精品久久久肉伦网站 | 蜜臀av在线播放 久久综合激激的五月天 | 疯狂三人交性欧美 | 内射巨臀欧美在线视频 | 国产麻豆精品精东影业av网站 | 无码精品国产va在线观看dvd | 免费国产成人高清在线观看网站 | 国产亚洲视频中文字幕97精品 | 日韩精品无码一区二区中文字幕 | 欧美丰满熟妇xxxx性ppx人交 | 内射巨臀欧美在线视频 | 国产av剧情md精品麻豆 | 国产成人精品视频ⅴa片软件竹菊 | 99久久精品午夜一区二区 | 老熟妇仑乱视频一区二区 | 久久国产精品精品国产色婷婷 | 国产麻豆精品精东影业av网站 | 色一情一乱一伦一区二区三欧美 | 精品国产一区二区三区四区在线看 | 好男人社区资源 | 中文毛片无遮挡高清免费 | 77777熟女视频在线观看 а天堂中文在线官网 | 亚洲中文字幕av在天堂 | 日本精品高清一区二区 | 一个人免费观看的www视频 | 中文久久乱码一区二区 | a在线观看免费网站大全 | 国产成人精品视频ⅴa片软件竹菊 | 亚无码乱人伦一区二区 | 综合人妻久久一区二区精品 | 日本丰满熟妇videos | 精品 日韩 国产 欧美 视频 | 无码av免费一区二区三区试看 | 一本久久伊人热热精品中文字幕 | 理论片87福利理论电影 | 亚洲国产精品美女久久久久 | 国产亚洲精品久久久ai换 | 色情久久久av熟女人妻网站 | 国产一区二区三区四区五区加勒比 | 亚洲人成网站色7799 | 欧美 亚洲 国产 另类 | 无码人妻少妇伦在线电影 | 久久人人97超碰a片精品 | 久久精品中文字幕一区 | 在线看片无码永久免费视频 | 国产欧美精品一区二区三区 | 久在线观看福利视频 | 午夜精品久久久内射近拍高清 | 亚洲精品综合五月久久小说 | 亚洲国产精品久久人人爱 | 亚洲综合另类小说色区 | 中国女人内谢69xxxxxa片 | 亚洲精品成人av在线 | 欧美黑人乱大交 | 久久zyz资源站无码中文动漫 | 日韩欧美中文字幕公布 | 又紧又大又爽精品一区二区 | 四虎国产精品一区二区 | 日欧一片内射va在线影院 | 5858s亚洲色大成网站www | 午夜不卡av免费 一本久久a久久精品vr综合 | 婷婷丁香五月天综合东京热 | 精品人妻人人做人人爽夜夜爽 | 麻豆国产人妻欲求不满谁演的 | 亚洲国产午夜精品理论片 | 国精品人妻无码一区二区三区蜜柚 | 精品一二三区久久aaa片 | 久久精品中文字幕一区 | 国产午夜精品一区二区三区嫩草 | 无码国内精品人妻少妇 | 丰满人妻精品国产99aⅴ | 曰韩少妇内射免费播放 | 国产特级毛片aaaaaa高潮流水 | 4hu四虎永久在线观看 | 国产熟妇高潮叫床视频播放 | 亚洲精品久久久久久一区二区 | 久久午夜夜伦鲁鲁片无码免费 | 欧美 日韩 人妻 高清 中文 | 东京无码熟妇人妻av在线网址 | 日日碰狠狠丁香久燥 | 亚洲中文字幕在线无码一区二区 | 性色av无码免费一区二区三区 | 牛和人交xxxx欧美 | 国产舌乚八伦偷品w中 | 国产九九九九九九九a片 | 成人无码精品1区2区3区免费看 | 无码人妻av免费一区二区三区 | 人妻少妇精品久久 | 中文字幕精品av一区二区五区 | 亚洲精品一区三区三区在线观看 | 免费无码一区二区三区蜜桃大 | 午夜男女很黄的视频 | ass日本丰满熟妇pics | 欧美zoozzooz性欧美 | 免费播放一区二区三区 | 麻花豆传媒剧国产免费mv在线 | 99久久无码一区人妻 | 精品无人区无码乱码毛片国产 | 婷婷丁香六月激情综合啪 | 亚洲熟妇色xxxxx亚洲 | 牛和人交xxxx欧美 | 中文字幕无码日韩欧毛 | 人妻少妇被猛烈进入中文字幕 | 日日摸夜夜摸狠狠摸婷婷 | 国产综合色产在线精品 | 真人与拘做受免费视频 | 国产精品亚洲一区二区三区喷水 | 国产超级va在线观看视频 | 久久久无码中文字幕久... | 国产内射爽爽大片视频社区在线 | 久久久久se色偷偷亚洲精品av | 欧美日韩一区二区免费视频 | 国产在线精品一区二区三区直播 | 亚洲理论电影在线观看 | 欧美放荡的少妇 | 国内揄拍国内精品人妻 | 国内精品一区二区三区不卡 | 97人妻精品一区二区三区 | 亚洲の无码国产の无码影院 | 狠狠躁日日躁夜夜躁2020 | 成人性做爰aaa片免费看不忠 | 久久亚洲日韩精品一区二区三区 | 亚洲娇小与黑人巨大交 | 亚洲日韩av一区二区三区中文 | 亚洲国产精品久久人人爱 | 亚洲色欲色欲欲www在线 | 国产办公室秘书无码精品99 | 欧美猛少妇色xxxxx | 国产情侣作爱视频免费观看 | 国产一精品一av一免费 | 一本久久伊人热热精品中文字幕 | 国产精品久久精品三级 | 俄罗斯老熟妇色xxxx | 中文字幕中文有码在线 | 欧洲熟妇精品视频 | 国产综合久久久久鬼色 | 麻豆人妻少妇精品无码专区 | 亚洲一区二区三区播放 | 久久无码中文字幕免费影院蜜桃 | 成 人 免费观看网站 | 国产av一区二区三区最新精品 | 在线播放无码字幕亚洲 | 在线成人www免费观看视频 | 国精产品一品二品国精品69xx | 夜夜影院未满十八勿进 | 日韩人妻无码一区二区三区久久99 | 欧美肥老太牲交大战 | 啦啦啦www在线观看免费视频 | 欧美怡红院免费全部视频 | 88国产精品欧美一区二区三区 | 免费观看激色视频网站 | 图片小说视频一区二区 | 国产午夜视频在线观看 | 精品国产乱码久久久久乱码 | 国产凸凹视频一区二区 | 强开小婷嫩苞又嫩又紧视频 | 亚洲精品一区三区三区在线观看 | 99国产精品白浆在线观看免费 | 亚洲精品国产品国语在线观看 | 装睡被陌生人摸出水好爽 | 精品久久久无码人妻字幂 | 免费观看黄网站 | 少女韩国电视剧在线观看完整 | 乱人伦中文视频在线观看 | 亚洲乱亚洲乱妇50p | 国内综合精品午夜久久资源 | 给我免费的视频在线观看 | 成人免费视频视频在线观看 免费 | 国产亚洲精品久久久闺蜜 | 美女张开腿让人桶 | 久久婷婷五月综合色国产香蕉 | 国产欧美亚洲精品a | 亚洲精品成人福利网站 | 亚洲日韩av一区二区三区四区 | 国产一区二区三区四区五区加勒比 | 国内丰满熟女出轨videos | 波多野结衣乳巨码无在线观看 | 鲁一鲁av2019在线 | 99国产精品白浆在线观看免费 | 一区二区三区乱码在线 | 欧洲 | 精品国产aⅴ无码一区二区 | 国产精品对白交换视频 | 亚洲精品成人av在线 | 色综合天天综合狠狠爱 | 一本久久伊人热热精品中文字幕 | 日韩精品无码免费一区二区三区 | 欧美一区二区三区 | a片免费视频在线观看 | 亚洲区小说区激情区图片区 | 久久精品国产日本波多野结衣 | 麻豆国产丝袜白领秘书在线观看 | 精品一区二区三区波多野结衣 | 又大又黄又粗又爽的免费视频 | 国产9 9在线 | 中文 | 婷婷五月综合缴情在线视频 | 东京热一精品无码av | 亚洲精品久久久久久一区二区 | 无码精品国产va在线观看dvd | √8天堂资源地址中文在线 | 久久久成人毛片无码 | 日本欧美一区二区三区乱码 | 亚洲一区二区三区 | 日日麻批免费40分钟无码 | 黑人大群体交免费视频 | 免费观看激色视频网站 | 人妻尝试又大又粗久久 | 一二三四在线观看免费视频 | 中文字幕av伊人av无码av | 无码人妻久久一区二区三区不卡 | 亚洲国产高清在线观看视频 | 少妇性荡欲午夜性开放视频剧场 | 亚洲人成影院在线无码按摩店 | 国产人妻精品一区二区三区 | 激情内射亚州一区二区三区爱妻 | 人妻插b视频一区二区三区 | 一本久久a久久精品vr综合 | 成 人 网 站国产免费观看 | 色婷婷香蕉在线一区二区 | 久久精品中文闷骚内射 | 极品尤物被啪到呻吟喷水 | 国产精品成人av在线观看 | 精品水蜜桃久久久久久久 | 老子影院午夜伦不卡 | 色婷婷综合激情综在线播放 | 男人扒开女人内裤强吻桶进去 | 狂野欧美性猛xxxx乱大交 | 四虎影视成人永久免费观看视频 | 麻豆果冻传媒2021精品传媒一区下载 | 国产精品第一国产精品 | av无码不卡在线观看免费 | 精品熟女少妇av免费观看 | 国产精品久久久久9999小说 | 噜噜噜亚洲色成人网站 | 欧美人与禽猛交狂配 | 久久精品国产大片免费观看 | 国产做国产爱免费视频 | 亚洲午夜福利在线观看 | 嫩b人妻精品一区二区三区 | 蜜桃臀无码内射一区二区三区 | 18精品久久久无码午夜福利 | 欧美日韩一区二区三区自拍 | 亚洲无人区午夜福利码高清完整版 | 中文字幕乱码亚洲无线三区 | 国产成人一区二区三区在线观看 | 18无码粉嫩小泬无套在线观看 | 国产特级毛片aaaaaa高潮流水 | 性色欲网站人妻丰满中文久久不卡 | 人人妻人人澡人人爽欧美一区 | 久久人人爽人人人人片 | 久久国产自偷自偷免费一区调 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 免费无码肉片在线观看 | 色诱久久久久综合网ywww | 亚洲欧美色中文字幕在线 | 日韩人妻少妇一区二区三区 | 久久人人爽人人爽人人片av高清 | 亚洲色大成网站www国产 | 成 人 免费观看网站 | 国产激情精品一区二区三区 | 欧美zoozzooz性欧美 | 国产美女精品一区二区三区 | 四虎国产精品一区二区 | 亚洲成av人影院在线观看 | 国产又爽又猛又粗的视频a片 | 狂野欧美性猛xxxx乱大交 | 国内揄拍国内精品少妇国语 | 曰韩少妇内射免费播放 | 成熟妇人a片免费看网站 | 牲欲强的熟妇农村老妇女视频 | 中文字幕无码人妻少妇免费 | 国产午夜亚洲精品不卡下载 | 国产精华av午夜在线观看 | 欧美人与牲动交xxxx | 成人综合网亚洲伊人 | 人妻熟女一区 | 亚洲日韩av一区二区三区四区 | 国产精品va在线播放 | 美女张开腿让人桶 | 亚洲日本一区二区三区在线 | 国产在线精品一区二区高清不卡 | 精品人妻人人做人人爽 | 精品一二三区久久aaa片 | 97色伦图片97综合影院 | 狠狠噜狠狠狠狠丁香五月 | 一本无码人妻在中文字幕免费 | 精品人人妻人人澡人人爽人人 | av无码久久久久不卡免费网站 | 一本精品99久久精品77 | 成人性做爰aaa片免费看 | 国内揄拍国内精品人妻 | 97夜夜澡人人爽人人喊中国片 | 久久精品国产99精品亚洲 | 爆乳一区二区三区无码 | 国产三级精品三级男人的天堂 | 妺妺窝人体色www在线小说 | 荫蒂被男人添的好舒服爽免费视频 | 天天躁日日躁狠狠躁免费麻豆 | 亚洲国产精品美女久久久久 | 人人妻人人澡人人爽欧美一区 | 日本精品人妻无码77777 天堂一区人妻无码 | 少妇性l交大片欧洲热妇乱xxx | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 亚洲经典千人经典日产 | 国产麻豆精品一区二区三区v视界 | 少妇激情av一区二区 | 久久久久se色偷偷亚洲精品av | 亚洲 日韩 欧美 成人 在线观看 | 中文字幕中文有码在线 | 亚洲va欧美va天堂v国产综合 | 精品国产av色一区二区深夜久久 | 鲁鲁鲁爽爽爽在线视频观看 | 久久国产精品_国产精品 | 人妻熟女一区 | 激情内射亚州一区二区三区爱妻 | 欧美日本日韩 | 两性色午夜视频免费播放 | 天堂无码人妻精品一区二区三区 | 男人和女人高潮免费网站 | 亚洲娇小与黑人巨大交 | 国产精品沙发午睡系列 | 无码人妻少妇伦在线电影 | 综合网日日天干夜夜久久 | 人人妻人人藻人人爽欧美一区 | 亚洲日本va午夜在线电影 | 欧美日韩色另类综合 | 天天躁夜夜躁狠狠是什么心态 | 国产无av码在线观看 | 日本一区二区三区免费高清 | 日本乱偷人妻中文字幕 | 一个人免费观看的www视频 | 日日橹狠狠爱欧美视频 | 青青青手机频在线观看 | 天堂亚洲2017在线观看 | 性欧美牲交在线视频 | 亚洲 高清 成人 动漫 | 精品无人国产偷自产在线 | 国产欧美亚洲精品a | 国产精品久久久午夜夜伦鲁鲁 | 欧美怡红院免费全部视频 | 少妇性荡欲午夜性开放视频剧场 | 日韩av激情在线观看 | 国产黑色丝袜在线播放 | 午夜无码区在线观看 | 国精品人妻无码一区二区三区蜜柚 | 综合人妻久久一区二区精品 | 少妇性荡欲午夜性开放视频剧场 | 精品国产成人一区二区三区 | 亚洲热妇无码av在线播放 | 综合人妻久久一区二区精品 | 欧美激情内射喷水高潮 | 无码国产激情在线观看 | 天海翼激烈高潮到腰振不止 | 国产激情综合五月久久 | 成熟女人特级毛片www免费 | 国产麻豆精品精东影业av网站 | 亚洲色www成人永久网址 | 国内丰满熟女出轨videos | 日韩欧美群交p片內射中文 | 丝袜 中出 制服 人妻 美腿 | 久久久久se色偷偷亚洲精品av | 午夜精品一区二区三区在线观看 | 一二三四在线观看免费视频 | 又湿又紧又大又爽a视频国产 | 国产区女主播在线观看 | 欧美国产日韩久久mv | 国产成人精品一区二区在线小狼 | 国产精品丝袜黑色高跟鞋 | 国产午夜福利100集发布 | 亚洲一区二区三区 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久久精品成人免费观看 | 99精品无人区乱码1区2区3区 | 久久综合久久自在自线精品自 | 亚洲色在线无码国产精品不卡 | 亚洲一区二区三区 | 久青草影院在线观看国产 | 熟女少妇在线视频播放 | 大肉大捧一进一出视频出来呀 | 1000部夫妻午夜免费 | 国产猛烈高潮尖叫视频免费 | 日日躁夜夜躁狠狠躁 | 最近中文2019字幕第二页 | 精品国产精品久久一区免费式 | 亚洲欧美中文字幕5发布 | 夜夜高潮次次欢爽av女 | 亚洲乱码日产精品bd | 欧美怡红院免费全部视频 | 国产午夜亚洲精品不卡 | 久久伊人色av天堂九九小黄鸭 | 欧美国产日产一区二区 | 国内精品久久毛片一区二区 | 亚洲欧洲中文日韩av乱码 | 天天躁夜夜躁狠狠是什么心态 | 欧美怡红院免费全部视频 | 俄罗斯老熟妇色xxxx | 午夜精品久久久久久久久 | 欧美日韩人成综合在线播放 | 精品国产麻豆免费人成网站 | 亚洲自偷自拍另类第1页 | 日韩 欧美 动漫 国产 制服 | 国产精品人人爽人人做我的可爱 | 国产三级久久久精品麻豆三级 | 免费无码一区二区三区蜜桃大 | 一二三四社区在线中文视频 | 亚洲欧美日韩综合久久久 | 无人区乱码一区二区三区 | 亚洲国产精品一区二区美利坚 | 中文字幕无码人妻少妇免费 | 美女黄网站人色视频免费国产 | 99视频精品全部免费免费观看 | 99久久久无码国产精品免费 | 久久久精品欧美一区二区免费 | 亚洲欧美色中文字幕在线 | 精品 日韩 国产 欧美 视频 | 亚洲国产精品久久久天堂 | 亚洲欧美日韩综合久久久 | 色噜噜亚洲男人的天堂 | 在线观看免费人成视频 | 国产亚洲精品久久久ai换 | 伊人久久婷婷五月综合97色 | 亚欧洲精品在线视频免费观看 | 久在线观看福利视频 | 亚洲熟妇色xxxxx欧美老妇 | 久久久精品国产sm最大网站 | 国产婷婷色一区二区三区在线 | 正在播放东北夫妻内射 | aⅴ亚洲 日韩 色 图网站 播放 | 久久精品国产亚洲精品 | 久在线观看福利视频 | 国产亚洲视频中文字幕97精品 | 好男人社区资源 | 又大又黄又粗又爽的免费视频 | 少妇高潮一区二区三区99 | 久久久精品欧美一区二区免费 | 377p欧洲日本亚洲大胆 | 国产精品久久久久影院嫩草 | 国产精品亚洲专区无码不卡 | 成人无码影片精品久久久 | 婷婷丁香六月激情综合啪 | 欧美成人高清在线播放 | 日本va欧美va欧美va精品 | 欧美freesex黑人又粗又大 | 国产人妖乱国产精品人妖 | 中文字幕精品av一区二区五区 | 男人的天堂2018无码 | 免费无码的av片在线观看 | 亚洲精品一区三区三区在线观看 | 国产无av码在线观看 | 中文亚洲成a人片在线观看 | 亚洲成a人片在线观看日本 | 亚洲国产av精品一区二区蜜芽 | 少妇人妻偷人精品无码视频 | 国产又粗又硬又大爽黄老大爷视 | 男人扒开女人内裤强吻桶进去 | 国产精品亚洲专区无码不卡 | 又大又硬又黄的免费视频 | 日本熟妇人妻xxxxx人hd | 国产精品亚洲一区二区三区喷水 | 国产精品高潮呻吟av久久4虎 | 国产国产精品人在线视 | 国产另类ts人妖一区二区 | 国产色视频一区二区三区 | 欧美一区二区三区视频在线观看 | 亚洲一区二区三区国产精华液 | 国产亚洲美女精品久久久2020 | 精品偷自拍另类在线观看 | 99久久精品日本一区二区免费 | 欧洲极品少妇 | 成人免费无码大片a毛片 | 少妇高潮喷潮久久久影院 | 中文字幕无码人妻少妇免费 | 永久免费观看国产裸体美女 | 国产乱人偷精品人妻a片 | 亚洲s码欧洲m码国产av | 色欲av亚洲一区无码少妇 | 亚洲精品成人av在线 | 台湾无码一区二区 | 丰满肥臀大屁股熟妇激情视频 | 欧洲欧美人成视频在线 | 伊人久久大香线蕉午夜 | 99久久精品午夜一区二区 | 国产精品福利视频导航 | 特黄特色大片免费播放器图片 | 午夜精品久久久内射近拍高清 | 又大又硬又爽免费视频 | 福利一区二区三区视频在线观看 | 欧美老人巨大xxxx做受 | 午夜精品久久久内射近拍高清 | 中文字幕乱码人妻二区三区 | 久久久久成人精品免费播放动漫 | 久久亚洲精品中文字幕无男同 | 亚洲欧美精品aaaaaa片 | 性色欲网站人妻丰满中文久久不卡 | 精品久久久久久人妻无码中文字幕 | 人人爽人人爽人人片av亚洲 | 永久黄网站色视频免费直播 | 国产色在线 | 国产 | 国产xxx69麻豆国语对白 | 无码av中文字幕免费放 | 狂野欧美性猛xxxx乱大交 | 午夜福利试看120秒体验区 | 人妻天天爽夜夜爽一区二区 | 欧美亚洲日韩国产人成在线播放 | 久久99精品久久久久久 | 亚洲国产精品无码一区二区三区 | 亚洲乱码中文字幕在线 | 人人妻人人澡人人爽精品欧美 | 国产精品久久久一区二区三区 | 亚洲乱码国产乱码精品精 | 精品厕所偷拍各类美女tp嘘嘘 | 精品无码成人片一区二区98 | 动漫av一区二区在线观看 | 老司机亚洲精品影院 | 高清不卡一区二区三区 | 国产av一区二区三区最新精品 | 亚洲日本va午夜在线电影 | 欧美日韩一区二区三区自拍 | 一本久道久久综合婷婷五月 | 欧美亚洲日韩国产人成在线播放 | 精品人妻人人做人人爽 | 综合网日日天干夜夜久久 | 国产香蕉97碰碰久久人人 | 我要看www免费看插插视频 | 国产亲子乱弄免费视频 | 人人超人人超碰超国产 | 久青草影院在线观看国产 | 初尝人妻少妇中文字幕 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产精品多人p群无码 | 国产真实乱对白精彩久久 | 日韩人妻少妇一区二区三区 | 兔费看少妇性l交大片免费 | 色婷婷香蕉在线一区二区 | av无码久久久久不卡免费网站 | 亚洲天堂2017无码中文 | 亚洲啪av永久无码精品放毛片 | 精品国产麻豆免费人成网站 | 激情人妻另类人妻伦 | 亚洲国产av美女网站 | 精品久久久无码中文字幕 | 免费播放一区二区三区 | 国产色xx群视频射精 | 97资源共享在线视频 | 曰本女人与公拘交酡免费视频 | 中文字幕人妻无码一夲道 | 呦交小u女精品视频 | 国产舌乚八伦偷品w中 | 小sao货水好多真紧h无码视频 | 日本一区二区三区免费播放 | 亚洲综合色区中文字幕 | 一本大道伊人av久久综合 | 麻豆md0077饥渴少妇 | 欧美日本免费一区二区三区 | 精品偷自拍另类在线观看 | 性生交大片免费看女人按摩摩 | 激情内射亚州一区二区三区爱妻 | 久久国产精品精品国产色婷婷 | 男人的天堂2018无码 | 波多野结衣 黑人 | 国产成人亚洲综合无码 | 久久精品国产一区二区三区 | 99久久婷婷国产综合精品青草免费 | 亚洲成av人片在线观看无码不卡 | 无码国产激情在线观看 | 黄网在线观看免费网站 | 亚洲爆乳大丰满无码专区 | 少妇被粗大的猛进出69影院 | 波多野结衣乳巨码无在线观看 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 久久久久99精品成人片 | 亚洲aⅴ无码成人网站国产app | 亚洲国产欧美在线成人 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 一区二区传媒有限公司 | 亚洲熟悉妇女xxx妇女av | 亚洲国产精品久久人人爱 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 综合人妻久久一区二区精品 | 伊人久久大香线蕉亚洲 | 免费国产成人高清在线观看网站 | 精品国产一区av天美传媒 | 粉嫩少妇内射浓精videos | 少妇被黑人到高潮喷出白浆 | 国产后入清纯学生妹 | 国内少妇偷人精品视频免费 | 久久精品中文字幕大胸 | 日本一卡二卡不卡视频查询 | 天天拍夜夜添久久精品大 | 色欲人妻aaaaaaa无码 | 曰本女人与公拘交酡免费视频 | 老子影院午夜精品无码 | 无码人妻久久一区二区三区不卡 | 亚洲阿v天堂在线 | 性欧美熟妇videofreesex | 亚洲毛片av日韩av无码 | 无码吃奶揉捏奶头高潮视频 | 成人无码视频免费播放 | 亚洲一区二区三区无码久久 | 日韩少妇白浆无码系列 | 亚洲精品成a人在线观看 | 国产av无码专区亚洲awww | 婷婷综合久久中文字幕蜜桃三电影 | 欧美 丝袜 自拍 制服 另类 | 成人无码视频在线观看网站 | 男人的天堂2018无码 | 色婷婷综合激情综在线播放 | 久久综合狠狠综合久久综合88 | 亚洲成av人影院在线观看 | 少女韩国电视剧在线观看完整 | 日本xxxx色视频在线观看免费 | 国产猛烈高潮尖叫视频免费 | 欧美精品无码一区二区三区 | 亚洲男人av香蕉爽爽爽爽 | 日本大乳高潮视频在线观看 | 特黄特色大片免费播放器图片 | 免费无码一区二区三区蜜桃大 | 国产做国产爱免费视频 | 亚洲国产欧美在线成人 | 精品国产麻豆免费人成网站 | 国产成人无码av在线影院 | 成熟女人特级毛片www免费 | 香港三级日本三级妇三级 | 老熟女重囗味hdxx69 | 无码人妻出轨黑人中文字幕 | 内射后入在线观看一区 | 四虎4hu永久免费 | 男人的天堂2018无码 | 国产后入清纯学生妹 | 日韩av无码中文无码电影 | 人妻少妇被猛烈进入中文字幕 | 午夜熟女插插xx免费视频 | 午夜理论片yy44880影院 | 国内综合精品午夜久久资源 | 色欲久久久天天天综合网精品 | 一本一道久久综合久久 | 欧美一区二区三区视频在线观看 | 无码成人精品区在线观看 | 亚洲熟妇色xxxxx亚洲 | 老子影院午夜精品无码 | 亚洲国产精品毛片av不卡在线 | 国产成人无码av一区二区 | 国产精品-区区久久久狼 | 亚洲国精产品一二二线 | 老子影院午夜伦不卡 | 人妻无码αv中文字幕久久琪琪布 | 露脸叫床粗话东北少妇 | 日韩av无码一区二区三区不卡 | 午夜福利不卡在线视频 | 国产精品无码成人午夜电影 | 成年女人永久免费看片 | 亚洲阿v天堂在线 | 中文字幕 亚洲精品 第1页 | 国产精品视频免费播放 | 中文字幕 亚洲精品 第1页 | 内射爽无广熟女亚洲 | 妺妺窝人体色www在线小说 | 欧美激情一区二区三区成人 | 国产精品第一国产精品 | 久久天天躁夜夜躁狠狠 | 国产人妻精品午夜福利免费 | 亚洲国产欧美日韩精品一区二区三区 | 中文字幕 人妻熟女 | 老太婆性杂交欧美肥老太 | 国产精品无套呻吟在线 | 色一情一乱一伦一区二区三欧美 | 色情久久久av熟女人妻网站 | 欧美人与物videos另类 | 人人妻在人人 | 亚洲а∨天堂久久精品2021 | 最新国产麻豆aⅴ精品无码 | 亚洲综合久久一区二区 | 午夜性刺激在线视频免费 | 澳门永久av免费网站 | 亚洲欧美日韩综合久久久 | 午夜精品久久久久久久久 | 国产深夜福利视频在线 | 亚洲成av人影院在线观看 | 少妇高潮一区二区三区99 | 久久久久久国产精品无码下载 | 国产偷抇久久精品a片69 | 一区二区传媒有限公司 | 欧美三级不卡在线观看 | 好男人www社区 | 丰满少妇弄高潮了www | 精品国产av色一区二区深夜久久 | 风流少妇按摩来高潮 | 激情内射亚州一区二区三区爱妻 | 久久国产精品_国产精品 | 无码人妻丰满熟妇区五十路百度 | 水蜜桃色314在线观看 | 欧美成人免费全部网站 | 国产肉丝袜在线观看 | av无码久久久久不卡免费网站 | 少妇太爽了在线观看 | 色一情一乱一伦一视频免费看 | 亚洲日韩av片在线观看 | 精品无码成人片一区二区98 | 国产熟妇另类久久久久 | 亚洲成av人影院在线观看 | 成熟女人特级毛片www免费 | 熟妇人妻激情偷爽文 | 久激情内射婷内射蜜桃人妖 | 色婷婷综合中文久久一本 | 少妇性l交大片欧洲热妇乱xxx | 国产精华av午夜在线观看 | 扒开双腿吃奶呻吟做受视频 | 小泽玛莉亚一区二区视频在线 | 丝袜美腿亚洲一区二区 | 一本一道久久综合久久 | 特大黑人娇小亚洲女 | 未满成年国产在线观看 | 大色综合色综合网站 | 天堂а√在线地址中文在线 | 最新版天堂资源中文官网 | 色偷偷人人澡人人爽人人模 | av无码电影一区二区三区 | 亚洲精品国产a久久久久久 | 中文字幕日韩精品一区二区三区 | 国产亚洲欧美在线专区 | 亚洲成a人一区二区三区 | 99精品国产综合久久久久五月天 | 人妻无码久久精品人妻 | 色老头在线一区二区三区 | 午夜精品久久久久久久久 | 精品欧美一区二区三区久久久 | 色五月丁香五月综合五月 | 成人免费视频在线观看 | 精品国产aⅴ无码一区二区 | 波多野结衣av在线观看 | 狠狠亚洲超碰狼人久久 | 天下第一社区视频www日本 | 国产97色在线 | 免 | 亚洲欧美日韩国产精品一区二区 | 2020久久香蕉国产线看观看 | 精品一区二区三区波多野结衣 | 亚洲人成人无码网www国产 | 国产另类ts人妖一区二区 | 久久久久久九九精品久 | a在线观看免费网站大全 | 亚洲精品欧美二区三区中文字幕 | 久久成人a毛片免费观看网站 | 国产成人综合美国十次 | 77777熟女视频在线观看 а天堂中文在线官网 | 国产又粗又硬又大爽黄老大爷视 | 国产精品va在线观看无码 | 亚洲成色www久久网站 | 亚洲 另类 在线 欧美 制服 | 精品国产青草久久久久福利 | av无码久久久久不卡免费网站 | 亚洲一区二区三区 | 正在播放老肥熟妇露脸 | 377p欧洲日本亚洲大胆 | 中文字幕乱码亚洲无线三区 | 一本久道高清无码视频 | 日本xxxx色视频在线观看免费 | 欧美刺激性大交 | 天海翼激烈高潮到腰振不止 | 亚洲中文字幕在线无码一区二区 | 国产精品第一区揄拍无码 | 欧美变态另类xxxx | 国产精品人人妻人人爽 | 成人亚洲精品久久久久软件 | 亚洲日本va午夜在线电影 | 欧美35页视频在线观看 | 国产成人人人97超碰超爽8 | 久久综合久久自在自线精品自 | 国产精品美女久久久久av爽李琼 | 大屁股大乳丰满人妻 | 亚洲精品一区二区三区四区五区 | 无码免费一区二区三区 | 三上悠亚人妻中文字幕在线 | 日本护士毛茸茸高潮 | 蜜桃av抽搐高潮一区二区 | 人人妻人人澡人人爽欧美一区 | 国产亚洲人成a在线v网站 | 亚洲熟妇色xxxxx欧美老妇 | 欧美国产日产一区二区 | 久久国产精品二国产精品 | 国产午夜精品一区二区三区嫩草 | 精品国产国产综合精品 | 一本大道伊人av久久综合 | 久久国产精品_国产精品 | 日韩av无码一区二区三区不卡 | 性欧美牲交在线视频 | 亚洲阿v天堂在线 | 国产美女极度色诱视频www | 日本爽爽爽爽爽爽在线观看免 | 内射白嫩少妇超碰 | 亚洲天堂2017无码 | 成人aaa片一区国产精品 | 国产精品多人p群无码 | 欧美性黑人极品hd | 天天做天天爱天天爽综合网 | 噜噜噜亚洲色成人网站 | 国产一区二区三区四区五区加勒比 | 人人澡人摸人人添 | 玩弄少妇高潮ⅹxxxyw | 日本在线高清不卡免费播放 | 欧美三级不卡在线观看 | 亚洲一区二区三区播放 | 波多野结衣av一区二区全免费观看 | 国产真实伦对白全集 | 中文字幕久久久久人妻 | 午夜精品久久久内射近拍高清 | 性史性农村dvd毛片 | 扒开双腿疯狂进出爽爽爽视频 | 国产尤物精品视频 | 永久免费观看美女裸体的网站 | 国产成人一区二区三区在线观看 | 久久伊人色av天堂九九小黄鸭 | 国产成人精品久久亚洲高清不卡 | 色 综合 欧美 亚洲 国产 | 国产在热线精品视频 | 全黄性性激高免费视频 | 丁香啪啪综合成人亚洲 | 东京热一精品无码av | 三级4级全黄60分钟 | 亚洲综合无码久久精品综合 | 夜精品a片一区二区三区无码白浆 | 亚洲小说图区综合在线 | 国产精品人人爽人人做我的可爱 | 无码一区二区三区在线观看 | 成人av无码一区二区三区 | 色婷婷香蕉在线一区二区 | 天天躁日日躁狠狠躁免费麻豆 | 欧美一区二区三区视频在线观看 | 午夜丰满少妇性开放视频 | 成人欧美一区二区三区黑人免费 | 丰满肥臀大屁股熟妇激情视频 | аⅴ资源天堂资源库在线 | 99久久久无码国产aaa精品 | 嫩b人妻精品一区二区三区 | 国产人妻精品午夜福利免费 | 无码精品人妻一区二区三区av | 午夜福利不卡在线视频 | 免费观看激色视频网站 | 真人与拘做受免费视频 | 夜夜躁日日躁狠狠久久av | 国产电影无码午夜在线播放 | 中文字幕无码av波多野吉衣 | 人妻无码αv中文字幕久久琪琪布 | 亚洲精品国产第一综合99久久 | 性欧美牲交xxxxx视频 | 国产真实夫妇视频 | 亚洲国产日韩a在线播放 | 亚洲欧洲日本综合aⅴ在线 | 玩弄少妇高潮ⅹxxxyw | 夜先锋av资源网站 | 激情内射亚州一区二区三区爱妻 | 麻豆人妻少妇精品无码专区 | 亚洲国产成人av在线观看 | 水蜜桃亚洲一二三四在线 | 国产精品va在线播放 | 18精品久久久无码午夜福利 | 成人三级无码视频在线观看 | 国产高清不卡无码视频 | 国产97人人超碰caoprom | 在线播放无码字幕亚洲 | 日日噜噜噜噜夜夜爽亚洲精品 | 欧美一区二区三区视频在线观看 | 亚洲呦女专区 | 国产精品99久久精品爆乳 | 中文字幕无码日韩欧毛 | 色情久久久av熟女人妻网站 | 亚洲无人区午夜福利码高清完整版 | 国产精品99久久精品爆乳 | 老头边吃奶边弄进去呻吟 | 少妇太爽了在线观看 | 18无码粉嫩小泬无套在线观看 | 亚洲日本一区二区三区在线 | 377p欧洲日本亚洲大胆 | 国产亚洲欧美在线专区 | 久久久精品欧美一区二区免费 | 国产精品无码一区二区三区不卡 | 亚洲成a人片在线观看无码3d | 无码吃奶揉捏奶头高潮视频 | 麻豆成人精品国产免费 | 丰满肥臀大屁股熟妇激情视频 | 久久精品国产一区二区三区肥胖 | 久久精品人妻少妇一区二区三区 | 成人亚洲精品久久久久软件 | 强开小婷嫩苞又嫩又紧视频 | 日产精品99久久久久久 | 久久久久久久人妻无码中文字幕爆 | 丰满护士巨好爽好大乳 | 夜精品a片一区二区三区无码白浆 | a在线亚洲男人的天堂 | 少妇高潮一区二区三区99 | 99re在线播放 | 动漫av网站免费观看 | 精品国产乱码久久久久乱码 | 色欲久久久天天天综合网精品 | 一个人看的视频www在线 | 日日碰狠狠丁香久燥 | 十八禁真人啪啪免费网站 | 国精品人妻无码一区二区三区蜜柚 | 99国产精品白浆在线观看免费 | 欧美日韩亚洲国产精品 | 野外少妇愉情中文字幕 | 欧美熟妇另类久久久久久多毛 | 久久精品中文字幕大胸 | 国产午夜福利100集发布 | 思思久久99热只有频精品66 | 日韩av无码中文无码电影 | 色窝窝无码一区二区三区色欲 | 无码人妻黑人中文字幕 | 日本丰满护士爆乳xxxx | 综合网日日天干夜夜久久 | 国产欧美精品一区二区三区 | 国产国产精品人在线视 | 无码精品国产va在线观看dvd | 亚洲精品一区二区三区在线观看 | 亚洲啪av永久无码精品放毛片 | 精品国精品国产自在久国产87 | 亚洲成a人片在线观看日本 | 国产成人精品视频ⅴa片软件竹菊 | 扒开双腿疯狂进出爽爽爽视频 | 亚洲精品成a人在线观看 | 精品无码成人片一区二区98 | 国产亚洲精品精品国产亚洲综合 | 中国女人内谢69xxxx | 欧美激情一区二区三区成人 | 亚洲中文字幕乱码av波多ji | 丰满人妻一区二区三区免费视频 | 久热国产vs视频在线观看 | 人妻与老人中文字幕 | 高清国产亚洲精品自在久久 | 国产av无码专区亚洲awww | 亚洲国产精品久久久久久 | 日本爽爽爽爽爽爽在线观看免 | 亚洲日韩中文字幕在线播放 | 亚洲第一无码av无码专区 | 一本久道久久综合狠狠爱 | 一区二区三区高清视频一 | 亚洲精品国产精品乱码视色 | 久久久精品人妻久久影视 | 国产精品美女久久久 | 久久久精品人妻久久影视 | 国产偷国产偷精品高清尤物 | 97夜夜澡人人双人人人喊 | 日韩在线不卡免费视频一区 | 久久午夜夜伦鲁鲁片无码免费 | 国产网红无码精品视频 | 精品久久久久香蕉网 | 熟妇人妻中文av无码 | 蜜桃视频插满18在线观看 | 精品无码av一区二区三区 | 亚拍精品一区二区三区探花 | 午夜无码区在线观看 | 色一情一乱一伦 | 一本色道婷婷久久欧美 | 国产精品丝袜黑色高跟鞋 | 无码国产色欲xxxxx视频 | 噜噜噜亚洲色成人网站 | 小鲜肉自慰网站xnxx | 日本xxxx色视频在线观看免费 | 午夜福利试看120秒体验区 | 性色欲网站人妻丰满中文久久不卡 | 扒开双腿疯狂进出爽爽爽视频 | 丝袜人妻一区二区三区 | av香港经典三级级 在线 | 色妞www精品免费视频 | 蜜桃视频韩日免费播放 | 久久国产精品二国产精品 | 久久国产精品偷任你爽任你 | 老熟妇乱子伦牲交视频 | 成人无码精品一区二区三区 | 亚洲中文字幕在线观看 | 午夜时刻免费入口 | 麻豆国产97在线 | 欧洲 | 无码毛片视频一区二区本码 | 亚洲精品国产品国语在线观看 | 麻豆国产人妻欲求不满谁演的 | 噜噜噜亚洲色成人网站 | 免费国产黄网站在线观看 | 蜜桃臀无码内射一区二区三区 | 亚洲精品成人av在线 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 欧美三级a做爰在线观看 | 暴力强奷在线播放无码 | 国产亚洲精品久久久久久国模美 | 国内精品人妻无码久久久影院蜜桃 | 国产小呦泬泬99精品 | 无码福利日韩神码福利片 | 国产精品国产自线拍免费软件 | 中文字幕无线码 | 亚洲大尺度无码无码专区 | 亚洲欧美国产精品专区久久 | 欧美国产日产一区二区 | 久久精品国产99精品亚洲 | 国产午夜福利100集发布 | 亚洲人成影院在线无码按摩店 | 女人被男人爽到呻吟的视频 | 久久综合网欧美色妞网 | 欧美熟妇另类久久久久久不卡 | 激情亚洲一区国产精品 | 国产办公室秘书无码精品99 | 欧美日韩一区二区免费视频 | 国产乱人无码伦av在线a | 日欧一片内射va在线影院 | 亚洲一区二区三区含羞草 | 98国产精品综合一区二区三区 | 55夜色66夜色国产精品视频 | 麻豆国产人妻欲求不满谁演的 | 久久久av男人的天堂 | 牲交欧美兽交欧美 | 纯爱无遮挡h肉动漫在线播放 | 欧美精品免费观看二区 | 精品亚洲成av人在线观看 | 欧美日本日韩 | 欧美日韩一区二区综合 | 国内揄拍国内精品人妻 | 免费无码一区二区三区蜜桃大 | 国产超碰人人爽人人做人人添 | 999久久久国产精品消防器材 | 亚洲日韩一区二区 | 欧美日本免费一区二区三区 | 久久精品人人做人人综合试看 | 成人性做爰aaa片免费看不忠 | 亚洲s码欧洲m码国产av | 久久精品人人做人人综合试看 | 亚洲精品久久久久久一区二区 | 亚洲日韩av一区二区三区四区 | 欧洲熟妇色 欧美 | yw尤物av无码国产在线观看 | 18禁黄网站男男禁片免费观看 | 精品乱子伦一区二区三区 | 波多野结衣 黑人 | 最近的中文字幕在线看视频 | 亚洲色欲久久久综合网东京热 | 亚洲精品一区二区三区四区五区 | 精品一二三区久久aaa片 | 久久国产自偷自偷免费一区调 | 亚洲综合另类小说色区 | √天堂资源地址中文在线 | 国产乱子伦视频在线播放 | 国产精品久久久久无码av色戒 | 久久久久人妻一区精品色欧美 | 自拍偷自拍亚洲精品被多人伦好爽 | 色综合视频一区二区三区 | 在教室伦流澡到高潮hnp视频 | 久久久久亚洲精品中文字幕 | 国产在线精品一区二区三区直播 | 无码人妻精品一区二区三区下载 | 麻豆国产人妻欲求不满 | 老太婆性杂交欧美肥老太 | 在线а√天堂中文官网 | 男女猛烈xx00免费视频试看 | 亚洲精品国产精品乱码视色 | 丰满人妻精品国产99aⅴ | 国产高潮视频在线观看 | 日产精品99久久久久久 | 国产乱人伦偷精品视频 | 无码国模国产在线观看 | 亚洲色大成网站www国产 | 一本无码人妻在中文字幕免费 | 日本爽爽爽爽爽爽在线观看免 | 夜先锋av资源网站 | 天干天干啦夜天干天2017 | 成人免费视频视频在线观看 免费 | 无码国产激情在线观看 | 少妇被黑人到高潮喷出白浆 | 精品国产麻豆免费人成网站 | 精品人妻中文字幕有码在线 | 国产97在线 | 亚洲 | 99精品无人区乱码1区2区3区 | 久久亚洲a片com人成 | 亚洲爆乳大丰满无码专区 | 亲嘴扒胸摸屁股激烈网站 | 永久免费观看美女裸体的网站 | 少妇愉情理伦片bd | 欧美怡红院免费全部视频 | 露脸叫床粗话东北少妇 | 亚洲va欧美va天堂v国产综合 | 日本精品人妻无码77777 天堂一区人妻无码 | 久久精品一区二区三区四区 | 国产精品高潮呻吟av久久 | 亚洲日本va午夜在线电影 | 久久精品一区二区三区四区 | 国产精品资源一区二区 | 性欧美牲交在线视频 | 久久精品国产一区二区三区肥胖 | 狠狠cao日日穞夜夜穞av | 成人综合网亚洲伊人 | 亚洲一区二区三区在线观看网站 | 国产真实伦对白全集 | 乱码午夜-极国产极内射 | 欧美激情综合亚洲一二区 | 国产成人午夜福利在线播放 | 图片小说视频一区二区 | 99riav国产精品视频 | 精品国产一区二区三区四区 | 久久久久成人精品免费播放动漫 | 亚洲国产精品一区二区第一页 | 在线看片无码永久免费视频 | 人人妻人人澡人人爽人人精品 | 扒开双腿疯狂进出爽爽爽视频 | 初尝人妻少妇中文字幕 | 天天av天天av天天透 | 丰满少妇人妻久久久久久 | 成 人 免费观看网站 | 亚洲经典千人经典日产 | 亚洲成av人片在线观看无码不卡 | 亚洲国产精品无码久久久久高潮 | 曰本女人与公拘交酡免费视频 | 国产精品美女久久久久av爽李琼 | 久久综合久久自在自线精品自 | 日日天日日夜日日摸 | 99re在线播放 | 西西人体www44rt大胆高清 | 久久久久久亚洲精品a片成人 | 日韩欧美中文字幕公布 | 久久久国产精品无码免费专区 | 在线 国产 欧美 亚洲 天堂 | 牲欲强的熟妇农村老妇女视频 | 国产成人无码av一区二区 | 亚洲熟妇色xxxxx欧美老妇y | 自拍偷自拍亚洲精品被多人伦好爽 | 99久久精品国产一区二区蜜芽 | 亚洲熟熟妇xxxx | 性开放的女人aaa片 | 国产sm调教视频在线观看 | 国产美女精品一区二区三区 | 亚洲中文字幕av在天堂 | 久久久亚洲欧洲日产国码αv | 少妇无套内谢久久久久 | 国产av一区二区三区最新精品 | 老熟女重囗味hdxx69 | 亚洲 日韩 欧美 成人 在线观看 | 久久国产精品精品国产色婷婷 | 色综合天天综合狠狠爱 | 日欧一片内射va在线影院 | 成人欧美一区二区三区 | 国产特级毛片aaaaaa高潮流水 | 黑人粗大猛烈进出高潮视频 | 午夜性刺激在线视频免费 | 久久国产精品萌白酱免费 | 影音先锋中文字幕无码 | 欧美阿v高清资源不卡在线播放 | 国产三级精品三级男人的天堂 | 无码人中文字幕 | 日韩人妻无码一区二区三区久久99 | 亚洲国产日韩a在线播放 | 对白脏话肉麻粗话av | 国产超碰人人爽人人做人人添 | 国产在线aaa片一区二区99 | 婷婷五月综合激情中文字幕 | 蜜臀aⅴ国产精品久久久国产老师 | 欧美xxxx黑人又粗又长 | 中文字幕色婷婷在线视频 | 俺去俺来也在线www色官网 | 欧美第一黄网免费网站 | 国产成人亚洲综合无码 | 亚拍精品一区二区三区探花 | 无套内谢的新婚少妇国语播放 | 久久人妻内射无码一区三区 | 牲欲强的熟妇农村老妇女视频 | 久久久久se色偷偷亚洲精品av | 无码人妻久久一区二区三区不卡 | 99视频精品全部免费免费观看 | 成年美女黄网站色大免费全看 | 欧美日本免费一区二区三区 | 乱人伦人妻中文字幕无码 | 中文字幕无码热在线视频 | 丰腴饱满的极品熟妇 | 1000部啪啪未满十八勿入下载 | 野狼第一精品社区 | 无码av岛国片在线播放 | 国产午夜福利亚洲第一 | 人妻少妇被猛烈进入中文字幕 | 超碰97人人做人人爱少妇 | 国内丰满熟女出轨videos | 伊人久久大香线蕉av一区二区 | 欧美大屁股xxxxhd黑色 | 亚洲精品综合五月久久小说 | 成 人影片 免费观看 | 国产精品久久久一区二区三区 | 天堂久久天堂av色综合 | 国产黄在线观看免费观看不卡 | 一本久道久久综合婷婷五月 | 婷婷综合久久中文字幕蜜桃三电影 | 亚洲va中文字幕无码久久不卡 | av无码不卡在线观看免费 | 欧美刺激性大交 | 国产黄在线观看免费观看不卡 | 精品厕所偷拍各类美女tp嘘嘘 | 欧洲极品少妇 | 无遮无挡爽爽免费视频 | 欧美日韩视频无码一区二区三 | 国产美女极度色诱视频www | 亚洲狠狠婷婷综合久久 | 亚洲熟女一区二区三区 | 76少妇精品导航 | 中文字幕无码日韩欧毛 | 亚洲精品一区二区三区婷婷月 | 精品国精品国产自在久国产87 | 国产超级va在线观看视频 | 在线亚洲高清揄拍自拍一品区 | 性色av无码免费一区二区三区 | 欧美激情内射喷水高潮 | 国模大胆一区二区三区 | 高清不卡一区二区三区 | 欧美野外疯狂做受xxxx高潮 | 精品无码国产一区二区三区av | 无码av最新清无码专区吞精 | 国产成人精品优优av | 欧美日韩综合一区二区三区 | 极品尤物被啪到呻吟喷水 | 无码一区二区三区在线 | 99er热精品视频 | 无码人妻久久一区二区三区不卡 | 日产精品99久久久久久 | 亚洲区小说区激情区图片区 | 日本一本二本三区免费 | 伊人久久大香线蕉av一区二区 | 在线看片无码永久免费视频 | 日韩 欧美 动漫 国产 制服 | 丰满人妻翻云覆雨呻吟视频 | 亚洲色欲色欲天天天www | 少妇人妻av毛片在线看 | 风流少妇按摩来高潮 | 一本大道伊人av久久综合 | 粗大的内捧猛烈进出视频 | 99久久精品国产一区二区蜜芽 | 图片小说视频一区二区 | 国产国语老龄妇女a片 | 夜先锋av资源网站 | 99久久人妻精品免费一区 | 亚洲а∨天堂久久精品2021 | 国产熟妇另类久久久久 | 国产熟女一区二区三区四区五区 | 国产在线aaa片一区二区99 | 精品久久综合1区2区3区激情 | 国产凸凹视频一区二区 | 国产精品美女久久久网av | 国产亚洲人成a在线v网站 | 久久午夜无码鲁丝片午夜精品 | 亚洲一区二区三区 | 天天拍夜夜添久久精品 | 欧洲vodafone精品性 | 秋霞成人午夜鲁丝一区二区三区 | 荡女精品导航 | 一本色道婷婷久久欧美 | 国産精品久久久久久久 | 熟妇人妻中文av无码 | 国产精品理论片在线观看 | 国产片av国语在线观看 | 性色欲情网站iwww九文堂 | 日本肉体xxxx裸交 | 青春草在线视频免费观看 | 男女爱爱好爽视频免费看 | 国产无遮挡又黄又爽又色 | 国产精品久久久久久亚洲毛片 | 青青久在线视频免费观看 | 18禁黄网站男男禁片免费观看 | 无码吃奶揉捏奶头高潮视频 | 日日噜噜噜噜夜夜爽亚洲精品 | 人人妻人人澡人人爽人人精品 | 久久精品国产精品国产精品污 | 国产无av码在线观看 | 国产亚洲精品精品国产亚洲综合 | 国产色在线 | 国产 | 日本一区二区三区免费高清 | 色欲综合久久中文字幕网 | 国产精品久久国产三级国 | 十八禁视频网站在线观看 | 久久精品国产一区二区三区 | 欧美精品无码一区二区三区 | 图片小说视频一区二区 | 老子影院午夜精品无码 | 国产av一区二区三区最新精品 | 又粗又大又硬毛片免费看 | 国产热a欧美热a在线视频 | 图片小说视频一区二区 | 狠狠噜狠狠狠狠丁香五月 | 国产亚洲精品久久久闺蜜 | 国产亚洲日韩欧美另类第八页 | 亚洲成av人片在线观看无码不卡 | 色欲久久久天天天综合网精品 | 麻豆精品国产精华精华液好用吗 | 国内老熟妇对白xxxxhd | 欧美丰满熟妇xxxx性ppx人交 | 国产精品久久久午夜夜伦鲁鲁 | 少妇人妻偷人精品无码视频 | 日日摸夜夜摸狠狠摸婷婷 | 欧美一区二区三区 | 亚洲色在线无码国产精品不卡 | 国产亚洲欧美在线专区 | 日本xxxx色视频在线观看免费 | 国产精品亚洲lv粉色 | 老太婆性杂交欧美肥老太 | 国产精品久久久久9999小说 | 亚洲成熟女人毛毛耸耸多 | 窝窝午夜理论片影院 | 中文毛片无遮挡高清免费 | 天干天干啦夜天干天2017 | 国产人妻人伦精品1国产丝袜 | 国产亚洲人成在线播放 | 久久久久久av无码免费看大片 | 77777熟女视频在线观看 а天堂中文在线官网 | 影音先锋中文字幕无码 | 欧美成人高清在线播放 | 精品午夜福利在线观看 | 丰满人妻被黑人猛烈进入 | 亚洲人成网站在线播放942 | 亚洲欧美日韩综合久久久 | 国产片av国语在线观看 | 国产精品久久国产精品99 | 在线亚洲高清揄拍自拍一品区 | 欧美人与禽zoz0性伦交 | 国产成人综合色在线观看网站 | 亚洲日韩av一区二区三区四区 | 狠狠色色综合网站 | 免费中文字幕日韩欧美 | 嫩b人妻精品一区二区三区 | 无遮挡国产高潮视频免费观看 | 国产区女主播在线观看 | 少妇性荡欲午夜性开放视频剧场 | 中文字幕+乱码+中文字幕一区 | 又湿又紧又大又爽a视频国产 | 麻豆蜜桃av蜜臀av色欲av | 99re在线播放 | 亚洲欧美综合区丁香五月小说 | 国产在线精品一区二区三区直播 | 久久久亚洲欧洲日产国码αv | 精品国产精品久久一区免费式 | 久久久国产一区二区三区 | 国产精品高潮呻吟av久久 | 亚洲最大成人网站 | 国产suv精品一区二区五 | 成熟人妻av无码专区 | 国产网红无码精品视频 | 免费观看黄网站 | 中文无码伦av中文字幕 | 中文无码成人免费视频在线观看 | 高潮毛片无遮挡高清免费 | 人妻人人添人妻人人爱 | 水蜜桃亚洲一二三四在线 | 色综合天天综合狠狠爱 | 少妇被粗大的猛进出69影院 | 77777熟女视频在线观看 а天堂中文在线官网 | 成人精品一区二区三区中文字幕 | 性做久久久久久久久 | 久久亚洲中文字幕精品一区 | 亚洲日韩av片在线观看 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 国产欧美亚洲精品a | 久久99国产综合精品 | 天天爽夜夜爽夜夜爽 | av香港经典三级级 在线 | 国产亚洲精品精品国产亚洲综合 | 日本熟妇乱子伦xxxx | 无码福利日韩神码福利片 | 国产办公室秘书无码精品99 | 少妇高潮一区二区三区99 | 狠狠色丁香久久婷婷综合五月 | 久久久久亚洲精品中文字幕 | 曰韩少妇内射免费播放 | 久久午夜夜伦鲁鲁片无码免费 | 99久久精品日本一区二区免费 | 国产成人亚洲综合无码 | 乱中年女人伦av三区 | 国产亚洲人成a在线v网站 | 国产亚洲人成在线播放 | 国产精品国产三级国产专播 | 丰满人妻精品国产99aⅴ | 亚洲国产精品一区二区第一页 | 一区二区传媒有限公司 | 久久久国产一区二区三区 | 色欲久久久天天天综合网精品 | 亚洲色偷偷男人的天堂 | 曰韩无码二三区中文字幕 | av无码电影一区二区三区 | 日本丰满护士爆乳xxxx | 未满成年国产在线观看 | 中文亚洲成a人片在线观看 | 国产熟妇高潮叫床视频播放 | 熟妇女人妻丰满少妇中文字幕 | 无码av岛国片在线播放 | 大屁股大乳丰满人妻 | 一本无码人妻在中文字幕免费 | 久激情内射婷内射蜜桃人妖 | 东北女人啪啪对白 | 六十路熟妇乱子伦 | 欧美 日韩 亚洲 在线 | 亚洲日韩一区二区三区 | 六十路熟妇乱子伦 | 国语自产偷拍精品视频偷 | 精品欧洲av无码一区二区三区 | 狠狠色色综合网站 | 亚洲国产一区二区三区在线观看 | 久久久久久久久888 | 我要看www免费看插插视频 | 国产人妻久久精品二区三区老狼 | 午夜肉伦伦影院 | 国产精品igao视频网 | 无码乱肉视频免费大全合集 | 中文精品无码中文字幕无码专区 | 日本欧美一区二区三区乱码 | 久久国语露脸国产精品电影 | 久9re热视频这里只有精品 | 亚洲成a人一区二区三区 | 青春草在线视频免费观看 | 国产精品久久福利网站 | 欧美老人巨大xxxx做受 | 乌克兰少妇性做爰 |