亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Android交叉編譯v4l2-ctl:在Bionic上運(yùn)行Linux視頻調(diào)試工具

Android交叉編譯v4l2-ctl:在Bionic上運(yùn)行Linux視頻調(diào)試工具 1. 項(xiàng)目概述為什么在Android SDK里折騰v4l2-ctl這件事值得花三天時(shí)間v4l2這個(gè)關(guān)鍵詞對(duì)嵌入式Linux和Android底層開發(fā)者來(lái)說(shuō)幾乎刻在DNA里。它不是個(gè)時(shí)髦的新玩具而是攝像頭、視頻采集、ISP調(diào)試這些硬核場(chǎng)景里繞不開的基石——從高通平臺(tái)的QCamera HAL到瑞芯微RK3588的VPU驅(qū)動(dòng)再到全志H616上跑的USB UVC設(shè)備背后全是v4l2框架在調(diào)度。而v4l2-ctl就是這個(gè)框架最鋒利的一把螺絲刀它不依賴圖形界面不啟動(dòng)APP一條命令就能查清攝像頭支持哪些分辨率、當(dāng)前曝光值是多少、是否啟用了自動(dòng)白平衡、甚至能直接寫寄存器去調(diào)焦距。但問(wèn)題來(lái)了——Android SDK本身不帶v4l2-ctl官方NDK也沒(méi)打包這個(gè)工具。你手頭有臺(tái)搭載IMX335的定制Android平板想驗(yàn)證新寫的v4l2驅(qū)動(dòng)是否正確注冊(cè)了設(shè)備節(jié)點(diǎn)或者在產(chǎn)線燒錄后快速確認(rèn)USB攝像頭被識(shí)別為/dev/video0還是/dev/video1這時(shí)候你不能指望adb shell里敲v4l2-ctl——它根本不存在。于是交叉編譯v4l2-ctl就成了繞不過(guò)去的坎。這不是為了炫技而是為了把Linux世界里最成熟的視頻調(diào)試能力原汁原味地搬進(jìn)Android的封閉生態(tài)里。整個(gè)過(guò)程核心就三件事用Android NDK提供的arm64-v8a或armeabi-v7a工具鏈把v4l2-utils源碼編譯成能在Android設(shè)備上直接運(yùn)行的靜態(tài)二進(jìn)制確保它不依賴glibc而用Bionic最后通過(guò)adb push部署到/data/local/tmp并賦予可執(zhí)行權(quán)限。我試過(guò)七種不同組合——從Ubuntu 20.04配NDK r21e到Ubuntu 24.04配NDK r25c中間踩過(guò)鏈接器找不到libpthread、CMake找不到sys/types.h、甚至因Android 12 SELinux策略導(dǎo)致chmod失敗等坑。最終跑通的方案不是靠運(yùn)氣而是吃透了Android Bionic libc和v4l2-utils源碼里那些被注釋掉的Android適配補(bǔ)丁。這篇文章就是把這三天熬出來(lái)的完整路徑掰開揉碎講給你聽。2. 整體設(shè)計(jì)思路與關(guān)鍵決策依據(jù)2.1 為什么必須交叉編譯而不是在Android設(shè)備上原生編譯很多人第一反應(yīng)是“我的Android設(shè)備root了能不能直接裝gcc然后make”答案是明確的否。原因有三層且層層遞進(jìn)。第一層是架構(gòu)鴻溝你的開發(fā)機(jī)大概率是x86_64而目標(biāo)Android設(shè)備是ARM64或ARM32指令集完全不同本地gcc編譯出的二進(jìn)制在目標(biāo)機(jī)上根本無(wú)法加載會(huì)直接報(bào)“cannot execute binary file: Exec format error”。第二層是C庫(kù)差異Linux發(fā)行版用glibcAndroid用Bionic libc。glibc提供了大量POSIX擴(kuò)展函數(shù)比如getaddrinfo_a、backtrace_symbols_fd而Bionic刻意精簡(jiǎn)只保留最核心的ABI兼容部分。v4l2-utils默認(rèn)依賴glibc的某些特性如果強(qiáng)行在Android上編譯鏈接階段就會(huì)報(bào)undefined reference。第三層是環(huán)境缺失Android系統(tǒng)刪減了幾乎所有開發(fā)工具鏈——沒(méi)有make、沒(méi)有pkg-config、沒(méi)有autoconf/automake甚至連基本的sed、awk都可能閹割。你連configure腳本都跑不起來(lái)。所以唯一可行的路就是交叉編譯在x86_64開發(fā)機(jī)上用Android NDK提供的、專為ARM64/Bionic定制的編譯器如aarch64-linux-android-clang、鏈接器ld.lld和頭文件sysroot把源碼“翻譯”成目標(biāo)架構(gòu)能懂的語(yǔ)言。這就像一個(gè)翻譯官既懂中文源碼又懂英文ARM64指令還熟悉英美兩國(guó)的法律條文Bionic vs glibc ABI才能把合同準(zhǔn)確無(wú)誤地簽下來(lái)。2.2 為什么選v4l2-utils而非自己重寫一個(gè)簡(jiǎn)易版有人會(huì)問(wèn)“v4l2-ctl功能很單一幾十行C代碼就能實(shí)現(xiàn)ioctl調(diào)用何必大動(dòng)干戈編譯整個(gè)utils”這個(gè)想法很樸素但忽略了三個(gè)致命現(xiàn)實(shí)。第一是協(xié)議復(fù)雜度v4l2 ioctl不是簡(jiǎn)單的read/write它涉及大量結(jié)構(gòu)體嵌套struct v4l2_capability、v4l2_format、v4l2_streamparm、位域操作control flags、以及動(dòng)態(tài)內(nèi)存分配如enum_framesizes需要先query count再alloc buffer。官方v4l2-ctl經(jīng)過(guò)十年以上維護(hù)處理了Intel、AMD、NVIDIA、Rockchip、Allwinner等所有主流芯片廠商驅(qū)動(dòng)的邊界情況比如某些驅(qū)動(dòng)返回的crop bounds超出實(shí)際sensor尺寸或者frame interval枚舉時(shí)返回?zé)o效的denominator。自己寫的簡(jiǎn)易版在遇到這些非標(biāo)實(shí)現(xiàn)時(shí)大概率崩潰。第二是調(diào)試深度v4l2-ctl -d /dev/video0 --all 不僅輸出基礎(chǔ)能力還會(huì)解析driver name、card、bus_info并嘗試讀取所有controlsbrightness, contrast, exposure_auto等甚至能dump raw control values--get-ctrl。這些信息對(duì)定位HAL層與Kernel層的交互問(wèn)題至關(guān)重要。第三是生態(tài)兼容性當(dāng)你在論壇提問(wèn)“v4l2-ctl -C exposure_absolute返回-1”所有人都知道你在用標(biāo)準(zhǔn)工具復(fù)現(xiàn)路徑清晰如果你說(shuō)“我寫的test_v4l2_ioctl返回EINVAL”別人第一反應(yīng)是“你結(jié)構(gòu)體填錯(cuò)了吧”溝通成本翻倍。所以復(fù)用v4l2-utils不是偷懶而是站在巨人肩膀上把有限精力聚焦在真正的問(wèn)題上——讓這個(gè)巨人能在Android上站起來(lái)。2.3 為什么堅(jiān)持靜態(tài)鏈接放棄動(dòng)態(tài)鏈接方案v4l2-utils默認(rèn)編譯是動(dòng)態(tài)鏈接的生成的v4l2-ctl會(huì)依賴libv4l2.so、libpthread.so等共享庫(kù)。但在Android上這條路走不通。原因很直接Android系統(tǒng)分區(qū)/system里沒(méi)有l(wèi)ibv4l2.so這個(gè)庫(kù)是v4l-utils項(xiàng)目自己提供的不屬于Android基礎(chǔ)鏡像。你當(dāng)然可以把libv4l2.so push到設(shè)備上但緊接著會(huì)觸發(fā)第二個(gè)問(wèn)題庫(kù)版本沖突。NDK r21e自帶的Bionic sysroot里libpthread.so是Bionic實(shí)現(xiàn)的而v4l2-utils configure腳本默認(rèn)找的是glibc的pthread鏈接時(shí)會(huì)混用兩種ABI導(dǎo)致運(yùn)行時(shí)segmentation fault。更麻煩的是Android 10引入了linker namespace隔離/data分區(qū)的應(yīng)用默認(rèn)無(wú)法加載/system外的so除非你手動(dòng)修改seccomp規(guī)則——這已經(jīng)超出調(diào)試工具的范疇。靜態(tài)鏈接則一勞永逸所有依賴libc、pthread、v4l2邏輯全部打在一個(gè)二進(jìn)制里push上去就能跑不依賴任何外部庫(kù)。代價(jià)是二進(jìn)制體積變大從100KB漲到800KB但這對(duì)調(diào)試工具來(lái)說(shuō)完全可接受。實(shí)測(cè)下來(lái)靜態(tài)鏈接的v4l2-ctl在Android 8.1到14的所有版本上只要內(nèi)核支持v4l2就能穩(wěn)定工作。這個(gè)決策背后是權(quán)衡了“部署便捷性”和“體積冗余”的結(jié)果——對(duì)于一個(gè)要塞進(jìn)產(chǎn)線燒錄包的工具少一次adb push就少一次出錯(cuò)可能。2.4 為什么鎖定Ubuntu 20.04作為構(gòu)建環(huán)境而非追逐最新版網(wǎng)絡(luò)熱詞里頻繁出現(xiàn)“ubuntu24交叉編譯arm”但實(shí)際操作中Ubuntu 24.04的GCC 13和Clang 18對(duì)Android NDK的支持并不成熟。NDK r25c的文檔明確寫著“Clang 17 is the recommended compiler for NDK r25c”而Ubuntu 24.04默認(rèn)Clang是18。更隱蔽的問(wèn)題是CMake版本Ubuntu 24.04自帶CMake 3.22而NDK r25c的toolchain文件要求CMake 3.21.1 but 3.23.0看似滿足但CMake 3.22.1有個(gè)已知bug會(huì)在處理Android toolchain的sysroot路徑時(shí)多加一個(gè)斜杠導(dǎo)致頭文件路徑錯(cuò)誤編譯直接卡在#include sys/types.h。相比之下Ubuntu 20.04 LTS內(nèi)核5.4GCC 9.4CMake 3.16.3是經(jīng)過(guò)NDK官方長(zhǎng)期驗(yàn)證的黃金組合。NDK r21e到r25c的所有release note里構(gòu)建測(cè)試環(huán)境都基于Ubuntu 20.04。這不是守舊而是工程上的務(wù)實(shí)選擇當(dāng)你的目標(biāo)是“一次編譯處處可用”而不是“嘗鮮最新特性”穩(wěn)定壓倒一切。我專門做過(guò)對(duì)比測(cè)試同一份v4l2-utils源碼在Ubuntu 20.04 NDK r23b下編譯耗時(shí)4分12秒成功率為100%在Ubuntu 24.04 NDK r25c下7次編譯中有3次因CMake路徑bug失敗平均耗時(shí)5分38秒。多花的那一分多鐘換來(lái)的是反復(fù)重試的挫敗感。所以構(gòu)建環(huán)境的選擇本質(zhì)上是在“已知的確定性”和“未知的潛在風(fēng)險(xiǎn)”之間做選擇而嵌入式開發(fā)永遠(yuǎn)優(yōu)先選擇前者。3. 核心細(xì)節(jié)解析與實(shí)操要點(diǎn)3.1 Android NDK工具鏈的精準(zhǔn)定位與環(huán)境變量設(shè)置交叉編譯的第一步不是下載源碼而是讓系統(tǒng)“認(rèn)識(shí)”NDK。很多人卡在這一步因?yàn)镹DK的目錄結(jié)構(gòu)隨著版本迭代變化很大。以NDK r23b為例它的核心工具鏈不在$NDK_HOME/toolchains/下這是舊版路徑而是在$NDK_HOME/toolchains/llvm/prebuilt/中。你需要根據(jù)目標(biāo)ABI選擇對(duì)應(yīng)的prebuilt子目錄arm64-v8a對(duì)應(yīng)linux-x86_64注意這里是host OS不是targetarmeabi-v7a也對(duì)應(yīng)linux-x86_64。具體路徑是$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang $NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang這里的21代表Android API Level 21Android 5.0是v4l2-ctl的最低兼容要求。為什么選21因?yàn)関4l2框架在API 21才正式納入Android HAL穩(wěn)定接口更低版本的Bionic缺少必要的ioctl定義。設(shè)置環(huán)境變量時(shí)切忌簡(jiǎn)單export PATH$NDK_HOME/toolchains/...這會(huì)導(dǎo)致系統(tǒng)gcc被覆蓋。正確做法是創(chuàng)建專用的構(gòu)建腳本只在該腳本內(nèi)生效#!/bin/bash export NDK_HOME/path/to/android-ndk-r23b export TOOLCHAIN$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64 export TARGETaarch64-linux-android export API21 export CC$TOOLCHAIN/bin/$TARGET$API-clang export CXX$TOOLCHAIN/bin/$TARGET$API-clang export AR$TOOLCHAIN/bin/$TARGET-ar export RANLIB$TOOLCHAIN/bin/$TARGET-ranlib export STRIP$TOOLCHAIN/bin/$TARGET-strip export SYSROOT$NDK_HOME/platforms/android-$API/arch-arm64關(guān)鍵點(diǎn)在于SYSROOT的指向arch-arm64對(duì)應(yīng)aarch64arch-arm對(duì)應(yīng)armeabi-v7a。如果編譯ARM64卻指向arch-arm頭文件里的指針大小sizeof(void*)會(huì)錯(cuò)導(dǎo)致struct v4l2_buffer里的m.userptr字段偏移錯(cuò)誤ioctl調(diào)用必然失敗。我踩過(guò)的最深的坑就是復(fù)制網(wǎng)上教程時(shí)沒(méi)改arch目錄名編譯出來(lái)的v4l2-ctl在設(shè)備上運(yùn)行時(shí)-D參數(shù)debug能打印日志但一執(zhí)行--all就segfault調(diào)試半天才發(fā)現(xiàn)是結(jié)構(gòu)體內(nèi)存布局錯(cuò)亂。所以務(wù)必用ls $SYSROOT/usr/include檢查是否存在sys/types.h、linux/videodev2.h等關(guān)鍵頭文件這是驗(yàn)證SYSROOT是否正確的最快方法。3.2 v4l2-utils源碼的針對(duì)性patch與配置選項(xiàng)裁剪v4l2-utils官方源碼https://git.linuxtv.org/v4l-utils.git并非開箱即用。直接cmake會(huì)失敗因?yàn)槠銫MakeLists.txt默認(rèn)啟用udev支持用于自動(dòng)發(fā)現(xiàn)video設(shè)備而Android沒(méi)有udev daemon。此外它默認(rèn)鏈接libudev.so和libnl-3.so這兩個(gè)庫(kù)在Android上根本不存在。因此必須應(yīng)用兩個(gè)關(guān)鍵patch。第一個(gè)是禁用udev在CMakeLists.txt中找到find_package(udev)和find_package(libnl-3)相關(guān)段落全部注釋掉并將option(BUILD_UDEV Build udev rules ON)改為OFF。第二個(gè)是強(qiáng)制靜態(tài)鏈接在CMakeLists.txt末尾添加set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} -static) set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} -static)但這還不夠因?yàn)関4l2-utils內(nèi)部的libv4l2庫(kù)v4l2convert.c等會(huì)嘗試動(dòng)態(tài)加載libjpeg等必須徹底剝離。最穩(wěn)妥的方式是在configure階段如果用autotools或cmake階段顯式關(guān)閉所有非核心功能cmake -B build \ -DCMAKE_TOOLCHAIN_FILE$NDK_HOME/build/cmake/android.toolchain.cmake \ -DANDROID_ABIarm64-v8a \ -DANDROID_PLATFORMandroid-21 \ -DANDROID_NDK$NDK_HOME \ -DCMAKE_BUILD_TYPERelease \ -DBUILD_SHARED_LIBSOFF \ -DBUILD_STATIC_LIBSON \ -DBUILD_V4L2_UTILSON \ -DBUILD_V4L2_CTLON \ -DBUILD_V4L2_COMPLIANCEOFF \ # 這個(gè)工具太大且Android用不到 -DBUILD_V4L2_TSTOFF \ # 同樣測(cè)試工具非必需 -DBUILD_QV4L2OFF \ # Qt GUIAndroid無(wú)意義 -DENABLE_UDEVOFF \ -DENABLE_LIBV4L2ON \ # 必須開啟提供v4l2_convert等核心功能 -DENABLE_LIBV4LCONVERTON \ -DENABLE_LIBV4L1OFF \ # v4l1已廢棄Android不支持 -DENABLE_JPEGOFF \ # 禁用JPEG依賴避免鏈接libjpeg -DENABLE_PNGOFF # 同理禁用PNG這里的關(guān)鍵是-DENABLE_LIBV4L2ON。libv4l2是v4l2-utils的靈魂它提供了用戶態(tài)的格式轉(zhuǎn)換YUYV轉(zhuǎn)NV12、色彩空間適配、以及最重要的——對(duì)老舊驅(qū)動(dòng)的兼容層。比如某些Rockchip驅(qū)動(dòng)只支持V4L2_PIX_FMT_NV12但上層APP需要YUV420Plibv4l2就能在用戶態(tài)完成轉(zhuǎn)換無(wú)需修改驅(qū)動(dòng)。關(guān)閉它v4l2-ctl的功能就只剩ioctl直通失去了大部分實(shí)用價(jià)值。而-DENABLE_JPEGOFF則是為了規(guī)避Bionic不支持libjpeg的鏈接錯(cuò)誤。實(shí)測(cè)表明即使關(guān)閉JPEG/PNGv4l2-ctl的核心功能list-ctrls, get-ctrl, set-ctrl, querycap完全不受影響。3.3 靜態(tài)鏈接Bionic libc的隱式依賴處理靜態(tài)鏈接最大的陷阱不是找不到庫(kù)而是“找到了不該找的庫(kù)”。當(dāng)你執(zhí)行cmake ... -static時(shí)鏈接器ld.lld會(huì)優(yōu)先搜索/usr/lib下的靜態(tài)庫(kù)libpthread.a, libc.a而這些是glibc的不是Bionic的。結(jié)果就是二進(jìn)制里混入了glibc的符號(hào)運(yùn)行時(shí)在Android上直接abort。解決方案是強(qiáng)制鏈接器只認(rèn)NDK的sysroot。這需要在CMakeLists.txt中插入一行set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} --sysroot${SYSROOT})但更可靠的做法是在cmake命令中直接指定cmake -B build \ -DCMAKE_TOOLCHAIN_FILE$NDK_HOME/build/cmake/android.toolchain.cmake \ -DANDROID_ABIarm64-v8a \ -DANDROID_PLATFORMandroid-21 \ -DCMAKE_BUILD_TYPERelease \ -DCMAKE_EXE_LINKER_FLAGS-static --sysroot$SYSROOT \ ...--sysroot參數(shù)告訴鏈接器所有頭文件和庫(kù)文件都必須從$SYSROOT路徑下查找徹底屏蔽了host系統(tǒng)的/usr/lib干擾。驗(yàn)證是否成功編譯完成后用file build/v4l-utils/v4l2-ctl檢查輸出應(yīng)為build/v4l-utils/v4l2-ctl: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), statically linked, BuildID[sha1]..., stripped其中statically linked是關(guān)鍵。如果顯示dynamically linked說(shuō)明-static沒(méi)生效或者--sysroot沒(méi)起作用。此時(shí)用readelf -d build/v4l-utils/v4l2-ctl | grep NEEDED查看依賴如果出現(xiàn)libc.so.6或libpthread.so.0就是glibc的痕跡必須回溯檢查CMAKE_EXE_LINKER_FLAGS。我曾因忘記在cmake命令中加-DCMAKE_EXE_LINKER_FLAGS而是在shell里export結(jié)果cmake沒(méi)讀取到浪費(fèi)了兩小時(shí)排查。3.4 Android SELinux策略下的權(quán)限繞過(guò)技巧編譯成功的v4l2-ctl push到設(shè)備后常遇到Permission denied。這不是文件沒(méi)chmod而是SELinux在攔截。Android 8.0默認(rèn)啟用SELinux enforcing模式/data/local/tmp目錄的context是u:object_r:shell_data_file:s0而v4l2-ctl需要訪問(wèn)/dev/video*設(shè)備這些設(shè)備的context是u:object_r:camera_device:s0或u:object_r:usb_device:s0。SELinux策略規(guī)定shell進(jìn)程adb shell不能直接訪問(wèn)camera_device。網(wǎng)上很多教程教setenforce 0這是危險(xiǎn)的會(huì)關(guān)閉整個(gè)SELinux破壞系統(tǒng)安全模型。正確做法是臨時(shí)切換到允許的domainadb shell su # 切換到init domain它有訪問(wèn)所有設(shè)備的權(quán)限 chcon u:r:init:s0 /data/local/tmp/v4l2-ctl chmod 755 /data/local/tmp/v4l2-ctl # 或者更精細(xì)的控制給shell domain添加camera訪問(wèn)權(quán)限需magisk模塊 # 但這需要修改sepolicy超出本文范圍chcon命令修改文件的安全上下文u:r:init:s0是init進(jìn)程的domain它被授予了allow init device:chr_file { read write ioctl }權(quán)限。實(shí)測(cè)下來(lái)這是最安全、最輕量的繞過(guò)方式。另一個(gè)技巧是利用Android的run-as機(jī)制如果你的應(yīng)用有debuggable flag可以用run-as com.yourpackage /data/local/tmp/v4l2-ctl -d /dev/video0因?yàn)閞un-as進(jìn)程的domain是u:r:shell:s0它被策略允許訪問(wèn)部分設(shè)備節(jié)點(diǎn)。但v4l2-ctl需要root權(quán)限才能open /dev/video*所以run-as方案僅適用于已root的設(shè)備??偨Y(jié)chcon u:r:init:s0是通用解法setenforce 0是最后手段永遠(yuǎn)不要在產(chǎn)線環(huán)境中使用后者。4. 實(shí)操過(guò)程與核心環(huán)節(jié)實(shí)現(xiàn)4.1 完整構(gòu)建流程從零開始的逐行命令實(shí)錄以下是在Ubuntu 20.04虛擬機(jī)中的完整操作記錄每一步都經(jīng)過(guò)實(shí)測(cè)驗(yàn)證。假設(shè)NDK已解壓到/home/user/android-ndk-r23b工作目錄為/home/user/v4l2-build。步驟1安裝必要依賴sudo apt update sudo apt install -y git cmake build-essential python3-pip # 注意不要安裝gcc-arm-linux-gnueabihfNDK自帶工具鏈沖突步驟2克隆并checkout穩(wěn)定版本cd /home/user git clone https://git.linuxtv.org/v4l-utils.git cd v4l-utils # checkout到2022年發(fā)布的穩(wěn)定tag避免master分支的不穩(wěn)定變更 git checkout v1.22.1 # 創(chuàng)建patch文件 cat android-disable-udev.patch EOF diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a2b3c4..5d6e7f8 100644 --- a/CMakeLists.txt b/CMakeLists.txt -123,10 123,10 option(BUILD_SHARED_LIBS Build shared libraries ON) option(BUILD_STATIC_LIBS Build static libraries ON) option(BUILD_V4L2_UTILS Build v4l-utils ON) option(BUILD_V4L2_CTL Build v4l2-ctl ON) -option(BUILD_UDEV Build udev rules ON) option(BUILD_UDEV Build udev rules OFF) option(BUILD_V4L2_COMPLIANCE Build v4l2-compliance ON) option(BUILD_V4L2_TST Build v4l2-tst ON) -option(BUILD_QV4L2 Build qv4l2 ON) option(BUILD_QV4L2 Build qv4l2 OFF) -210,7 210,7 if(BUILD_UDEV) find_package(udev REQUIRED) find_package(libnl-3 REQUIRED) include_directories(${UDEV_INCLUDE_DIRS}) - link_libraries(${UDEV_LIBRARIES} ${LIBNL_LIBRARIES}) # link_libraries(${UDEV_LIBRARIES} ${LIBNL_LIBRARIES}) endif() EOF git apply android-disable-udev.patch步驟3設(shè)置環(huán)境變量并運(yùn)行cmakeexport NDK_HOME/home/user/android-ndk-r23b export SYSROOT$NDK_HOME/platforms/android-21/arch-arm64 mkdir build cd build cmake -G Unix Makefiles \ -DCMAKE_TOOLCHAIN_FILE$NDK_HOME/build/cmake/android.toolchain.cmake \ -DANDROID_ABIarm64-v8a \ -DANDROID_PLATFORMandroid-21 \ -DANDROID_NDK$NDK_HOME \ -DCMAKE_BUILD_TYPERelease \ -DBUILD_SHARED_LIBSOFF \ -DBUILD_STATIC_LIBSON \ -DBUILD_V4L2_UTILSON \ -DBUILD_V4L2_CTLON \ -DBUILD_V4L2_COMPLIANCEOFF \ -DBUILD_V4L2_TSTOFF \ -DBUILD_QV4L2OFF \ -DENABLE_UDEVOFF \ -DENABLE_LIBV4L2ON \ -DENABLE_LIBV4LCONVERTON \ -DENABLE_LIBV4L1OFF \ -DENABLE_JPEGOFF \ -DENABLE_PNGOFF \ -DCMAKE_EXE_LINKER_FLAGS-static --sysroot$SYSROOT \ ..如果cmake報(bào)錯(cuò)Could not find a package configuration file provided by Qt5Core說(shuō)明CMakeLists.txt里還有Qt相關(guān)殘留需再次patch注釋掉find_package(Qt5Core)等行。步驟4編譯與安裝make -j$(nproc) # 使用所有CPU核心加速 # 編譯完成后v4l2-ctl位于 build/v4l-utils/v4l2-ctl # 驗(yàn)證靜態(tài)鏈接 file v4l-utils/v4l2-ctl # 輸出應(yīng)含 statically linked # 檢查符號(hào)表確認(rèn)無(wú)glibc痕跡 nm v4l-utils/v4l2-ctl | grep -i libc\.so\|pthread\.so | head -5 # 應(yīng)無(wú)輸出步驟5部署到Android設(shè)備# 假設(shè)設(shè)備已連接且adb可用 adb root # 獲取root權(quán)限 adb remount adb push v4l-utils/v4l2-ctl /data/local/tmp/ adb shell chcon u:r:init:s0 /data/local/tmp/v4l2-ctl adb shell chmod 755 /data/local/tmp/v4l2-ctl # 測(cè)試 adb shell /data/local/tmp/v4l2-ctl --version # 應(yīng)輸出 v4l2-ctl version 1.22.14.2 關(guān)鍵參數(shù)計(jì)算與設(shè)備節(jié)點(diǎn)驗(yàn)證v4l2-ctl的威力體現(xiàn)在對(duì)設(shè)備節(jié)點(diǎn)的精準(zhǔn)操控。但Android設(shè)備的video節(jié)點(diǎn)命名不統(tǒng)一高通平臺(tái)常用/dev/video0主攝、/dev/video1副攝瑞芯微平臺(tái)可能是/dev/video10、/dev/video11USB攝像頭則可能是/dev/video20。如何快速定位核心命令是adb shell /data/local/tmp/v4l2-ctl --list-devices這個(gè)命令會(huì)解析/sys/class/video4linux/下的所有設(shè)備輸出類似rkisp0_mainpath (platform:ff910000.rkisp): /dev/video0 rkisp0_selfpath (platform:ff910000.rkisp): /dev/video1 uvcvideo (usb-ff500000.usb-1.1): /dev/video20看到uvcvideo就知道是USB攝像頭。但有時(shí)--list-devices會(huì)失敗因?yàn)樾枰x取/sys/class/video4linux/*/name而某些Android ROM刪減了sysfs。此時(shí)用萬(wàn)能的ls /dev/video*adb shell ls -l /dev/video*輸出crw-rw---- 1 system camera 81, 0 2023-10-01 10:00 /dev/video0 crw-rw---- 1 system camera 81, 1 2023-10-01 10:00 /dev/video1 crw-rw---- 1 system camera 81, 20 2023-10-01 10:00 /dev/video20這里的81, 0是主設(shè)備號(hào)81次設(shè)備號(hào)0對(duì)應(yīng)video0。確認(rèn)節(jié)點(diǎn)后最關(guān)鍵的調(diào)試命令是adb shell /data/local/tmp/v4l2-ctl -d /dev/video20 --all--all會(huì)依次執(zhí)行VIDIOC_QUERYCAP獲取設(shè)備能力driver, card, bus_infoVIDIOC_ENUM_FMT枚舉所有支持的像素格式Y(jié)UYV, NV12, MJPEGVIDIOC_ENUM_FRAMESIZES枚舉每個(gè)格式支持的分辨率VIDIOC_ENUM_FRAMEINTERVALS枚舉幀率VIDIOC_QUERYCTRL列出所有可調(diào)參數(shù)brightness, contrast等輸出中Capabilities:字段告訴你設(shè)備是否支持streamingV4L2_CAP_STREAMING、是否是input deviceV4L2_CAP_VIDEO_CAPTURE。如果看到Device Caps里沒(méi)有0x00000004V4L2_CAP_VIDEO_CAPTURE說(shuō)明這個(gè)節(jié)點(diǎn)不是攝像頭而是編碼器或顯示器。我曾在一個(gè)RK3399盒子上/dev/video1其實(shí)是H.264 encoder執(zhí)行--all時(shí)會(huì)卡住必須用--info代替。4.3 實(shí)戰(zhàn)案例調(diào)試USB攝像頭在Android上的兼容性問(wèn)題某次項(xiàng)目中客戶送來(lái)一款羅技C920 USB攝像頭在Ubuntu上即插即用但在Android 12平板上ls /dev/video*能看到/dev/video20v4l2-ctl -d /dev/video20 --info卻顯示Driver name : uvcvideo但Capabilities : 0x00000000意味著驅(qū)動(dòng)沒(méi)正確初始化。常規(guī)思路是查dmesg但Android的dmesg需要rootadb shell dmesg | grep -i uvc輸出[ 12.345678] usb 1-1.2: Product: HD Pro Webcam C920 [ 12.345789] uvcvideo: Found UVC 1.00 device HD Pro Webcam C920 (046d:082d) [ 12.345890] uvcvideo 1-1.2:1.0: Entity type for entity Processing was not initialized!最后一行是關(guān)鍵Entity type for entity Processing was not initialized!。這是UVC驅(qū)動(dòng)的一個(gè)已知bug發(fā)生在Android kernel 4.14當(dāng)攝像頭報(bào)告了不標(biāo)準(zhǔn)的processing unit descriptor時(shí)驅(qū)動(dòng)會(huì)跳過(guò)初始化。解決方案是用v4l2-ctl強(qiáng)制設(shè)置format# 先嘗試設(shè)置最基礎(chǔ)的YUYV格式 adb shell /data/local/tmp/v4l2-ctl -d /dev/video20 --set-fmt-videowidth640,height480,pixelformatYUYV # 如果失敗換MJPEG很多UVC攝像頭默認(rèn)只支持MJPEG adb shell /data/local/tmp/v4l2-ctl -d /dev/video20 --set-fmt-videowidth640,height480,pixelformatMJPG # 然后請(qǐng)求stream on adb shell /data/local/tmp/v4l2-ctl -d /dev/video20 --stream-mmap --stream-count1 --stream-to/dev/null--stream-to/dev/null是關(guān)鍵它模擬了一個(gè)APP在消費(fèi)視頻流會(huì)觸發(fā)驅(qū)動(dòng)的streamon流程。如果成功dmesg會(huì)輸出uvcvideo: Starting video stream。此時(shí)再運(yùn)行--allCapabilities就會(huì)變成0x00000005V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING問(wèn)題解決。這個(gè)案例說(shuō)明v4l2-ctl不僅是查看工具更是調(diào)試杠桿——它能用軟件手段繞過(guò)驅(qū)動(dòng)層的初始化缺陷。4.4 性能優(yōu)化編譯參數(shù)對(duì)二進(jìn)制體積與運(yùn)行速度的影響靜態(tài)鏈接的v4l2-ctl體積約780KB對(duì)于嵌入式設(shè)備來(lái)說(shuō)不算大但仍有優(yōu)化空間。關(guān)鍵編譯參數(shù)如下-O2vs-O3-O3會(huì)啟用循環(huán)展開、向量化但對(duì)v4l2-ctl這種IO密集型工具收益甚微反而增加體積。實(shí)測(cè)-O2編譯的二進(jìn)制比-O3小12%運(yùn)行時(shí)間無(wú)差異。-fltoLink Time Optimization開啟后鏈接器會(huì)重新優(yōu)化整個(gè)程序體積減少18%但編譯時(shí)間增加40%。對(duì)于調(diào)試工具推薦開啟。-sstrip symbolscmake默認(rèn)不stripmake install后二進(jìn)制含調(diào)試符號(hào)體積翻倍。在make后加$STRIP v4l-utils/v4l2-ctl可減小35%體積。-fvisibilityhidden隱藏內(nèi)部符號(hào)減少動(dòng)態(tài)符號(hào)表大小對(duì)靜態(tài)二進(jìn)制效果有限但屬于良好實(shí)踐。最終推薦的CMake參數(shù)組合cmake -B build \ -DCMAKE_BUILD_TYPERelease \ -DCMAKE_C_FLAGS-O2 -flto -fvisibilityhidden \ -DCMAKE_EXE_LINKER_FLAGS-static --sysroot$SYSROOT -flto -s \ ...編譯后用du -h v4l-utils/v4l2-ctl對(duì)比未優(yōu)化版820KB優(yōu)化后670KB節(jié)省150KB。雖然只是小數(shù)字但在OTA升級(jí)包里每KB都算數(shù)。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄5.1 典型問(wèn)題速查表問(wèn)題現(xiàn)象可能原因排查命令解決方案v4l2-ctl: command not found文件未push或路徑錯(cuò)誤adb shell ls -l /data/local/tmp/v4l2-ctl確認(rèn)push路徑檢查文件權(quán)限chmod 755Segmentation fault架構(gòu)不匹配或Bionic版本不兼容adb shell uname -m;file v4l2-ctl確保ABI一致aarch64 vs arm64API Level≥21Cannot open device /dev/video0: Permission deniedSELinux攔截或group權(quán)限不足adb shell ls -l /dev/video0;adb shell getenforcechcon u:r:init:s0; 或adb shell newgrp cameraioctl: Operation not supported設(shè)備不支持該ioctl或驅(qū)動(dòng)未加載adb shell dmesg | grep -i video檢查dmesg確認(rèn)驅(qū)動(dòng)加載用--info看Capabilitiesv4l2-ctl: error while loading shared libraries: libpthread.so.0動(dòng)態(tài)鏈接未關(guān)閉file v4l2-ctl重新cmake確認(rèn)-static和--sysroot生效No such file or directory(頭文件)SYSROOT路徑錯(cuò)誤ls $SYSROOT/usr/include/linux/videodev2.h核對(duì)arch-arm64vsarch-arm修正SYSROOT5.2 深度排查當(dāng)v4l2-ctl --all卡死時(shí)的診斷流程--all卡死是最棘手的問(wèn)題因?yàn)樗赡馨l(fā)生在ioctl調(diào)用的任意環(huán)節(jié)。標(biāo)準(zhǔn)診斷流程如下第一步縮小范圍# 只執(zhí)行capability查詢這是最輕量的ioctl adb shell /data/local/tmp/v4l2-ctl -d /dev/video0 --info # 如果成功說(shuō)明設(shè)備節(jié)點(diǎn)OK問(wèn)題在后續(xù)ioctl # 如果失敗
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久人妻| 国产视频不卡在线观看| xxx亚洲午夜天堂| 色九九综合AV| 免费精品人妻一区二区三| 日韩情色AV| 91综合中文字幕| 日本在线视频导航| 国产91美女视频| 男人天堂新| 中文字幕人妻丝袜乱一区三区| 久草网站免费在线观看| 久久精品免费| 免费家庭乱伦视频| 怡红院成人av| WWW啪啪的com| 美女久久久久久久久久久| 亚洲蜜桃V妇女| 亚洲乱熟女一区二区| 深夜激情无码| 日本三级精品| 欧美日韩国第一区| 精品无码不卡视频| 精品国产乱码久久久久久久久久毛片| 婷婷丁香熟妇综合网| 超碰4A| 亚洲第一在线视频| 欧美天天| 午夜无遮挡男女啪啪视频| 久久久久13| 热思思免费视频| 色五月天AV| 精品一区二区成人| 天天操妹子| 电影69乱码96| 色婷婷影院| 超碰免费人妻人人| 国产精品一区在线播放| 久久9 9 9精品| 国产日韩在线播放av| 夜草欧美| 人妻天天爽夜夜爽爽| 草草影院日本第一页| 91蜜桃传媒精品久久久一区二区| ,国产乱人伦精品一区二区三区| 在线亚洲 欧美 日本专区| 99热这里只有是精品10| 一区二区日韩欧美久久| 色黄污美女啪啪啪免费网站| 4tube欧美女厕所| 伊人亚洲国产一成人久久精品,久久| 黄片视频观看| 久久国产乱子伦精品免费女,网站| 97超碰69| 亚洲综合网91| 国产精品高潮久久AV| 国产超碰| 97人妻免费中文字幕| 无套后入双马尾| 精彩国产视频播放1区2区| 国产三区免费在线观看| 91伊人久| 日产操逼| 97伊人网| 久久精品国产亚洲粉嫩| 日韩射图| 日韩久草| 欧美日韩亚洲五月天婷婷| AV 少妇 人妻 偷拍| 成人小说视频在线精品欧美| 国产极品馒头逼| 天天操熟妇| 大吊色| 久久国产精品91| 无码精品蜜桃一区二区三区ww| 无码高清操逼| 午夜精品久久久| 欧综合网| 东北熟女91| 999国产精品999久久久久久| 久久精品噜噜噜成人看免欧美大片| 欧色综合| 精品一区99999| 先锋音影AV| 欧美亚洲性爱一区二区| 骚货| 伊人久久亚洲中文字幕| 免費人妻夜夜爽天天爽爽一区| 大香蕉婷婷| 加勒比色综合| 欧美在线中M| 亚洲情色一区二区三区| 久久精品99| 久久精品视| 午夜后入| 精品人妻一区二区蜜桃视频| 91 偷| 国产白丝网站| 蜜臀久久99精品久久久电影| 亚洲?V高清一区二区三区尤物| 日韩大香蕉AV影片| 精品黄色电影| 老司机深夜18禁污污网站| 九九九久久久| 无码久久亚洲高清,| 成人小说另类在线| 91伊人久| 97人人夜夜精品视频| 青春草莓视频在线观看网址| 欧美A片中文字幕| 人人模人人看| 浪人综合网| 国产精品亚洲免费| 亚洲 欧美都市激情| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 九久9精品| 欧美 亚洲精品首页| 日本高清一本二本免费不卡| AV色女综合| 欧美很很操视频| 中文字暮97| 精产国品一区二三产品| 久湿久久| 国产精品人妻无码久久久互動交流| 国产精品人妻无码久久久老鸭窝 | 久久,精品一二三| 国产超碰国产97| www.99热在线只有精品| 91在线国产后入风骚翘臀美女素人| 91天天综合在线| 黑人猛交| 熟女乱伦二区| 999九九精品| 91N综合网| 婷婷色色五月天福利| 草草影院最新网址| 91 国产丝袜在线放观看| 欧美青青视频| 校园春色综合网| 1禁看欧美黄片免费看| 天天摸天天插天天日| 久草男人天堂| 亚洲中字幕日本一区二区三区| 天天躁日日躁xxxxx| 婷婷视频网| 欧美中字二区| 色妹子A V| 青青久操| 欧美性爱综合,免费| 久久久精品成人国产| 夜夜狼人妻| 十八禁黄色| 91艹B视频| 91美女视频在线| 男人天堂新在线| 淫荡熟女乱伦网| 蜜色网色哟哟| 五月丁香黄色网| 久热免费视频| 男人天堂最新手机版在线青青草| 国产精品一区二区亚洲人成毛片 | 亚州精品人妻一二三区| 国产精品呦一区二区三区| 嗯阿好爽好紧| 91成人18| 日本女厕偷拍| 久久精品国产Aⅴ| 国产激情综合五月久久| 少妇久久久免费| 日婷婷| 天综合网| 极品色| 五月婷婷无码| www.91视频网| 欧亚洲精品有视频| 欧美AAAA黄片| 强奸乱伦 亚洲一区| 五月丁香婷婷综合| 91性网| 综合婷婷| 激情抓乳插进去啪啪啪日韩 | A片A5445444| 日本有码久久| 超碰美国| 欧美高清性猛交| 毛片久久| 久草毛片电影怡| 久久透逼视频| 天天影视之亚洲综合网| 日韩有码免费视频| 日本久久女同性恋视频| 日少妇亚洲版| 多毛小伙内射老太婆 | 精品人成视频在线观看| 精品免费1| 老熟女91| 综合激情97 | 久久首页| 久久久少妇诱惑精品视频| 中国国国产一级特黄毛片| av最新免费中文字幕| 韩国女主播青草福利视频| 婷婷超| 超碰中文字幕人妻草一区| 天天躁日日躁xxxxx| 老熟女天天操| 欧美内射少妇| 欧美成人黄网色网站| 精品天堂| 欧美综合亚洲| 久久e6只有精品| 国产亚洲日韩在线三区黑人| 很很操在线| 久干网| 五月丁香综合啪啪| 2024黄色视频| 亚洲视频二区 | 欧美超碰人妻97| 婷婷五月天色色| 亚洲自拍偷拍视频在线 | 国产一区二区精品久久99| 欧美综合色综合| 婷婷五月天丁香花| 人人操我人人干| 日日妻色网| 久久久久久亚洲精品不卡人乳| 国产无码成人无码| 情色大香蕉| 欧美精品91| 久久精品六区| 美女主播色欲91抠b在线播放| 夜夜草网站| 麻豆视频国产一区二区| 精品一区二区三区蜜桃| 欧美激色| 330dv亚洲成年视频网| 大香蕉手机视频| 日本黄色大片一级视频免费麻豆| 97视频在线播放| A一级色女| 日韩精品熟妇| 久久色人体| 五月天黄色激情视频| 日本国产亚洲一区在线观看| 久久久久白虎| 日本久久超碰| 男女啊啊啊啊啊| 超碰97首页| 97香蕉人人乳| 91麻豆天美国产| 很很干很很操| 女优免费一区二区永久| 欧美精品日韩一区二区| 国产女人操逼视频| 天天干人人干天天日97| 91看黄片| 国语对白露脸XXXXXX| 99中文字幕| 国产蜜臀精品一区二区尤物| 超碰这里有精品| 自拍偷拍草一草| 精品传媒在线一区| 亚洲91色| 91人妻人人澡人人爽人人精品| 国产白丝AV| 久久精品国产亚洲粉嫩| 91欧| 亚洲欧美黄| 久久久久久999| 亚洲骚逼少妇| 亚洲AV色图| 日韩本不卡视频在线观看| 日韩丨制服丨中文|在线| 国产精品久久久999| 亚州久久9| 激情人妻另类| 骚货操死你| 清纯唯美亚洲另类| 蜜臀久久99精品久久久久久| 激情小说亚洲| 国产精品福利视频播放| 色伊人91| AA丁香综合激情| 国产精品老熟女一区二区| 艹我哪美一区无码| 曰本精品久久久| 你草精品在线视频| 小明看看网址| 欧美日韩久久精品爱爱| 国产拍偷精品网站| 综合久久久久久久综合网| 九99久久| 成人青青草原伊人| 极品销魂美女一区二区| 秋霞久久亚洲精品成人| 五月天色五月| 成人五月天色网| 亚洲系列欧美| 天天干电影| 精品久久无码午夜福利| 国产成人精品亚洲日本| 国产不卡精品91| 天天操人人操骚逼网站| 欧美精品一二三| 国产美女口爆吞精视频| 狠狠狠狠狠狠| 精品久久大胆人体| 久久久久久久9| 国产福利视频精品视频| 爱我干综合| 91网亚洲| 国产精品香蕉| 激情综合网激情五月天| 欧美日韩国产电影| 大逼色网站| 一区操逼| 亚洲妇色| 亚洲欧美一区二区网址| 国模精品娜娜一二三区| 亚洲精品欧洲精品| 老鸭窝成人免费毛片视频| 无码 黑人一区二区三区| 欧美99| 久久超碰av在线| 人人天天欧洲| 精品久久久一本一道| 婷婷色色五月天福利| 免费看日产一区二区三区| 亚洲 欧美 中文 日韩超碰 | 91精品大奶人妻| 欧美色图片91| 国产毛片片精品天天看视频| 性爱动态120秒| 男生通女生屁股| www黄片免费看com| 青青伊人加勒比海| 久思思热视频在线观看| 亚洲熟妇丝袜在线观看| 美女91AV| 天天爱天天韩国日本牛牛牛牛 | 操逼片国产| 小草精彩毛片| 啊啊啊啊啊好多水| 小少妇| 日曰骚久久精品| 国产18精品亚洲精品| 国产成自自拍在线观看| 亚洲中文字幕久久人妻| 97视频在线视频| 色狠狠 - 百度| 无码视频一区二区| 91精品国产日韩欧美综合| 天天亚洲综合| 少妇高潮99p| 婷婷亚洲五月***久久| 97精品网| 91人妻做a观看视频| av在线浏览| 人人搞人人插人人操| 91人妻超碰| 在线视频97| 五月丁香久久| 很很操在线| 一区,二区,三区网站| 啊啊啊好想要| 特级大荫道BBwBBwBBW| 精品综合久久久久久五月天| 亚洲日韩青青草色月| 欧美日韩电影成人在线| 免费国产| 精品超碰中文在线| 国产又色又粗又黄又爽| 亚洲人91| 五月丁香婷婷色| 亚洲巨爆乳一区二区三区四季网| 撸撸成人在线视频| 久久这里只精品99re66图 | 国产精品久久久久无码Av网曝门| 亚洲永久AV无码精品秋霞| 日本色色视频网站| 97精品视频在线播放| 欧美 亚洲 偷拍自拍| 91N综合网| 北京专精特新企业招聘信息| 久久夜黄色无码A级大片| 久久精品一区一起草| 久久女人一区二区三区| 亚洲 无码 偷拍| 久热大香蕉网站| 久久性爱免费送| 久久产精品一区二区三区电影| 大吊色| 亚洲欧美国产成人综合不卡| 立川理惠被中出无码| 福利一级版子| 激情小说五月天| 不卡中文字幕aⅴ在线| 亚洲精品久久久久久| 日韩美一区| av午夜影院在线播放| 国产又粗又长视频| 九九九九一级| 中文字幕乱碼在线| 丁香婷婷色五月| 377p欧洲日本亚洲大胆| 国产AAAAAABBBBB| 日韩干B| 亚洲色图加勒比| 国产欧美日韩在线不卡第一页| 国产精品久久久啊| yazhououmeizongya| 色婷婷婷五月天激情四射| 五月丁香色色网| 丰满人妻一区二区三区四区| 蜜臀99久久| 99在线精品观看视频中文| 亚洲中文字幕日产无码久久| 久jiu久神马影院| 激情综合网五月婷婷| 影音先锋少妇| 国产偷人伦激情在线观看| 久久久久幕乱码| 日本东京热大香蕉a片| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 久99视频| 亚卅熟女乱色| 成人性爱高清视频免费看| 中文字幕精品一区欧美| 亚洲国产精品V?在线播放| 亚洲熟女av中文字幕| 97日韩欧美亚洲| 国产女人9999| 加勒比五月天| 超碰在97| 久久久九九| 人人妻天天做天天爽| 99re99视频在线免费观看| 91大神电影天堂| 麻豆蜜桃视频在线观看| 色哟哟-国产专区| 97干在线看| 欧美综合站| 天天做天天爱天天高潮| 最新欧美色网| 精品射1999| 99999精品视频| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | av东京热男人的天堂| 夜夜操91744565| 97视频观看| 久久a久久| 综合激情97| 美女黑人91神马| 狠狠爱AV| 91亚洲影视| 久久AV无码AV| 人妻人人做人人澡人人爽欧美一区| 国产精品一二三在线看| 日本九九九九| 久久99国产综合精品女同| 有码免费观看| 精品综合久久久久久97| 欧美熟妇精品黑人巨大91| 亚洲少妇在线观看| 一本精品日本在线视频精品| 日韩乱插| 爆乳免费黄网站| 91国产美女丝袜足交精品视频| 成人在线午夜视频一区| 91精品网站| 一级性爱视频免费观看 | 超碰色综合| 最新av网站在线观看| www.久久最新地址| 男人的天堂2010| 懂色AV中文| 成人一级二级| 日韩免费a级毛片无码a∨| 国产黄色影片在线观看| 综合婷婷| 久日综合网| 亚洲久久久久| 国产强奸超碰AV| 神马福利久草| 精品二区三四区五电影 | 精品人体无圣光凹凸| 日欧操屄视频| 大香网伊人久久综合网eew| 安微少妇操BBB| 强被迫伦姧在线观看无码网站| 欧美日韩国产高清在线一二三区 | 美女主播色欲91抠b在线播放| 亚洲极品| 370p日韩欧美亚洲精品| 精品少妇后入一区二区三区四区人妻巨乳 | 亚洲91综合| 91色狼| 婷婷中文网| 一道本东京热加勒比一区二区三区| 日本天天干天天日一区| 人妻丰满熟妇一区二区三| 六月色色| 精品人妻久久久| 国产A v无码专区| 日韩在线女优天天干| 亚洲人妻久久久| 黄片免费看的| 97日视频| 天天视频网站黄| 天天欧美色| 亚洲综合在线91| 日本性爱少妇| 岛国不卡超碰护士AV在线播放| 色在线综合| 97天天搞在线| 亚洲天堂一区| 殴美性色a级欧美| 日韩久射综合| 开心五月天激情网| 91白虎| 中国探花熟女| 91无码人妻精品一区二区三区蜜桃| 人妻丰满熟妇一区二区三| 国产九九久久久精品| 91精品国产综合久久久蜜臀酒店| 26uuu国产| 亚洲天堂少妇| 亚洲欧美经典一区二区 | 在线免费观看日韩一区| 国产极品久久久| 欧美激情激情xxxx欧美专区| 97青青操视频| 亚洲电影中字一区二区| 精品久久久久黄少妇| 日本操逼无码| 性欧美体内射精| 秋霞一级鲁丝片A片| 96精品久久久久中文字幕| 97香蕉网| 人人超碰在线观看黄| 三男一女不戴套的A片| 精品人妻夜夜草| 日韩激情无码影院| 啊啊啊啊啊啊啊啊要喷了| 欧美三级中文字幕hd| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 熟女网站最新| 亚洲国产午夜真人一级片中文字幕精品黄网站| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 99日韩| 精品九区| 久久久久久波多野吉衣高潮| 国产第25页在线观看| 91热热色| 91成人在线| 欧美亚洲另类在线蜜桃| 中出欧美| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 啊啊啊啊二区好大| 91人妻Pr| 一级性爱视频免费在线| 伊人96在线| 爽爽淫人网| 91成人高清在线观看| 久久视频,这里只有精品| 国产精品三级视频网站| 久久夜夜| 少妇人妻在线| 懂色AV中文| 国产福利影视| 在线观看不卡一区二区三区| 亚洲自拍小说| 精品久久大胆人体| 91色艳| 爱av免费| 91在线秘 男同| 精品人妻丰满熟妇一区二区三| 97超碰色屌| 五月丁香综合| 日韩人妻播放| 中国AAAAAA黄色片| 热热色91| 久久熟女精品不卡一区| 成人在线视频一区| 欧美亚洲激情小说| 色狠狠综合| 18禁精品网站在线看| 97色碰| 超碰97人妻自拍| 久久久久久久久久久久欧美日| 精品无码一区二区| 久久久久免费少妇| 日韩性爱高清免费视频| 浪人综合网| 99久国产精品午夜性色福利| 天天综合~91| 欧美92| 亚洲中文sv| 色亚州人久干视频在线观看免费版| 欧美综合97www| 九九成人视频| 五月婷婷色| 久久久精品成人国产| 日本视频在线观看污污污| 日语五十路和六十路亚洲国产精品| 校园春色 亚洲| 操淫穴亚洲五月丁香 | 高潮综合网| 日韩一级二级在线| 殴美性色a级欧美| 激情五月天网| 五月丁香影视| 人妻少妇视频在线播放| 婷婷成人五月天| 人妻22p| 亚洲中文字幕精品久久久久久直播| AV和黑人在线播放| 高清一区AV无码| 国模无码人体一区二区三| …亚洲黄色厕厕女女在线播…| 中韩中文字幕在线观看| 欧美成97爱| 96久久久久久久| 97资源久久| 91青青草| 日婷婷| 九月丁香婷婷色| 成人三一级一片aaa| 黄片com.| a在线视频免费观看| 久久东京国产精品视频| 伊人久久艹| 99久久综合| 91久久精品国产| 日本不卡码黄色| 中文字幕78| 天天影视之亚洲综合网| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 天天情欲宗合网| 亚洲有薄码区久久在线一区| 日韩精品 欧美激情| 9丨久久九九九 | 精品久久久av| 亚洲永久AV无码精品秋霞| 青女在线| 亚洲狠狠入| 久久久96| 色黄色美女大长腿午夜视频| 自拍鲍鱼一区在线高清观看免费| 国产女人高潮视频| 884t在线| 欧色网址| 天天综合亚在线| 亚洲熟女综合| 夜夜做夜夜爽精品视频| 欧美性爱第1 页| 国产黄片在线免费观看| 亚洲麻豆精品二区三区| 欧美情色男人的天堂| 97久久超碰国产精品| 亚洲伊人成综合成人网| 亚洲国产高清福利视频| 免费看污网站| 凹凸 69堂 在线播放| 国产色综合亚洲色综合吹潮| AV大香蕉| 日韩熟女视频二区| 日本羞羞的视频在线播放| 亚洲无码久久久久久久| 蜜臀久久99精品久久久久免费观| 熟妇女伦乱视频视频| 五月丁香六月综合缴清无码 | 欧洲大香蕉| 国产资源中文字幕在线| 九九综合久久| 日产成人久久| 无码一区二区精品视频久久久春药| 99精品在线播放| 偷拍五区| 午夜乱轮操逼视频免费看| 红杏大香蕉| 97人人色| 国产亲戚伦亲在线| 欧美亚洲涩涩| 久久国产AⅤ| 欧美精品成人亚洲| 91宗合网| 99自拍视频在线观看| 久久超碰98| 欧美精品久久久久久久丰满| 麻豆精品久久久久久久| 黄色工厂这里只有精品| 亚洲最大无码中文字幕网站| 97一区二压| 国产二区三区免费视频| 色嘟嘟人妻天堂网| 九九热国产| 久久人妻精品| 青青草好吊色| 国产精品一二三区福利| 婷婷人妻激情| 婷婷中文字幕| 亚洲黄色AV电影| 欧美色色色| 超碰吊日色| 久久久久婷婷| 五月天婷婷社区| 五月婷婷综合网| 中文字幕丝袜| 天天影视色香色欲| 精品妇女一区二区三区| 人妻人久久精品中文字幕| 老熟女乱子伦中文字幕一区二区| 夜夜福利| 中文字幕一区二区在线日韩精品| 国模不卡一本二本三电影| 中文字幕av亚洲精品| 神马视频久久久久久| 亚洲AV无码乱码| 亚洲人成色9999精品久久| 97亚洲在线| 亚洲情色91| 男人的天堂网页| 北京专精特新企业招聘信息| 激情综合网激情综合| 久久久工口| 久久久久亚洲Av无码专区老牛影视| 久久天天性久久伊人| 操东北女人| 久草色悠悠在线视频| 911av网站免费观看| 99re在线视频这里只有精品| 九九色热| 亚洲欧美另类小说| 天天综合AV| 国产a片操逼| 91色人| 天天色综合图片| 欧美中文字幕日韩在线| 校园春色家庭伦理欧美激情| 国产 码在线成人网站| 91美女在线观看| 裸模AV女优| 欧美成人午夜免费福利785| 91狠狠综合久久| 91扒丝袜综合在线| 国产亚洲精品美女久久久m| 欧美丝袜中文字幕07在线| 大香蕉伊人一区在线观看| 国产人伦a片信息免费片| 亚洲欧美综合图片| 91亚洲欧美色图| 色爱国产| 久久久久久久伊人精品| 97色欧洲| 色天堂综合| AV大香蕉| 久久免费精品视频免一| 97综合网| 99色热| 加勒比海成人视频网| 碰碰在线视频| 久久久久亚洲Aⅴ无码| 操逼操逼操| 国产青青综合伊人| 久久大线蕉一区| 日韩有码一区三区| 亚洲成?V人片在线观看福利| 欧美偷拍区| 久久男人天堂| 新怡红院| 天天天操天天天爱| 自拍二页| 97硬碰| 色97| 一级黄色影片| 婷婷AV一区二区三区| 国产成年精品高清在线观看91| 精品无吗m| 91超碰在线观看| 亚州熟妇精品| 亚洲视频一二区| 五月天色图| 91 手机在线播放 绯色| 日本3级一区二区免费| 国产精品麻豆免费视频| 午夜精品久久99蜜桃的功能章节 | 亚洲欧美经典一区二区| 日本成人A片免费看| 秋霞一集毛片观看| 国产精品人妻无码久久久互動交流 | 亚洲狠狠入| 久草草一二三四区久久| 大香蕉中文aV在线| 少妇国产不卡| 亚洲日韩AV视色| 亚洲麻豆精品二区三区| 免费观看欧美日韩操逼视频| 亚洲色综合| av大香蕉| 亚洲天堂区| 久久婷婷一区二| 精品久久久av| 一区二区三区蜜桃成人撸久久东京热| 精品国产网站| 99青青草国产视频| 麻豆一区二区三区精品| 成人精品一区二区三区| 91天天爱| 久久久草草精品| 91男女| 欧美性91| 欧美性爱第一页久久| 色欲Av人妻精品一区二| 51久久夜色精品国产麻豆| 99国产精品视频尤物| 久久三| 丁香五月偷拍| 精品国产污一区二区三区| 久久久久久久久九九久孕交| 亚洲淫色网中文| 综合天天。| 91亚洲影视| 亚洲 小说 欧美 激情 另类| 日韩美女操b| 日韩啪啪网| 高清不卡一二三区视频......| 物尤视频一区二区| 精品一区二区2| 欧美懂色综合网| 美国精品国产精品| 精品亚洲国产成人AV制服丝袜 | 亚洲日韩少妇一道本视频| 人人操人人精品影片| 久夜视频| 性色av蜜臀av色欲aV| 天天天天操| 在线亚洲精品久久久| 欧亚韩国999| 国产色图乱伦| 久久久久亚洲Aⅴ无码| 综合激情五月丁香| 婷婷三区| 天天综合网~91| 精品免费国产二区三区| 加勒比综合a∨| 黄骗免费网站| 亚洲最大AV网| 久久久久久亚洲精品中文字幕人妻| 91熟女综合| 人妻熟女一区二区三区视频| 久久免费99精品久久久久久| 色噜噜综合网| 精品网站99999| 精品一区二区三区丰满熟女-亚洲欧美一区 | 成人午夜高潮av猛片| 极品尤物自安慰| 99精品丰满人妻无| 欧美瑟综合| se01国产在线视频| 丁香五月天婷婷姐| 国产精品日日摸天天碰| 999精品国产高清一区二区| 99视频自拍| 欧美 亚洲 综合 制服 另类| 亚洲?V高清一区二区三区尤物| 日韩AV无码中文一区二区| 中文字幕加勒比海高清无码免费视频| 国语精品av| 欧美自拍偷拍免费观看| 久久有码| 91久久久亚洲| 五月丁香综合网| 色777999综合| 91精品女厕偷拍视频| 国产av青草| 欧美中文综合| 超碰国产在线| 中文字幕第7页| 亚洲欧美中文一区二区三| 久久嫩草国产成人一区| 一区二区高清视频| 久久99操天天日| 黑白配性爱AV成| 日本一区二区三区四区免费观看| 超碰1024久久| 家庭乱伦国产精品| 亚殴在线| 超碰91在线| 97WW精品| 91亚洲网| 亚洲精品819| 福利视频合集| 亚洲日韩av一区二区三区百合| 久久久久久久97| 欧美日日网| 9久久久久| 熟妇熟女视频一区二区三区| 久热99999| 欧美顶级黄片AAAAA在线免费看| 超碰久久综合| 超碰人人超在线观看| 国产91专区| A片三级无码| 日韩欧美久久婷婷网站| 欧美成人性爱视频大全| 亚州欧美另类| 激情六月天| 欧美天天综合网版| 内射白嫩美女| 亚洲国产成人精品999| 在线人妻熟女一区二区三区四区五区| 亚洲av噜噜噜噜噜噜| 禁止观看美女黄| 久久精品国产亚洲妲己影视| 一区二区三区蜜桃成人撸久久东京热 | 激情无码日韩| 国模91| 久久婷婷精品| 亚洲色图91| 亚射在线| 在线强奷到舒服的无码视频| 91男人综合| 欧日韩不卡视.频| 国产粉嫩蜜臀av一区二区三区| 亚洲综合性感在线| 秋霞蝌科网日本一区| 熟女久久久| 五月丁香六月激情综合| juliaann丝袜| 97一区二区蜜臀| 一线黄色免费性爱片| 亚洲视频1区| 中文字幕无码不卡啪啪| 五月丁香综合激情| 激情天天视频| 青青草国产一区二区三区| 中文字幕成人| 欧美性爱18观看| 亚洲影视第一页| 女色视频社区| se01国产在线视频| 91操熟女视频| 大香蕉手机在线视频| 四虎国产精品永久地址入口| 欧美色图99| 日韩精品人妻系列无码天堂| 国产精品无码在线| 人人操人人肉久久精品| 亚洲成人精品久久久| 中日韩熟女| 国产深喉视频一区二区| 日韩中文字幕宗合在线| 亚洲激情网一二三四区| 奇米四色影视777久久久| 91热| 天堂资源站| 美国美女AV在线| 探花熟女,姿勢到位,體驗感也到位| 少妇天堂| 99爱爱| 日本一二区免费| 99日精品欧美国产| 91伊人久| 91高潮| 久9久9久9久9久9久9| 97 超碰 人人做 人人爱| 三级三久久线久久99久目本WW| 综合激情二| 91亚洲欧美激情| 天天情欲宗合网| 第45页一区二区| 日本 欧美 亚中文字幕| 女人午夜视频777| 草莓精品视频在线免费观看| 性色A∨91| 91痴汉| 亚洲人久久久网| 日韩精品熟妇| 97舔舔| 婷婷丁香六月天| 国产色呦呦| 成人乱人伦一区二区| 国产白丝av| 青青操国产夫妻| 成人日本片久久久蜜桃| 亚洲 另类 丝袜 自拍 动漫| 熟妇最新先锋一二三区| 99免费视频| 五月丁香婷婷色| 欧美亚洲| 精品亚洲国产成人精品| 国产传媒午夜理伦精品| 91人妻人人澡人人爽人人精品| 欧美激情在线观看视频| 东京男人天堂| 久久精品成人| 欧美色97| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 欧美狠狠干| 性综合网| 欧美亚洲自拍另类人妻| 精品免费视频国产一区| 国产精品ww久久| 国产精品点击进入在线影院高清 | 婷婷亚洲综合| 日韩人妻精品久久久久| 日本色色网| 亚洲欧美大香蕉| 欧美另类色| 大香蕉在线86| 大香蕉男人的天堂| 超碰碰激情97+久| 亚洲色图欧美色图制服诱惑| 久久夜精品一区二区三区| 内射黑丝袜| 91女日逼| 张柏芝国产一区在线观看| 色综合一本| 日韩免费大片一级播放| 免费在线观看国内色片网站网址| 国产中文字幕曰本毛片| 色色五月丁香| 一区二区三区网站日日骚| A级在线视频| 成人无码在线视频网站| 中文字幕一区二区三区高清| 岛园激情| 香蕉在线一区二区三区| 精品久久久中文字幕不| 精品性爱久久视频| 噜噜噜亚洲精| 探花精品 一区二区| 国产成人精品必看 | 图色综合网| 国产精品久久久久久久久久久久久久久| 少妇内射www在线观看视频| 夜夜做夜夜爽精品视频| 97欧美精品| 日本免费人成视频播放120秒| 久久鲁干| 一区二区三区网站日日骚| 夜夜嗨绯色| 肥佬影院91| 中文字幕人成乱码熟女香港| 2020国产精品| 免费9 1久久| 啊啊啊骚| 十八禁av无码免费网站APP| 久99热| 情色五月天网| 97超碰香蕉| 中国女人内射6XXXXX| 人人色97| 人人摸人人舔一区二区| 97干在线| 久久人人爽人人爽人人片Ⅴ| 夜夜爽妓女| 强乱老妇中文字幕| 国产对白刺激视频| 九色97| 老色鬼成人精品视频下载大在线观看| 啊啊啊操死我| 日韩乱插| 天天激色| 精品国产三级av韩国在线| 大香蕉综合| 97精品97久久| 色综合国产在线观看| 大香蕉九九| 青青草中日韩在线| 91在线精品一区二区三区| 99无码视频| 久久久熟女一区| 91人妻最真实刺激绿帽| 日韩一区二区精品视频| 黄久在线| 十八禁av无码免费网站APP| 国产精品天美传媒| 91在线观看,天天综合| 欧美东京热精品A∨| 亚洲诱惑| 欧美gv在线观看| 国产人妻精品久久久一区二区三区| 午夜九九| 亚洲色图亚洲无码强奸乱伦| 成人A片男人的天堂| 无码78| 国产成人无码网站在线视频| 九九九九九九九九九五码| 99人妻碰碰碰久久久久禁片| 欧美色图天堂在线| 91青青| 99色在线视频| 婷婷人妻激情| 一区二区三区机械有限公司| 91艹| 老熟妇一区二区三区…| 色色99| CCYY草草影院地址入口| 国产有码一区| 免费人成毛片乱码| 蜜桃久久久久久| 欧美色亚洲| 亚洲精品819| 亚洲图片欧美色图| 欧美色偷拍 | 日本视频在线中文字幕| 天天爱天天操| 亚洲资源站| 五月婷婷综合在线| 大奶的诱惑| 欧美黄页在线| 黄片视频观看| 色欲人妻一区二区在线| 午夜福利1区2区3区| 96AV久久久| 国产精品久久久久久久AV大片| 久操操| 3d成人精品一区二区| 囯产精品强| 99久久99九九99九九九| 蜜臀AV一区二区三区| 婷婷五月天激情网| 狠狠操狠狠操操| 久久偷拍人| 欧美人妻精品一区二区| 97日韩欧美亚洲| 国产精品久久久亚洲一区| 一区二区中文| 精品小视频在线| 黄色性爱网网| 亚洲欧美洲综合| 日韩美女久久一区二区三区| 亚洲 小说 欧美 激情 另类| 午夜后入| 丁香婷婷久久 | 久久国产999| 日韩成人网址| 日韩在线国产字幕| 欧美中文狠| 操美女高潮抽搐白浆| 男人天堂2017| 亚洲视频二区 | 在线色资源| 久久国产三区| 久久五十路熟女人妻| 亚洲中文字幕av| 97在线欧洲| 久久色情| 影音先锋日本一区二区| 亚洲亚洲亚洲天堂天堂| 97精品国产97久久久久久| 精品成人亚洲午夜电影| 好涩综合| 亚洲天天影视色综合| 96久久科窝| 国产成人精品日本亚洲语言| 国产精品黑人一区二区三区| 精品久久久一本一道|