精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何用 Rust 編寫一個(gè) Linux 內(nèi)核模塊

開發(fā) 后端 Linux
近些年來 Rust 語言由于其內(nèi)存安全性和性能等優(yōu)勢(shì)得到了很多關(guān)注,尤其是 Linux 內(nèi)核也在準(zhǔn)備將其集成到其中,因此,我們特邀阿里云工程師蘇子彬?yàn)槲覀兘榻B一下如何在 Linux 內(nèi)核中集成 Rust 支持。

編者按:近些年來 Rust 語言由于其內(nèi)存安全性和性能等優(yōu)勢(shì)得到了很多關(guān)注,尤其是 Linux 內(nèi)核也在準(zhǔn)備將其集成到其中,因此,我們特邀阿里云工程師蘇子彬?yàn)槲覀兘榻B一下如何在 Linux 內(nèi)核中集成 Rust 支持。 

2021 年 4 月 14 號(hào),一封主題名為《Rust support》的郵件出現(xiàn)在 LKML 郵件組中。這封郵件主要介紹了向內(nèi)核引入 Rust 語言支持的一些看法以及所做的工作。郵件的發(fā)送者是 Miguel Ojeda,為內(nèi)核中 Compiler attributes、.clang-format 等多個(gè)模塊的維護(hù)者,也是目前 Rust for Linux 項(xiàng)目的維護(hù)者。

Rust for Linux 項(xiàng)目目前得到了 Google 的大力支持Miguel Ojeda 當(dāng)前的全職工作就是負(fù)責(zé) Rust for Linux 項(xiàng)目。

長期以來,內(nèi)核使用 C 語言和匯編語言作為主要的開發(fā)語言,部分輔助語言包括 Python、Perl、shell 被用來進(jìn)行代碼生成、打補(bǔ)丁、檢查等工作。2016 年 Linux 25 歲生日時(shí),在對(duì) Linus Torvalds 的一篇 采訪中,他就曾表示過:

這根本不是一個(gè)新現(xiàn)象。我們有過使用 Modula-2 或 Ada 的系統(tǒng)人員,我不得不說 Rust 看起來比這兩個(gè)災(zāi)難要好得多。

我對(duì) Rust 用于操作系統(tǒng)內(nèi)核并不信服(雖然系統(tǒng)編程不僅限于內(nèi)核),但同時(shí),毫無疑問,C 有很多局限性。

在最新的對(duì) Rust support 的 RFC 郵件的回復(fù)中,他更是說:

所以我對(duì)幾個(gè)個(gè)別補(bǔ)丁做了回應(yīng),但總體上我不討厭它。

沒有用他特有的回復(fù)方式來反擊,應(yīng)該就是暗自喜歡了吧。

目前 Rust for Linux 依然是一個(gè)獨(dú)立于上游的項(xiàng)目,并且主要工作還集中的驅(qū)動(dòng)接口相關(guān)的開發(fā)上,并非一個(gè)完善的項(xiàng)目。

項(xiàng)目地址: https://github.com/Rust-for-Linux/linux

為什么是 Rust

在 Miguel Ojeda 的第一個(gè) RFC 郵件中,他已經(jīng)提到了 “Why Rust”,簡單總結(jié)下:

  • 安全子集safe subset中不存在未定義行為,包括內(nèi)存安全和數(shù)據(jù)競爭;
  • 更加嚴(yán)格的類型檢測(cè)系統(tǒng)能夠進(jìn)一步減少邏輯錯(cuò)誤;
  • 明確區(qū)分 safe 和 unsafe 代碼;
  • 更加面向未來的語言:sum 類型、模式匹配、泛型、RAII、生命周期、共享及專屬引用、模塊與可見性等等;
  • 可擴(kuò)展的獨(dú)立標(biāo)準(zhǔn)庫;
  • 集成的開箱可用工具:文檔生成、代碼格式化、linter 等,這些都基于編譯器本身。

編譯支持 Rust 的內(nèi)核

根據(jù) Rust for Linux 文檔,編譯一個(gè)包含 Rust 支持的內(nèi)核需要如下步驟:

  1. 安裝 rustc 編譯器。Rust for Linux 不依賴 cargo,但需要最新的 beta 版本的 rustc。使用 rustup命令安裝:

    1. rustup default beta-2021-06-23
  2. 安裝 Rust 標(biāo)準(zhǔn)庫的源碼。Rust for Linux 會(huì)交叉編譯 Rust 的 core 庫,并將這兩個(gè)庫鏈接進(jìn)內(nèi)核鏡像。

    1. rustup component add rust-src
  3. 安裝 libclang 庫。libclang 被 bindgen 用做前端,用來處理 C 代碼。libclang 可以從 llvm 官方主頁 下載預(yù)編譯好的版本。

  4. 安裝 bindgen 工具,bindgen 是一個(gè)自動(dòng)將 C 接口轉(zhuǎn)為 RustFFI 接口的庫:

    1. cargo install --locked --version 0.56.0 bindgen
  5. 克隆最新的 Rust for Linux 代碼:

    1. git clone https://github.com/Rust-for-Linux/linux.git
  6. 配置內(nèi)核啟用 Rust 支持:

    1. Kernel hacking
    2. -> Sample kernel code
    3. -> Rust samples
  7. 構(gòu)建:

    1. LIBCLANG_PATH=/path/to/libclang make -j LLVM=1 bzImage

    這里我們使用 clang 作為默認(rèn)的內(nèi)核編譯器,使用 gcc 理論上是可以的,但還處于 早期實(shí)驗(yàn) 階段。

Rust 是如何集成進(jìn)內(nèi)核的

目錄結(jié)構(gòu)

為了將 Rust 集成進(jìn)內(nèi)核中,開發(fā)者首先對(duì) Kbuild 系統(tǒng)進(jìn)行修改,加入了相關(guān)配置項(xiàng)來開啟/關(guān)閉 Rust 的支持。

此外,為了編譯 rs 文件,添加了一些 Makefile 的規(guī)則。這些修改分散在內(nèi)核目錄中的不同文件里。

Rust 生成的目標(biāo)代碼中的符號(hào)會(huì)因?yàn)?nbsp;Mangling 導(dǎo)致其長度超過同樣的 C 程序所生成符號(hào)的長度,因此,需要對(duì)內(nèi)核的符號(hào)長度相關(guān)的邏輯進(jìn)行補(bǔ)丁。開發(fā)者引入了 “大內(nèi)核符號(hào)”的概念,用來在保證向前兼容的情況下,支持 Rust 生成的目標(biāo)文件符號(hào)長度。

其他 Rust 相關(guān)的代碼都被放置在了 rust 目錄下。

在 Rust 中使用 C 函數(shù)

Rust 提供 FFI(外部函數(shù)接口Foreign Function Interface)用來支持對(duì) C 代碼的調(diào)用。Bindgen 是一個(gè) Rust 官方的工具,用來自動(dòng)化地從 C 函數(shù)中生成 Rust 的 FFI 綁定。內(nèi)核中的 Rust 也使用該工具從原生的內(nèi)核 C 接口中生成 Rust 的 FFI 綁定。

  1. quiet_cmd_bindgen = BINDGEN $@
  2. cmd_bindgen = \
  3. $(BINDGEN) $< $(shell grep -v '^\#\|^$$' $(srctree)/rust/bindgen_parameters) \
  4. --use-core --with-derive-default --ctypes-prefix c_types \
  5. --no-debug '.*' \
  6. --size_t-is-usize -o $@ -- $(bindgen_c_flags_final) -DMODULE
  7.  
  8. $(objtree)/rust/bindings_generated.rs: $(srctree)/rust/kernel/bindings_helper.h \
  9. $(srctree)/rust/bindgen_parameters FORCE
  10. $(call if_changed_dep,bindgen)

ABI

Rust 相關(guān)的代碼會(huì)單獨(dú)從 rs 編譯為 .o,生成的目標(biāo)文件是標(biāo)準(zhǔn)的 ELF 文件。在鏈接階段,內(nèi)核的鏈接器將 Rust 生成的目標(biāo)文件與其他 C 程序生成的目標(biāo)文件一起鏈接為內(nèi)核鏡像文件。因此,只要 Rust 生成的目標(biāo)文件 ABI 與 C 程序的一致,就可以無差別的被鏈接(當(dāng)然,被引用的符號(hào)還是要存在的)。

Rust 的 alloc 與 core 庫

目前 Rust for Linux 依賴于 core 庫。在 core 中定義了基本的 Rust 數(shù)據(jù)結(jié)構(gòu)與語言特性,例如熟悉的 Option<> 和 Result<> 就是 core 庫所提供。

這個(gè)庫被交叉編譯后被直接鏈接進(jìn)內(nèi)核鏡像文件,這也是導(dǎo)致啟用 Rust 的內(nèi)核鏡像文件尺寸較大的原因。在未來的工作中,這兩個(gè)庫會(huì)被進(jìn)一步被優(yōu)化,去除掉某些無用的部分,例如浮點(diǎn)操作,Unicode 相關(guān)的內(nèi)容,F(xiàn)utures 相關(guān)的功能等。

之前的 Rust for Linux 項(xiàng)目還依賴于 Rust 的 alloc 庫。Rust for Linux 定義了自己的 GlobalAlloc 用來管理基本的堆內(nèi)存分配。主要被用來進(jìn)行堆內(nèi)存分配,并且使用 GFP_KERNEL 標(biāo)識(shí)作為默認(rèn)的內(nèi)存分配模式。

不過在在最新的 拉取請(qǐng)求 中,社區(qū)已經(jīng)將移植并修改了 Rust的 alloc 庫,使其能夠在盡量保證與 Rust 上游統(tǒng)一的情況下,允許開發(fā)者定制自己的內(nèi)存分配器。不過目前使用自定義的 GFP_ 標(biāo)識(shí)來分配內(nèi)存依然是不支持的,但好消息是這個(gè)功能正在開發(fā)中。

“Hello World” 內(nèi)核模塊

用一個(gè)簡單的 Hello World 來展示如何使用 Rust 語言編寫驅(qū)動(dòng)代碼,hello_world.rs:

  1. #![no_std]
  2. #![feature(allocator_api, global_asm)]
  3.  
  4. use kernel::prelude::*;
  5.  
  6. module! {
  7. type: HelloWorld,
  8. name: b"hello_world",
  9. author: b"d0u9",
  10. description: b"A simple hello world example",
  11. license: b"GPL v2",
  12. }
  13.  
  14. struct HelloWorld;
  15.  
  16. impl KernelModule for HelloWorld {
  17. fn init() -> Result<Self> {
  18. pr_info!("Hello world from rust!\n");
  19.  
  20. Ok(HelloWorld)
  21. }
  22. }
  23.  
  24. impl Drop for HelloWorld {
  25. fn drop(&mut self) {
  26. pr_info!("Bye world from rust!\n");
  27. }
  28. }

與之對(duì)應(yīng)的 Makefile

  1. obj-m := hello_world.o

構(gòu)建:

  1. make -C /path/to/linux_src M=$(pwd) LLVM=1 modules

之后就和使用普通的內(nèi)核模塊一樣,使用 insmod 工具或者 modprobe 工具加載就可以了。在使用體驗(yàn)上是沒有區(qū)別的。

module! { } 宏

這個(gè)宏可以被認(rèn)為是 Rust 內(nèi)核模塊的入口,因?yàn)樵谄渲卸x了一個(gè)內(nèi)核模塊所需的所有信息,包括:AuthorLicenseDescription 等。其中最重要的是 type 字段,在其中需要指定內(nèi)核模塊結(jié)構(gòu)的名字。在這個(gè)例子中:

  1. module! {
  2. ...
  3. type: HelloWorld,
  4. ...
  5. }
  6.  
  7. struct HelloWorld;

module_init() 與 module_exit()

在使用 C 編寫的內(nèi)核模塊中,這兩個(gè)宏定義了模塊的入口函數(shù)與退出函數(shù)。在 Rust 編寫的內(nèi)核模塊中,對(duì)應(yīng)的功能由 trait KernelModule 和 trait Drop 來實(shí)現(xiàn)。trait KernelModule 中定義 init() 函數(shù),會(huì)在模塊驅(qū)動(dòng)初始化時(shí)被調(diào)用;trait Drop 是 Rust 的內(nèi)置 trait,其中定義的 drop() 函數(shù)會(huì)在變量生命周期結(jié)束時(shí)被調(diào)用。

編譯與鏈接

所有的內(nèi)核模塊文件會(huì)首先被編譯成 .o 目標(biāo)文件,之后由內(nèi)核鏈接器將這些 .o 文件和自動(dòng)生成的模塊目標(biāo)文件 .mod.o 一起鏈接成為 .ko 文件。這個(gè) .ko 文件符合動(dòng)態(tài)庫 ELF 文件格式,能夠被內(nèi)核識(shí)別并加載。

其他

完整的介紹 Rust 是如何被集成進(jìn)內(nèi)核的文章可以在 我的 Github 上找到,由于寫的倉促,可能存在一些不足,還請(qǐng)見諒。

作者簡介

蘇子彬,阿里云 PAI 平臺(tái)開發(fā)工程師,主要從事 Linux 系統(tǒng)及驅(qū)動(dòng)的相關(guān)開發(fā),曾為 PAI 平臺(tái)編寫 FPGA 加速卡驅(qū)動(dòng)。 

 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2014-07-24 14:35:26

Linux內(nèi)核模塊

2018-06-19 09:07:57

Linux內(nèi)核模塊

2010-01-22 11:01:04

linux內(nèi)核模塊

2011-08-29 15:12:24

UbuntuLinux模塊

2023-05-08 08:05:42

內(nèi)核模塊Linux

2019-07-08 20:00:35

Linux內(nèi)核模塊

2010-04-12 11:19:47

編譯內(nèi)核模塊

2021-09-03 08:44:51

內(nèi)核模塊Linux社區(qū)

2022-05-14 17:01:21

開源LinuxNVIDIA

2009-12-17 15:28:32

內(nèi)核模塊編譯

2021-03-11 12:19:39

Linux運(yùn)維Linux系統(tǒng)

2022-05-12 09:58:31

LinuxNVIDIA開源

2018-05-14 09:48:45

Linux內(nèi)核模塊Kgotobed

2021-01-03 16:30:34

Rust編程語言

2013-09-10 09:54:50

2009-09-11 08:44:36

2023-02-26 01:37:57

goORM代碼

2020-05-13 21:11:37

KVM架構(gòu)工具

2018-10-15 10:10:41

Linux內(nèi)核補(bǔ)丁

2024-04-16 08:09:36

JavapulsarAPI
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲天堂av资源在线观看| 亚洲色图狠狠干| 中文字幕av亚洲精品一部二部| 日韩一区二区精品| 精品国产一二三四区| 国产视频网站在线| 国产一区二区精品久久99| 久久久噜噜噜久久中文字免| 三上悠亚影音先锋| 精品视频在线观看免费观看| 第一福利永久视频精品 | 成人av无码一区二区三区| 亚洲欧洲视频| 日韩一区二区欧美| 久久人人妻人人人人妻性色av| 青青在线精品| 好吊成人免视频| 国产1区2区3区中文字幕| 美女欧美视频在线观看免费 | 欧美亚洲国产怡红院影院| 91麻豆天美传媒在线| 水莓100在线视频| 国产乱一区二区| 国产成人精品久久久| 久久精品国产av一区二区三区| 欧美日韩高清| 日韩麻豆第一页| 中文字幕在线观看91| 91国内外精品自在线播放| 精品成人乱色一区二区| 久久天天东北熟女毛茸茸| 美国一级片在线免费观看视频 | 最新亚洲激情| 九九九久久久久久| 羞羞在线观看视频| 成人在线亚洲| 亚洲香蕉成视频在线观看| 成人免费毛片日本片视频| 一区二区三区国产好| 欧美精品在线视频| 在线观看av日韩| 欧美gay视频| 色诱亚洲精品久久久久久| 无码粉嫩虎白一线天在线观看| 麻豆av免费在线观看| 国产肉丝袜一区二区| 开心色怡人综合网站| 涩涩视频免费看| 国产成人精品免费一区二区| 91成人理论电影| 国产麻豆免费视频| 国内成人免费视频| 91牛牛免费视频| 91无套直看片红桃| 久久国产精品无码网站| 国产精品一区二区久久久| 中文字幕日本人妻久久久免费| 日韩精彩视频在线观看| 国产精品国产三级国产aⅴ浪潮| 国产亚洲欧美在线精品| 丝袜亚洲另类欧美| 国产精品久久9| 中文字幕人妻一区二区三区视频| 美女视频黄a大片欧美| 国产精品亚洲第一区| 一区二区三区黄色片| 精品一区二区三区欧美| 2019国产精品视频| 韩国av电影在线观看| 97超碰欧美中文字幕| 欧美精品与人动性物交免费看| 国产黄色片在线观看| 中文在线一区二区| 黄色影视在线观看| 成人福利电影| 色94色欧美sute亚洲13| 性欧美1819| 久久9999免费视频| 亚洲精品久久久久久久久久久久| 欧美多人猛交狂配| 999国产精品视频| 欧美激情精品久久久久久久变态| 国产黄色片免费看| 日本va欧美va欧美va精品| 91久久久久久国产精品| 黄色aaa大片| 国产视频一区二区在线| 一道本在线观看视频| 成人性生交大片免费看在线播放| 色哟哟国产精品免费观看| 亚洲黄色av片| 全球av集中精品导航福利| 中文字幕亚洲精品| 伊人365影院| 日韩精品91亚洲二区在线观看 | 九九久久国产精品| 日韩久久中文字幕| 国产在线麻豆精品观看| 精品视频在线观看| а√天堂8资源在线官网| 精品福利在线观看| 中文字幕亚洲影院| 亚洲系列另类av| 欧美国产第一页| 亚洲av无码不卡| 丁香桃色午夜亚洲一区二区三区| 日本不卡二区| 97天天综合网| 欧美一区二区三区系列电影| 久久丫精品国产亚洲av不卡| 午夜精品一区二区三区国产 | 无码专区aaaaaa免费视频| 日韩成人亚洲| 亚洲国产精品嫩草影院久久| 色哟哟一一国产精品| 国产日韩精品视频一区二区三区| 91在线看www| av在线免费一区| 欧美视频专区一二在线观看| 黑人巨大猛交丰满少妇| 日韩电影免费网址| 人妖精品videosex性欧美| 国产叼嘿视频在线观看| 亚洲欧洲日产国码二区| 成人免费观看毛片| 久久婷婷国产| 午夜精品一区二区三区在线视| 91午夜交换视频| 欧美国产精品中文字幕| aa在线观看视频| 懂色av一区二区| 欧美另类第一页| 99在线精品视频免费观看软件| 国产精品素人一区二区| 日韩在线xxx| 亚洲桃色综合影院| 69久久夜色精品国产69乱青草| 东京干手机福利视频| 亚洲女与黑人做爰| 一级黄色在线播放| 国产精品97| 国产在线拍偷自揄拍精品| 国产福利电影在线| 在线观看免费亚洲| 国产综合精品在线| 日韩中文字幕麻豆| 日韩福利在线| 欧美xnxx| 中文字幕无线精品亚洲乱码一区 | 九九热只有精品| 国产精品乡下勾搭老头1| 国产在线拍揄自揄拍无码| 亚洲精品三区| 久久av红桃一区二区小说| 国产伦精品一区二区三区四区 | 成人在线免费| 少妇精69xxtheporn| 在线观看亚洲国产| 国产精品福利av| 久久精品久久99| 欧美视频导航| 国产偷久久久精品专区| 色是在线视频| 一区二区三区在线播放欧美| 中文字幕一区二区三区人妻四季 | 日韩在线影院| 色播久久人人爽人人爽人人片视av| 伊人久久一区二区| 亚洲免费观看高清完整版在线| 手机看片国产精品| 亚洲美女少妇无套啪啪呻吟| 欧美日韩一区二区三| www.久久| 欧美精品999| 日韩精品系列| 欧美日韩成人一区| 国产亚洲精品久久777777| 91丨九色丨尤物| 超碰在线播放91| 欧美精品首页| 秋霞在线观看一区二区三区| 久久精品超碰| 韩剧1988免费观看全集| 国产一区精品| 欧美一区二区精品在线| 国产精品国产三级国产专区52| 欧美经典一区二区三区| 人妻少妇偷人精品久久久任期| 日韩午夜黄色| 国产91av视频在线观看| 999久久久久久久久6666| 国产不卡精品视男人的天堂| 黄色网页网址在线免费| 日韩精品免费综合视频在线播放 | 国产午夜视频在线| 国产欧美日韩卡一| 亚洲精品久久一区二区三区777| 久久亚洲影院| 大荫蒂性生交片| 奇米影视亚洲| 精品亚洲第一| 日韩在线观看一区二区三区| 欧美一级电影免费在线观看| av网址在线| 在线看国产精品| 欧美一级特黄aaaaaa大片在线观看| 欧洲日韩一区二区三区| 黄色激情视频在线观看| 中文字幕中文乱码欧美一区二区 | 偷窥自拍亚洲色图精选| 亚洲a一级视频| 日本国产欧美| 2019亚洲男人天堂| 黄网站在线观| 超碰97人人做人人爱少妇| 电影av一区| 亚洲精品按摩视频| www.97av| 日韩一区二区在线播放| 97在线视频人妻无码| 色综合久久久久综合99| 国产午夜福利片| 一区二区理论电影在线观看| 一级黄色片日本| 中文字幕精品一区| 欧美日韩高清丝袜| 91小视频在线观看| 亚洲一区二区三区四区av| 国产一区啦啦啦在线观看| 国产色视频在线播放| 视频一区中文字幕| 欧美 日韩精品| 亚洲一区二区免费看| 久艹在线免费观看| 国产综合激情| 又大又硬又爽免费视频| 欧美大片一区| 激情视频小说图片| 欧美日韩国产一区精品一区| 久久久成人精品一区二区三区| 久久免费大视频| 一区二区三区|亚洲午夜| 俺要去色综合狠狠| 亚洲人久久久| 国产精品麻豆久久| 在线观看国产一区| 国产精品7m凸凹视频分类| 中文字幕在线亚洲精品| 国产精品88久久久久久| 老汉色影院首页| 欧美精品一级| 黄色一级在线视频| 久久免费国产| 九九九在线观看视频| 免费高清在线视频一区·| jizz欧美性11| 国产美女视频一区| 国内自拍偷拍视频| heyzo一本久久综合| 日本免费福利视频| 国产亚洲美州欧州综合国| 免费黄在线观看| 亚洲欧洲日本在线| 久久影院一区二区| 精品国产老师黑色丝袜高跟鞋| 超碰中文字幕在线| 欧美色手机在线观看| 国产三级在线观看视频| 精品国产乱码久久久久久牛牛| 五月婷婷在线播放| 国产亚洲欧洲黄色| 91精选在线| 欧美在线视频观看| 欧美综合社区国产| 成人激情直播| 九九热精品视频在线观看| 亚洲午夜精品福利| 国产精品大片| 大肉大捧一进一出好爽动态图| 久久99久久99| 中文字幕乱码一区| 国产精品美女久久久久av爽李琼 | 91在线中文字幕| 欧美激情极品| 中文视频一区视频二区视频三区| 欧美日韩一区自拍| 人妻丰满熟妇av无码区app| 韩国av一区二区三区四区| 中国xxxx性xxxx产国| 亚洲国产成人在线| 国产无套粉嫩白浆内谢| 欧美午夜电影网| 免费观看黄色一级视频| 尤物99国产成人精品视频| 肉体视频在线| 国产精品一区二区久久久久| 国内视频在线精品| 国产一区一区三区| 久久九九电影| 69亚洲乱人伦| 日韩久久一区二区| 国产性生活视频| 欧美sm极限捆绑bd| 午夜国产福利在线| 欧美一级大片视频| 操欧美女人视频| 最近看过的日韩成人| 三级久久三级久久久| 欧美夫妇交换xxx| 亚洲私人影院在线观看| 精品久久久久久久久久久久久久久久久久 | 国产亚洲一区二区在线| 国产羞羞视频在线播放| 成人福利在线视频| 国产99亚洲| 成年人午夜视频在线观看| 国产精品影音先锋| 欧美亚洲色综久久精品国产| 欧美性xxxx极品高清hd直播| 亚洲免费成人网| 久久亚洲精品一区二区| 国产成人精品一区二区三区在线 | 性感美女福利视频| 欧美大荫蒂xxx| 国产精品麻豆| 热这里只有精品| 久久激情综合网| 天堂网av2018| 欧美影院精品一区| 九色视频在线观看免费播放| 欧美亚洲激情视频| 开心激情综合| 高清欧美精品xxxxx| 成人精品亚洲人成在线| 日本精品人妻无码77777| 欧美老年两性高潮| 免费在线观看av| 成人免费观看a| 国产精品久久久久久久久久10秀| 在线观看国产中文字幕| 欧美高清在线视频| 中文无码精品一区二区三区| 亚洲欧洲一区二区三区在线观看| 婷婷电影在线观看| 精品国产乱码久久久久软件 | 热久久免费国产视频| 欧美五码在线| 青青青在线播放| 国产日韩欧美a| 在线观看亚洲黄色| 中文字幕亚洲一区二区三区| 97成人超碰| 中文字幕一区二区三区乱码 | 亚洲一区二区三区在线免费观看| 五月久久久综合一区二区小说| 久久艹这里只有精品| 一区二区三区四区不卡在线| 亚洲美女综合网| 欧美一级高清免费| 狠狠综合久久av一区二区蜜桃 | 国产精品久久久久久吹潮| 亚洲国产日韩美| 国产一区欧美日韩| 99免费在线观看| 亚洲欧洲黄色网| 9999精品免费视频| 丁香六月激情婷婷| 99综合电影在线视频| 99re国产在线| 精品国产欧美一区二区五十路 | 精品裸体舞一区二区三区| av男人的天堂在线观看| 欧美日韩一区二区三区免费| 久久se精品一区二区| 麻豆亚洲av熟女国产一区二| 亚洲精品一区久久久久久| 成人综合网站| 少妇久久久久久被弄到高潮| 99久久国产综合精品麻豆| 中文字幕 亚洲视频| 久久99亚洲热视| 亚洲另类av| 欧美一级免费在线| 欧美视频免费在线| 成人在线app| 久久五月天婷婷| 国产在线日韩欧美| 久久久久女人精品毛片九一| 久久午夜a级毛片| 最新国产精品视频| 亚洲丝袜在线观看| 一本大道av一区二区在线播放| 麻豆av在线导航| 欧美亚洲国产免费| 国产麻豆一精品一av一免费| 国产成人精品777777| 欧美国产在线视频| 欧美亚洲国产一区| 日本道中文字幕| 欧美另类久久久品|