色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示
電子發燒友網>電子資料下載>電子資料>RT-FOTA基于RTT系統bootloader通用軟件

RT-FOTA基于RTT系統bootloader通用軟件

2022-04-15 | zip | 未知 | 次下載 | 2積分

資料介紹

授權協議 Apache-2.0
開發語言 C/C++
軟件類型 開源軟件

軟件簡介

RT-Thread 官方推出了 STM32 系列單片機的通用 bootloader, 在其網站可以通過網頁配置就可以生成 bootloader 的燒錄文件,使廣大嵌入式工程師不用編寫一行代碼,就能夠輕松完成自己產品的 bootloader 功能。但是由于 RTT 官方的 bootloader 軟件?RT-OTA?是商用性質,不公開源碼,不僅僅限制了在其他平臺的移植,而且也不方便加入產品的特定功能。本人軟件水平有限,但是基于對開源精神的崇拜和 RTT 多年的感情,蒙發出利用業余時間編寫一款開源的且基于 RTT 系統 bootloader 通用軟件,貢獻給大家。

由于 RTT 官方推出的 bootloader 名字叫 RT-OTA,因此為了蹭點 RTT 的流量,我這個 bootloader 名字就叫 RT-FOTA。

【RT-FOTA 的需求分析】

  • 開發基于 RTOS 的 bootloader 軟件,網上很多牛人會說 bootloader 最好是裸機程序編寫,就像 u-boot 一樣穩定和可靠。但我個人認為目前 32 位單片機資源豐富,RT-Thread 的穩定和可靠性不言而喻,加之 RTT 的組件豐富,后續功能拓展方便(比如加入網絡USB 功能)。因此我使用 RT-Thread 的閹割版本 rtt-nano 實現。

  • 兼容 RTT 官方的 rbl 文件:使用 RTT 官方的打包軟件生成下載文件,可以實現加密壓縮功能。由于個人水平問題,只能做到盡可能的兼容,比如 RBL 文件里面的 HASH_CODE 我就不知道怎么計算出來的。

  • 移植方便:由于 RT-FOTA 基于 RT-Thread 開發,因此只要你的平臺被 RT-Thread 支持,就可以很方便的移植到。

【RT-FOTA 主要的功能】

  • 支持 RTT 官方的 RBL 打包軟件,使用方式也一致。目前支持包括 CRC32、AES256、quicklz 和 fastlz 功能;
  • 支持命令行模式(FINSH 組件)和出廠固件恢復;
  • 支持 FLASH 分區(FAL 組件);
  • 支持功能擴展(RTT 組件);
  • 其他功能可自行方便擴展;

軟件開發目錄

軟件開發目錄參照 RTT 的目錄形式,如下圖所示:

poYBAGJWfGeAbXJlAAB7VBCLtT0941.png

我原本計劃添加 SCONS 進行編譯,但目前對 SCONS 的使用還不熟悉,下次再實現,因此暫時使用?MDK?完成。

可以看到我并未按照 RTT 官方推薦的使用 MDK 或 cube 生成 rtt-nano 的工程,原因是我有強迫癥,感覺 IDE 生成的目錄很不爽。

軟件配置說明

RT-FOTA 的軟件配置仍然集中在 rtconfig.h 中,其中一些. c 文件中有一些默認的配置宏,但可以根據需求進行修改。

/* RT-Thread config file */
#ifndef RT_CONFIG_H__
#define RT_CONFIG_H__

#define RT_THREAD_PRIORITY_MAX  	8
#define RT_TICK_PER_SECOND			1000
#define RT_ALIGN_SIZE   			4
#define RT_NAME_MAX	   				8

/* Kernel Device Object */
#define RT_USING_DEVICE
#define RT_USING_CONSOLE
#define RT_CONSOLEBUF_SIZE          512
#define RT_CONSOLE_DEVICE_NAME      "uart1"
#define RT_VER_NUM 					0x30102

#define RT_USING_CPU_FFS

/* RT-Thread Components */
#define RT_USING_COMPONENTS_INIT
#define RT_USING_USER_MAIN

#define RT_DEBUG_INIT 0
#define RT_USING_OVERFLOW_CHECK
// #define RT_USING_HOOK
// #define RT_USING_IDLE_HOOK

/* Software timers Configuration */
#define RT_USING_TIMER_SOFT         0
#if RT_USING_TIMER_SOFT == 0
#undef RT_USING_TIMER_SOFT
#endif

#define RT_TIMER_THREAD_PRIO		4
#define RT_TIMER_THREAD_STACK_SIZE	512
#define RT_TIMER_TICK_PER_SECOND	100



/* IPC(Inter-process communication) Configuration */
#define RT_USING_SEMAPHORE
#define RT_USING_MUTEX
//#define RT_USING_EVENT
//#define RT_USING_MAILBOX
//#define RT_USING_MESSAGEQUEUE

/* Memory Management Configuration */
#define RT_USING_HEAP
#define RT_USING_MEMHEAP
#define RT_USING_SMALL_MEM

/* Finsh Configuration */
#define RT_USING_FINSH
#define FINSH_USING_MSH
#define FINSH_USING_MSH_ONLY
#define __FINSH_THREAD_PRIORITY     5
#define FINSH_THREAD_PRIORITY       (RT_THREAD_PRIORITY_MAX / 8 * __FINSH_THREAD_PRIORITY + 1)
#define FINSH_THREAD_STACK_SIZE     2048
#define FINSH_USING_HISTORY
#define FINSH_HISTORY_LINES	        5
#define FINSH_USING_SYMTAB
#define FINSH_USING_AUTH			/* 可配置 FINSH 的 authencation 功能, 防止隨意使用 FINSH */
#define FINSH_DEFAULT_PASSWORD 		"radiation"
#define FINSH_PASSWORD_MIN			6
#define FINSH_PASSWORD_MAX 			16

/* Device Drivers */
#define RT_USING_PIN
#define RT_USING_SERIAL
// #define RT_SERIAL_USING_DMA
#define RT_USING_RTC
#define RT_USING_SPI
#define RT_USING_SFUD
#define RT_SFUD_USING_SFDP
#define RT_SFUD_USING_FLASH_INFO_TABLE
#define RT_USING_WDT

/* RTT 組件配置 */
/* fal package */
#define PKG_USING_FAL
#define FAL_DEBUG_CONFIG
#define FAL_DEBUG 0
#define FAL_PART_HAS_TABLE_CFG
#define FAL_USING_SFUD_PORT
#define FAL_USING_NOR_FLASH_DEV_NAME 	"nor_flash0"
#define PKG_USING_FAL_LATEST_VERSION
#define PKG_FAL_VER_NUM 				0x99999

/* Tinycrypt package */
#define TINY_CRYPT_AES

/* Compress package */
#define QLZ_COMPRESSION_LEVEL	3

/* Hardware Drivers Config */
#define SOC_FAMILY_STM32
#define SOC_SERIES_STM32F4
#define SOC_STM32F407ZE

/* On-chip Peripheral Drivers */
#define BSP_USING_GPIO
#define BSP_USING_ON_CHIP_FLASH
#define BSP_USING_ONCHIP_RTC
#define BSP_USING_UART
#define BSP_USING_UART1
#define BSP_USING_SPI
#define BSP_USING_SPI1

/* Onboard Peripheral Drivers */
#define BSP_DATAFALSH_CS_PIN 30

/* Board extended module Drivers */
#define BSP_RS485_DIR_PIN 52

/* RT-FOTA module define */
#define RT_FOTA_SW_VERSION      "1.0.0"

/* Enable Ymodem OTA */
#define PKG_USING_YMODEM_OTA

/* 分區名字可以根據自己的需求而定 */
/* FOTA application partition name */
#ifndef RT_FOTA_APP_PART_NAME
#define RT_FOTA_APP_PART_NAME   "app"
#endif
/* FOTA download partition name */
#ifndef RT_FOTA_FM_PART_NAME
#define RT_FOTA_FM_PART_NAME    "fm_area"
#endif
/* FOTA default partition name */
#ifndef RT_FOTA_DF_PART_NAME
#define RT_FOTA_DF_PART_NAME    "df_area"
#endif

/* 此兩項密碼必須與 RTT 的打包軟件設置一致 */
/* AES256 encryption algorithm option */
#define RT_FOTA_ALGO_AES_IV  	"0123456789ABCDEF"
#define RT_FOTA_ALGO_AES_KEY 	"0123456789ABCDEF0123456789ABCDEF"
#endif

RBL 文件說明

使用過 RTT 官方的 RT-OTA 組件的朋友都知道,下載的不是 bin 文件,而是需要通過 RTT 打包軟件 “裝飾” 成 rbl 文件之后,才能被 RT-OTA 識別。

pYYBAGJWfGiAHB7FAADZAQxySPk583.png

RTT 的打包軟件可以設置代碼加密和壓縮,其配置信息都存在 rbl 文件前 96 字節中:

rt-fota />fota show fm_area 0 96
00000000: 52 42 4C 00 00 02 00 00 5E A9 A4 5D 61 70 70 00
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 31 2E 30 2E
00000020: 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000030: 00 00 00 00 31 2E 30 2E 36 00 00 00 00 00 00 00
00000040: 00 00 00 00 00 00 00 00 00 00 00 00 43 33 29 0A
00000050: 47 08 F6 DA 84 BB 00 00 1C 84 00 00 C4 3D E3 B5

其具體含義如下:

typedef struct {
	char type[4];				/* RBL 字符頭 */
	rt_uint16_t fota_algo;		/* 算法配置: 表示是否加密或者使用了壓縮算法 */
	rt_uint8_t fm_time[6];		/* 原始 bin 文件的時間戳, 6 位時間戳, 使用了 4 字節, 包含年月日信息 */
	char app_part_name[16];		/* app 執行分區名 */
	char download_version[24];	/* 固件代碼版本號 */
	char current_version[24];	/* 這個域在 rbl 文件生成時都是一樣的,我用于表示 app 分區當前運行固件的版本號,判斷是否固件需要升級 */
	rt_uint32_t code_crc;		/* 代碼的 CRC32 校驗值, 它是的打包后的校驗值, 即 rbl 文件 96 字節后的數據 */
	rt_uint32_t hash_val;		/* 估計這個域是指的原始代碼本身的校驗值,但不知道算法,無法確認,故在程序中未使用 */
	rt_uint32_t raw_size;		/* 原始代碼的大小 */
	rt_uint32_t com_size;		/* 打包代碼的大小 */
	rt_uint32_t head_crc;		/* rbl 文件頭的 CRC32 校驗值,即 rbl 文件的前 96 字節 */
} rt_fota_part_head, *rt_fota_part_head_t;

開機界面

RT-FOTA 開機界面如下圖:

pYYBAGJWfGmALZnPAABKV5ispsM966.png

可以看出使用了 RTT 的 SFUD 和 FAL 組件,同時列出了分區變信息。

RT-FOTA 源碼公開,你想怎么改就怎么改, 不在受限制:)

最后一行是表示在 5 秒鐘內,按下 Enter 鍵,即 0x0d,就可以進入命令行模式:

pYYBAGJWfGqASHrbAABOQjIskOw973.png

由于 FINSH 具備 authencation 功能,可以設置 shell 密碼。具體詳見 RTT 相關文檔。

命令行模式

RT-FOTA 的命令行模式使用的 RTT 的 FINSH 組件, 除了 RTT 系統自帶命令外,還增加 fota 和 ymdown 命令:

**fota 命令 **

鍵入 fota 命令后回車即可看到幫助命令:

rt-fota />fota
Usage:
fota probe                       - probe RBL file of partiton
fota show partition addr size    - show 'size' bytes starting at 'addr'
fota clone des_part src_part     - clone src partition to des partiton
fota exec                        - execute application program

probe 參數可以打印出當分區的 RBL 信息:

rt-fota />fota probe
[I/fota] ===== RBL of fm_area partition =====
[I/fota] | App partition name |         app |
[I/fota] | Algorithm mode     |  AES && QLZ |
[I/fota] | Firmware version   |       1.0.3 |
[I/fota] | Code raw size      |       48004 |
[I/fota] | Code package size  |       33824 |
[I/fota] | Build Timestamp    |  1571072350 |
[I/fota] ===== RBL of df_area partition =====
[I/fota] | App partition name |         app |
[I/fota] | Algorithm mode     |  AES && QLZ |
[I/fota] | Firmware version   |       1.0.3 |
[I/fota] | Code raw size      |       48004 |
[I/fota] | Code package size  |       33824 |
[I/fota] | Build Timestamp    |  1571072350 |

這里列出了 fm_area 和 df_area 分區中 RBL 文件的主要信息項, 便于開發者查詢:

App partition name: 指的是 RTT 打包文件時設置的分區名

Algorithm mode?: 指的是 RTT 打包文件使用那些算法:AES256/Quicklz/Fastlz

Firmware version?: 指的是 RTT 打包文件設置的固件版本號

Code raw size?: 指的代碼原始大小

Code package size?: 指的代碼打包后的大小

Build Timestamp?: 指的代碼生成的時間戳

show 參數可以顯示分區的具體實際數據,方便調試與檢查:

rt-fota />fota show app 0 96
00000000: C0 08 00 20 E5 57 02 08 5D 04 02 08 5F 04 02 08
00000010: 63 04 02 08 67 04 02 08 6B 04 02 08 00 00 00 00
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 6F 04 02 08
00000030: 71 04 02 08 00 00 00 00 73 04 02 08 75 04 02 08
00000040: FF 57 02 08 FF 57 02 08 FF 57 02 08 49 55 02 08
00000050: FF 57 02 08 FF 57 02 08 FF 57 02 08 FF 57 02 08

這里列出了 app 分區 0 到 96 字節的數據

**clone 參數是實現分區數據克隆 **

rt-fota />fota clone fm_area df_area
Clone df_area partition to fm_area partition:
#########################################################
#########################################################
#########################################################
#########################################################
############################
Clone partition success, total 1048576 bytes!

這里是將 df _ area 分區數據完整的克隆島 fm _ area 中。

**exec 參數是用于執行 app 分區的應用代碼 **

rt-fota />fota exec
[I/fota] Implement application now.
 LCD ID:5510

**ymdown 命令 **

ymdown?是基于 Ymodem 協議的下載命令,使用 RTT 的 ymodem 和 ymodem _ ota 組件實現,其中將 ymodem _ ota.c 中的?DEFAULT_DOWNLOAD_PART?設置為需要默認使用分區名,即在使用?ymdown?不帶參數的情況下就下載到?DEFAULT_DOWNLOAD_PART?分區,也可加分區名作為參數指定下載位置。

rt-fota />ymdown
Default save firmware on download partition.
Warning: Ymodem has started! This operator will not recovery.
Please select the ota firmware file and use Ymodem to send.
CCCCCC
Starting ymodem transfer.  Press Ctrl+C to cancel.
  100%      33 KB    6 KB/s 00:00:05       0 Errors

Download firmware to flash success.
Download firmware verify........[OK]
Reset system and apply new firmware.

下載完成后,會自動復位重新啟動,將新固件搬運到 app 分區中:

 ____ _____      _____ ___  _____  _
|  _ \_   _|    |  ___/ _ \ _   _|/ \
| |_) || |_____ | |_  || ||  | | / _ \
|  _ < | |_____ |  _| ||_||  | |/ ___ \
|_| \_\|_|      |_|   \___/  |_/_/   \_\
2016 - 2019 Copyright by Radiation @ warfalcon
Version: 1.0.0 build Oct 18 2019

[SFUD] Find a Winbond flash chip. Size is 16777216 bytes.
[SFUD] nor_flash0 flash device is initialize success.
[I/FAL] ==================== FAL partition table ====================
[I/FAL] | name    | flash_dev    |   offset   |    length  |
[I/FAL] -------------------------------------------------------------
[I/FAL] | app     | onchip_flash | 0x00020000 | 0x000e0000 |
[I/FAL] | fm_area | nor_flash0   | 0x00000000 | 0x00100000 |
[I/FAL] | df_area | nor_flash0   | 0x00100000 | 0x00100000 |
[I/FAL] =============================================================
[I/FAL] RT-Thread Flash Abstraction Layer (V0.4.0) initialize success.
Please press [Enter] key into shell mode in 5 secs:
[I/fota] Partition[app] erase start:
[I/fota] Start to copy firmware from fm_area to app partition:
############
[I/fota] Upgrade success, total 48004 bytes.
[I/fota] Copy firmware version Success!
[I/fota] Implement application now.
 LCD ID:5510

出廠固件恢復

恢復出廠固件的方式比較多,本人多年的工程實踐經驗,傾向于使用外部按鍵長按后進行出廠固件恢復。出廠固件存儲在 df _ area 分區中(分區名在代碼中任意設置),長按按鍵 10s 后 (長按時間在代碼中任意設置),RT-FOTA 會自動解密解壓 df _ area 分區代碼,并搬運到 app 分區進行執行。

Default firmware key pressed:
>>>>>>>>>>
[I/fota] Partition[app] erase start:
[I/fota] Start to copy firmware from df_area to app partition:
############
[I/fota] Upgrade success, total 48004 bytes.
[I/fota] Implement application now.
 LCD ID:5510

RT-FOTA 移植

RT-FOTA 移植很簡單,只要 RT-Thread 源碼包中有你的平臺的 BSP 包即可:)

RT-FOTA 中使用的各種組件的修改也很簡單,比如 FAL 和 SFUD 就可以參照 RTT 官方說明,SignalLED 參照源碼包里的 README.md 即可。

RT-FOTA 可以直接使用在 RT-Thread 的完整版搭載,只需要將 * rt _ fota.c*、*rt _ fota.h * 和 * rt _ fota_crc.c * 放入工程中即可實現,然后用 env 配置相關組件即可。

編譯下載

雙擊 bootloader.uvprojx 文件,打開 MDK5 工程,編譯并下載程序到開發板。

工程默認配置使用 JLINK 仿真器下載程序,點擊下載按鈕即可下載程序到開發板

運行結果

下載程序成功之后,系統 RT-FOTA 會運行:

  • 啟動后 LED 會常亮;
  • 如果進入 shell 模式, LED 會 1Hz 閃爍;
  • 如果進入 upgrade 模式, LED 會 10Hz 閃爍;

連接目標板的串口 1 到 PC , 在終端工具里打開相應的串口(115200-8-1-N),復位設備后,可以看到 RT-FOTA 的輸出信息:

 ____ _____      _____ ___  _____  _
|  _ \_   _|    |  ___/ _ \ _   _|/ \
| |_) || |_____ | |_  || ||  | | / _ \
|  _ < | |_____ |  _| ||_||  | |/ ___ \
|_| \_\|_|      |_|   \___/  |_/_/   \_\
2016 - 2019 Copyright by Radiation @ warfalcon
Version: 1.0.0 build Oct 18 2019

[SFUD] Find a Winbond flash chip. Size is 16777216 bytes.
[SFUD] nor_flash0 flash device is initialize success.
[I/FAL] ==================== FAL partition table ====================
[I/FAL] | name    | flash_dev    |   offset   |    length  |
[I/FAL] -------------------------------------------------------------
[I/FAL] | app     | onchip_flash | 0x00020000 | 0x000e0000 |
[I/FAL] | fm_area | nor_flash0   | 0x00000000 | 0x00100000 |
[I/FAL] | df_area | nor_flash0   | 0x00100000 | 0x00100000 |
[I/FAL] =============================================================
[I/FAL] RT-Thread Flash Abstraction Layer (V0.4.0) initialize success.

注意事項

  • RT-FOTA 使用正點原子的探索者開發板,如果要運行到其他目標板,可能需要修改相關設置;

  • 代碼中使用的硬件有 usart0、spi0、PE4(key0)、PF9(led0);

  • 由于業余時間開發,文檔逐步完善,但只要有一定編程基礎的朋友,開代碼注釋即可知道如果進行相關修改;

?

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1VCC啟動電路(可下載)
  2. 748.32 KB  |  2次下載  |  免費
  3. 2TDA7850音頻功率放大器英文手冊
  4. 0.39 MB   |  1次下載  |  免費
  5. 3HAC1108TS型LVCMOS時鐘緩沖器產品說明書
  6. 386.75 KB  |  1次下載  |  免費
  7. 460KW電機控制器硬件驅動電路設計(可下載)
  8. 720.01 KB  |  1次下載  |  免費
  9. 5LT7404FJ-X N溝道增強型功率MOSFET規格書
  10. 1.48 MB   |  次下載  |  免費
  11. 6LTH004FK互補增強型功率MOSFET規格書
  12. 1.39 MB   |  次下載  |  免費
  13. 7LT1756SJ N溝道增強型場效應晶體管規格書
  14. 0.94 MB   |  次下載  |  免費
  15. 8廣州唯創電子WTK6900HC語音識別芯片資料
  16. 1.14 MB  |  次下載  |  免費

本月

  1. 1STM32CubeMX用于STM32配置和初始化C代碼生成
  2. 21.90 MB   |  627次下載  |  免費
  3. 2STM32開發板教程之STM32開發指南免費下載
  4. 24.88 MB   |  176次下載  |  3 積分
  5. 3EN60335-1安規標準 中文版本
  6. 1.86 MB   |  53次下載  |  1 積分
  7. 4OAH0428最新規格書(中文)
  8. 2.52 MB   |  28次下載  |  10 積分
  9. 5Altium-常用3D封裝庫(Step)接插件篇
  10. 4.95 MB   |  26次下載  |  免費
  11. 6UHV系列雷電沖擊電壓發生器試驗裝置詳細說明使用
  12. 1.07 MB   |  17次下載  |  免費
  13. 7介紹一些常用的電子元器件
  14. 3.20 MB   |  8次下載  |  免費
  15. 8麻將機升降電路
  16. 0.12 MB   |  6次下載  |  1 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935124次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420063次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233088次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191371次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183336次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81583次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73814次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65988次下載  |  10 積分
主站蜘蛛池模板: 一个人免费观看完整视频日本 | 狠狠操伊人| 久久青草影院 | 一本二卡三卡四卡乱码麻豆 | 国产精品亚洲高清一区二区 | 九九热精品视频在线观看 | 天天色天天综合网 | 午夜免费啪视频观看视频 | 黄桃AV无码免费一区二区三区 | 国产性夜夜性夜夜爽91 | 国产精品亚洲AV毛片一区二区三区 | 91国在线啪精品一区 | 毛篇片在线观看 | 国产女人91精品嗷嗷嗷嗷 | 一区二区三区无码高清视频 | 男人狂躁进女人免费视频公交 | 99久久国语露脸精品国产 | 97久久超碰中文字幕 | WWW国产色情在线观看APP | 一本到高清视频在线观看三区 | 97久久国产露脸精品国产 | 国产精品高清m3u8在线播放 | 午夜深情在线观看免费 | 日韩人妻无码精品久久中文字幕 | AV天堂午夜精品蜜臀AV | 免费国产成人手机在线观看 | gogo免费在线观看 | 亚洲国产成人精品无码区99 | 世界上第一个得抑郁症的人是谁 | 永久免费的无码中文字幕 | 99久久夜色精品国产亚洲AV卜 | 国产AV无码一二三区视频 | 午夜国产高清精品一区免费 | 色翁荡息又大又硬又粗又爽电影 | 在线播放一区 | 国产高清亚洲日韩字幕一区 | 精品网站一区二区三区网站 | 精精国产www视频在线观看免费 | 5g天天奭视频 | 窝窝色资源站 | 国产又爽又黄又不遮挡视频 |