在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

【鴻蒙】標準系統移植指南

王程 ? 來源:jf_75796907 ? 作者:jf_75796907 ? 2024-02-27 14:36 ? 次閱讀

標準系統移植指南

本文描述了移植一塊開發板的通用步驟,和具體芯片相關的詳細移植過程無法在此一一列舉。后續社區還會陸續發布開發板移植的實例供開發者參考。

定義開發板

本文以移植名為 MyProduct 的開發板為例講解移植過程,假定 MyProduct 是 MyProductVendor 公司的開發板,使用 MySoCVendor 公司生產的 MySOC 芯片作為處理器

定義產品

在 //vendor/MyProductVendor/{product_name} 名稱的目錄下創建一個 config.json 文件,該文件用于描述產品所使用的 SOC 以及所需的子系統。配置如下:
//vendor/MyProductVendor/MyProduct/config.json

{
    "product_name": "MyProduct",
    "version": "3.0",
    "type": "standard",
    "target_cpu": "arm",
    "ohos_version": "OpenHarmony 1.0",
    "device_company": "MyProductVendor",
    "board": "MySOC",
    "enable_ramdisk": true,
    "subsystems": [
      {
        "subsystem": "ace",
        "components": [
          { "component": "ace_engine_lite", "features":[] }
        ]
      },
	...
    ]
}

?
主要的配置內容

wKgaomXdgjKAKhZ3AAB_cNIsQM8276.png


已定義的子系統可以在“//build/subsystem_config.json”中找到。當然你也可以定制子系統。
這里建議先拷貝 Hi3516DV300 開發板的配置文件,刪除掉 hisilicon_products 這個子系統。這個子系統為 Hi3516DV300 SOC 編譯內核,顯然不適合 MySOC。

移植驗證

至此,你可以使用如下命令,啟動你產品的構建了:

./build.sh --product-name MyProduct 

構建完成后,可以在 //out/{device_name}/packages/phone/images 目錄下看到構建出來的 OpenHarmony 鏡像文件。

內核移植

這一步需要移植 Linux 內核,讓 Linux 內核可以成功運行起來。

為 SOC 添加內核構建的子系統

修改文件 //build/subsystem_config.json 增加一個子系統。配置如下:

 "MySOCVendor_products": {
    "project": "hmf/MySOCVendor_products",
    "path": "device/MySOCVendor/MySOC/build",
    "name": "MySOCVendor_products",
    "dir": "device/MySOCVendor"
  },

接著需要修改定義產品的配置文件 //vendor/MyProductVendor/MyProduct/config.json,將剛剛定義的子系統加入到產品中。

編譯內核

源碼中提供了 Linux 4.19 的內核,歸檔在 //kernel/linux-4.19。本節以該內核版本為例,講解如何編譯內核。
在子系統的定義中,描述了子系統構建的路徑 path,即 //device/MySOCVendor/MySOC/build。這一節會在這個目錄創建構建腳本,告訴構建系統如何構建內核。
建議的目錄結構:

├── build
│ ├── kernel
│ │     ├── linux
│ │           ├──standard_patch_for_4_19.patch // 基于4.19版本內核的補丁
│ ├── BUILD.gn
│ ├── ohos.build

?
BUILD.gn 是 subsystem 構建的唯一入口。
期望的構建結果

文件 文件說明
$root_build_dir/packages/phone/images/uImage 內核鏡像
$root_build_dir/packages/phone/images/uboot bootloader 鏡像

移植驗證

啟動編譯,驗證預期的 kernel 鏡像是否成功生成。

用戶態啟動引導

1.用戶態進程啟動引導總覽。

wKgZomXdgkKABprCAACLUk-8LXA977.png


系統上電加載內核后,按照以下流程完成系統各個服務和應用的啟動:

1.內核啟動 init 進程,一般在 bootloader 啟動內核時通過設置內核的 cmdline 來指定 init 的位置;如上圖所示的"init=/init root/dev/xxx"。
2.init 進程啟動后,會掛載 tmpfs,procfs,創建基本的 dev 設備節點,提供最基本的根文件系統。
3.init 繼續啟動 ueventd 監聽內核熱插拔事件,為這些設備創建 dev 設備節點;包括 block 設備各個分區設備都是通過此事件創建。
4.init 進程掛載 block 設備各個分區(system,vendor),開始掃描各個系統服務的 init 啟動腳本,并拉起各個 SA 服務。
5.samgr 是各個 SA 的服務注冊中心,每個 SA 啟動時,都需要向 samgr 注冊,每個 SA 會分配一個 ID,應用可以通過該 ID 訪問 SA。
6.foundation 是一個特殊的 SA 服務進程,提供了用戶程序管理框架及基礎服務;由該進程負責應用的生命周期管理。
7.由于應用都需要加載 JS 的運行環境,涉及大量準備工作,因此 appspawn 作為應用的孵化器,在接收到 foundation 里的應用啟動請求時,可以直接孵化出應用進程,減少應用啟動時間。
init。
init 啟動引導組件配置文件包含了所有需要由 init 進程啟動的系統關鍵服務的服務名、可執行文件路徑、權限和其他信息。每個系統服務各自安裝其啟動腳本到 /system/etc/init 目錄下。
新芯片平臺移植時,平臺相關的初始化配置需要增加平臺相關的初始化配置文件 /vendor/etc/init/init.{hardware}.cfg;該文件完成平臺相關的初始化設置,如安裝 ko 驅動,設置平臺相關的 /proc 節點信息。
init 相關進程代碼在 //base/startup/init_lite 目錄下,該進程是系統第一個進程,無其它依賴。

HDF 驅動移植

LCD

HDF 為 LCD 設計了驅動模型。支持一塊新的 LCD,需要編寫一個驅動,在驅動中生成模型的實例,并完成注冊。
這些 LCD 的驅動被放置在 //drivers/hdf_core/framework/model/display/driver/panel 目錄中。

1.創建 Panel 驅動
在驅動的 Init 方法中,需要調用 RegisterPanel 接口注冊模型實例。如:

int32_t XXXInit(struct HdfDeviceObject *object)
{
    struct PanelData *panel = CreateYourPanel();
    // 注冊
    if (RegisterPanel(panel) != HDF_SUCCESS) {
        HDF_LOGE("%s: RegisterPanel failed", __func__);
        return HDF_FAILURE;
    }
    return HDF_SUCCESS;
}
struct HdfDriverEntry g_xxxxDevEntry = {
    .moduleVersion = 1,
    .moduleName = "LCD_XXXX",
    .Init = XXXInit,
};
HDF_INIT(g_xxxxDevEntry);

?
2.配置加載 panel 驅動產品的所有設備信息被定義在文件 //vendor/MyProductVendor/MyProduct/config/device_info/device_info.hcs 中。修改該文件,在 display 的 host 中,名為 device_lcd 的 device 中增加配置。
注意:moduleName 要與 panel 驅動中的 moduleName 相同。

root {
    ...
    display :: host {
        device_lcd :: device {
            deviceN :: deviceNode {
                policy = 0;
                priority = 100;
                preload = 2;
                moduleName = "LCD_XXXX";
            }
        }
    }
}
?

觸摸屏

本節描述如何移植觸摸屏驅動。觸摸屏的驅動被放置在 //drivers/hdf_core/framework/model/input/driver/touchscreen 目錄中。移植觸摸屏驅動主要工作是向系統注冊 ChipDevice 模型實例。

1.創建觸摸屏器件驅動
在目錄中創建名為 touch_ic_name.c 的文件。代碼模板如下:注意:請替換 ic_name 為你所適配芯片的名稱。

#include "hdf_touch.h"
static int32_t HdfXXXXChipInit(struct HdfDeviceObject *device)
{
    ChipDevice *tpImpl = CreateXXXXTpImpl();
    if(RegisterChipDevice(tpImpl) != HDF_SUCCESS) {
        ReleaseXXXXTpImpl(tpImpl);
        return HDF_FAILURE;
    }
    return HDF_SUCCESS;
}
struct HdfDriverEntry g_touchXXXXChipEntry = {
    .moduleVersion = 1,
    .moduleName = "HDF_TOUCH_XXXX",
    .Init = HdfXXXXChipInit,
};
HDF_INIT(g_touchXXXXChipEntry);

?
其中 ChipDevice 中要提供若干方法。

wKgZomXdglKAUH2tAABE1CYFrrQ132.png

2.配置產品,加載器件驅動
產品的所有設備信息被定義在文件 //vendor/MyProductVendor/MyProduct/config/device_info/device_info.hcs 中。修改該文件,在名為 input 的 host 中,名為 device_touch_chip 的 device 中增加配置。注意:moduleName 要與觸摸屏驅動中的 moduleName 相同。

deviceN :: deviceNode {
    policy = 0;
    priority = 130;
    preload = 0;
    permission = 0660;
    moduleName = "HDF_TOUCH_XXXX";
    deviceMatchAttr = "touch_XXXX_configs";
}

?

WLAN

Wi-Fi 驅動分為兩部分,一部分負責管理 WLAN 設備,另一個部分負責處理 WLAN 流量。HDF WLAN 分別為這兩部分做了抽象。目前支持 SDIO 接口的 WLAN 芯片。
圖 1 WLAN 芯片

pYYBAGJ8c0uAd_ljAABWGzWaBpU736.png


支持一款芯片的主要工作是實現一個 ChipDriver 驅動。實現 HDF_WLAN_CORE 和 NetDevice 提供的接口。主要需要實現的接口有:

接口 定義頭文件 說明
HdfChipDriverFactory //drivers/hdf_core/framework/include/wifi/hdf_wlan_chipdriver_manager.h ChipDriver 的 Factory,用于支持一個芯片多個 Wi-Fi 端口
HdfChipDriver //drivers/hdf_core/framework/include/wifi/wifi_module.h 每個 WLAN 端口對應一個 HdfChipDriver,用來管理一個特定的 WLAN 端口
NetDeviceInterFace //drivers/hdf_core/framework/include/net/net_device.h 與協議棧之間的接口,如發送數據、設置網絡接口狀態等

建議適配按如下步驟操作:

創建 HDF 驅動建議將代碼放置在 //device/MySoCVendor/peripheral/wifi/chip_name/,文件模板如下:

static int32_t HdfWlanXXXChipDriverInit(struct HdfDeviceObject *device) {
    static struct HdfChipDriverFactory factory = CreateChipDriverFactory();
    struct HdfChipDriverManager *driverMgr = HdfWlanGetChipDriverMgr();
    if (driverMgr->RegChipDriver(&factory) != HDF_SUCCESS) {
        HDF_LOGE("%s fail: driverMgr is NULL!", __func__);
        return HDF_FAILURE;
    }
    return HDF_SUCCESS;
}
struct HdfDriverEntry g_hdfXXXChipEntry = {
    .moduleVersion = 1,
    .Init = HdfWlanXXXChipDriverInit,
    .Release = HdfWlanXXXChipRelease,
    .moduleName = "HDF_WIFI_CHIP_XXX"
};
HDF_INIT(g_hdfXXXChipEntry);
?

在 CreateChipDriverFactory 中,需要創建一個 HdfChipDriverFactory,接口如下:

接口 說明
const char *driverName 當前 driverName
int32_t (*InitChip)(struct HdfWlanDevice *device) 初始化芯片
int32_t (*DeinitChip)(struct HdfWlanDevice *device) 去初始化芯片
void (_ReleaseFactory)(struct HdfChipDriverFactory _factory) 釋放 HdfChipDriverFactory 對象
struct HdfChipDriver _(_Build)(struct HdfWlanDevice *device, uint8_t ifIndex) 創建一個 HdfChipDriver;輸入參數中,device 是設備信息,ifIndex 是當前創建的接口在這個芯片中的序號
void (_Release)(struct HdfChipDriver _chipDriver) 釋放 chipDriver
uint8_t (*GetMaxIFCount)(struct HdfChipDriverFactory *factory) 獲取當前芯片支持的最大接口數

HdfChipDriver 需要實現的接口有:

接口 說明
int32_t (*init)(struct HdfChipDriver *chipDriver, NetDevice *netDev) 初始化當前網絡接口,這里需要向 netDev 提供接口
int32_t (*deinit)(struct HdfChipDriver *chipDriver, NetDevice *netDev) 去初始化當前網絡接口
struct HdfMac80211BaseOps *ops WLAN 基礎能力接口集
struct HdfMac80211STAOps *staOps 支持 STA 模式所需的接口集
struct HdfMac80211APOps *apOps 支持 AP 模式所需要的接口集

2.編寫配置文件,描述驅動支持的設備。
在產品配置目錄下創建芯片的配置文件 //vendor/MyProductVendor/MyProduct/config/wifi/wlan_chip_chip_name.hcs。
注意: 路徑中的 vendor_name、product_name、chip_name 請替換成實際名稱。
模板如下:

root {
    wlan_config {
        chip_name :& chipList {
            chip_name :: chipInst {
                match_attr = "hdf_wlan_chips_chip_name"; /* 這是配置匹配屬性,用于提供驅動的配置根 */
                driverName = "driverName"; /* 需要與HdfChipDriverFactory中的driverName相同*/
                sdio {
                    vendorId = 0x0296;
                    deviceId = [0x5347];
                }
            }
        }
    }
}
?

3.編寫配置文件,加載驅動。
產品的所有設備信息被定義在文件 //vendor/MyProductVendor/MyProduct/config/device_info/device_info.hcs 中。修改該文件,在名為 network 的 host 中,名為 device_wlan_chips 的 device 中增加配置。
注意:moduleName 要與觸摸屏驅動中的 moduleName 相同。

deviceN :: deviceNode {
    policy = 0;
    preload = 2;
    moduleName = "HDF_WLAN_CHIPS";
    deviceMatchAttr = "hdf_wlan_chips_chip_name";
    serviceName = "driverName";
}

?
4.構建驅動

  • 創建內核菜單在 //device/MySoCVendor/peripheral 目錄中創建 Kconfig 文件,內容模板如下:
config DRIVERS_WLAN_XXX
    bool "Enable XXX WLAN Host driver"
    default n
    depends on DRIVERS_HDF_WIFI
    help
      Answer Y to enable XXX Host driver. Support chip xxx
?

接著修改文件 //drivers/hdf_core/adapter/khdf/linux/model/network/wifi/Kconfig,在文件末尾加入如下代碼將配置菜單加入內核中,如:

source "../../../../../device/MySoCVendor/peripheral/Kconfig"

?

  • 創建構建腳本
    //drivers/hdf_core/adapter/khdf/linux/model/network/wifi/Makefile 文件末尾增加配置,模板如下:
HDF_DEVICE_ROOT := $(HDF_DIR_PREFIX)/../device
obj-$(CONFIG_DRIVERS_WLAN_XXX) += $(HDF_DEVICE_ROOT)/MySoCVendor/peripheral/build/standard/

?
當在內核中開啟 DRIVERS_WLAN_XXX 開關時,會調用 //device/MySoCVendor/peripheral/build/standard/ 中的 makefile。

為了能讓大家更好的學習鴻蒙 (OpenHarmony) 開發技術,這邊特意整理了《鴻蒙 (OpenHarmony)開發學習手冊》,希望對大家有所幫助:

《鴻蒙(Harmony OS)開發學習手冊》

入門必看https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.應用開發導讀(ArKTS)
2.……

wKgaomXW6N2AJp9uAAQXRxEAprs547.png

HarmonyOS概念https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.系統定義
2.技術框架
3.技術特性
4.系統安全

wKgaomXW6OSAFcCRAAV2zd2X_1s891.png

快速入門https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.基本概念
2.構建第一個ArkTS應用
3.……

wKgZomXW6PuAA7wEAAKx6By_2Z8377.png

開發基礎知識https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.應用基礎知識
2.配置文件
3.應用數據管理
4.應用安全管理
5.應用隱私保護
6.三方應用調用管控機制
7.資源分類與訪問
8.學習ArkTS
9…

wKgZomXW6QaAM4niAAQzrXUUPik914.png

基于ArkTS 開發https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.Ability開發
2.UI開發
3.公共事件與通知
4.窗口管理
5.媒體
6.安全
7.網絡與鏈接
8.電話服務
9.數據管理
10.后臺任務(Background Task)管理
11.設備管理
12.設備使用信息統計
13.DFX
14.國際化開發
15.折疊屏系列
16………

wKgZomXW6RKATahiAAKz-zSMnR4040.png

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 系統移植
    +關注

    關注

    0

    文章

    16

    瀏覽量

    4879
  • 鴻蒙
    +關注

    關注

    57

    文章

    2469

    瀏覽量

    43657
  • HarmonyOS
    +關注

    關注

    79

    文章

    2006

    瀏覽量

    31832
收藏 人收藏

    評論

    相關推薦

    基于OpenHarmony標準系統的C++公共基礎類庫案例:ThreadPoll

    1、程序簡介該程序是基于OpenHarmony標準系統的C++公共基礎類庫的線程池處理:ThreadPoll。本案例完成如下工作:創建1個線程池,設置該線程池內部有1024個線程空間。啟動5個線程
    的頭像 發表于 02-10 18:09 ?216次閱讀
    基于OpenHarmony<b class='flag-5'>標準系統</b>的C++公共基礎類庫案例:ThreadPoll

    基于OpenHarmony標準系統的C++公共基礎類庫案例:Semaphore

    1、程序簡介該程序是基于OpenHarmony標準系統的C++公共基礎類庫的線程處理:Sempahore。本案例完成如下工作:(1)無名信號量使用方法定義1個無名信號量,1個供無名信號量管理
    的頭像 發表于 02-10 18:08 ?215次閱讀
    基于OpenHarmony<b class='flag-5'>標準系統</b>的C++公共基礎類庫案例:Semaphore

    AN136 基于GD32F30x系列的IEC60730 ClassB庫移植指南

    電子發燒友網站提供《AN136 基于GD32F30x系列的IEC60730 ClassB庫移植指南.pdf》資料免費下載
    發表于 01-17 16:22 ?1次下載
    AN136 基于GD32F30x系列的IEC60730 ClassB庫<b class='flag-5'>移植</b><b class='flag-5'>指南</b>

    基于GD32F3x0系列的IEC60730 ClassB庫移植指南

    電子發燒友網站提供《基于GD32F3x0系列的IEC60730 ClassB庫移植指南.pdf》資料免費下載
    發表于 01-17 14:41 ?0次下載
    基于GD32F3x0系列的IEC60730 ClassB庫<b class='flag-5'>移植</b><b class='flag-5'>指南</b>

    EE-241:SHARC DSP到TigerSHARC處理器代碼移植指南

    電子發燒友網站提供《EE-241:SHARC DSP到TigerSHARC處理器代碼移植指南.pdf》資料免費下載
    發表于 01-13 15:35 ?0次下載
    EE-241:SHARC DSP到TigerSHARC處理器代碼<b class='flag-5'>移植</b><b class='flag-5'>指南</b>

    AIGC入門及鴻蒙入門

    人工智能生成內容(AIGC)和鴻蒙系統是當前科技領域的兩個熱門話題。以下是對它們的入門指南: AIGC入門 1. 基礎概念: AIGC,全稱Artificial Intelligence
    發表于 01-13 10:32

    【新品體驗】貝啟科技BQ3568HM開源鴻蒙開發板免費試用

    貝啟科技BQ3568開源鴻蒙開發板是一款功能全面的開發板,搭載了RK3568鴻蒙系統主板和OpenHarmony標準系統,具備高性能處理器(Quad-core ARM Cortex-A
    發表于 12-12 17:13

    基于LabVIEW做自動校準系統開發的問題

    因工作需要,繼續開發一個電源自動校準系統,因為是新手,對于設計什么樣的循環架構適合這個應用場景感覺很吃力,主工作順序是:任務A~任務B-任務C-任務D,然后每個任務節點都會執行一組相同順序的操作:動作1-動作2-動作3-動作4,有沒有相關開發經驗的大神解答一下,謝謝。
    發表于 11-23 15:43

    Taro 鴻蒙技術內幕系列(二):如何讓 W3C 標準的 CSS跑在鴻蒙

    作者:京東零售 馬銀濤 ? 基于 Taro 打造的京東鴻蒙 APP 已跟隨鴻蒙 Next 系統公測,本系列文章將深入解析 Taro 如何實現使用 React 開發高性能鴻蒙應用的技術內
    的頭像 發表于 10-31 10:54 ?387次閱讀
    Taro <b class='flag-5'>鴻蒙</b>技術內幕系列(二):如何讓 W3C <b class='flag-5'>標準</b>的 CSS跑在<b class='flag-5'>鴻蒙</b>上

    【北京迅為】i.mx8mm嵌入式linux開發指南第四篇 嵌入式Linux系統移植篇第六十九章uboot移植

    【北京迅為】i.mx8mm嵌入式linux開發指南第四篇 嵌入式Linux系統移植篇第六十九章uboot移植
    的頭像 發表于 10-22 14:46 ?1019次閱讀
    【北京迅為】i.mx8mm嵌入式linux開發<b class='flag-5'>指南</b>第四篇 嵌入式Linux<b class='flag-5'>系統</b><b class='flag-5'>移植</b>篇第六十九章uboot<b class='flag-5'>移植</b>

    史無前例,移植V8虛擬機到純血鴻蒙系統

    Android系統使用V8,然而,鴻蒙系統卻沒有可以執行Roma框架的JS引擎,因此需要移植一個JS引擎到鴻蒙平臺。 二、
    的頭像 發表于 09-18 10:28 ?1535次閱讀
    史無前例,<b class='flag-5'>移植</b>V8虛擬機到純血<b class='flag-5'>鴻蒙</b><b class='flag-5'>系統</b>

    瑞芯微RK3566鴻蒙開發板OpenHarmony標準系統應用兼容性測試指導

    本文OpenHarmony標準系統應用兼容性測試指導,適用鴻蒙系統軟件開發測試的新手入門學習課程,設備為觸覺智能的瑞芯微RK3566開發板,型號Purple Pi OH。是Laval官方社區主薦的一款
    的頭像 發表于 09-10 11:56 ?885次閱讀
    瑞芯微RK3566<b class='flag-5'>鴻蒙</b>開發板OpenHarmony<b class='flag-5'>標準系統</b>應用兼容性測試指導

    OpenHarmony標準系統C++公共基礎類庫案例:HelloWorld

    1、程序簡介該程序是基于凌蒙派OpenHarmony-v3.2.1標準系統C++公共基礎類庫的簡單案例:HelloWorld。主要講解C++公共基礎類庫案例如何搭建和編譯。2、程序解析2.1、創建
    的頭像 發表于 08-13 08:23 ?728次閱讀
    OpenHarmony<b class='flag-5'>標準系統</b>C++公共基礎類庫案例:HelloWorld

    基于OpenHarmony標準系統的C++公共基礎類庫案例:ThreadPoll

    1、程序簡介 該程序是基于OpenHarmony標準系統的C++公共基礎類庫的線程池處理:ThreadPoll。 本案例完成如下工作: 創建1個線程池,設置該線程池內部有1024個線程空間。 啟動5
    發表于 08-12 11:42

    鴻蒙OpenHarmony南向:【Hi3516標準系統入門(命令行方式)】

    除小型系統外,Hi3516DV300開發板還支持標準系統。此章節簡要介紹如何使用命令行在Hi3516DV300開發板上進行標準系統的開發。
    的頭像 發表于 05-08 09:26 ?1112次閱讀
    <b class='flag-5'>鴻蒙</b>OpenHarmony南向:【Hi3516<b class='flag-5'>標準系統</b>入門(命令行方式)】
    主站蜘蛛池模板: 国产女主播在线播放一区二区 | 一级做a爱过程免费视 | a级毛片毛片免费很很综合 a级男女性高爱潮高清试 | 好紧好爽太大了h视频 | 无人区理论片手机看片 | 高清激情小视频在线观看 | 国产美女视频黄a视频免费全过程 | 欧美视频不卡一区二区三区 | 天堂资源在线播放 | 国模视频一区二区 | 久久香蕉综合色一综合色88 | 香蕉视频网站在线播放 | 色吧亚洲欧美另类 | 午夜小视频免费 | 狠狠色丁香久久婷婷综合丁香 | 免费国产综合视频在线看 | 噜噜噜噜天天狠狠 | 五月丁香啪啪 | 亚洲国产午夜看片 | 狠狠干狠狠艹 | 欧美性视频一区二区三区 | 在线观看视频网站 | 美女久久久| 香蕉久久精品 | 天天操夜夜操免费视频 | 午夜免费啪 | 国产性夜夜性夜夜爽91 | 四虎影院www | 黄色网在线播放 | 日本永久免费 | www.在线| 男女视频在线播放 | 成年女人毛片免费视频 | 国产三级一区 | 午夜看片影院在线观看 | 特级做a爰片毛片免费看一区 | 成年男人永久免费看片 | 免费看啪啪网站 | 四虎影院大全 | 8888奇米四色在线 | 伊人色综合久久天天爱 |