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

ARTICLE DETAIL

資訊詳情

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

U-Boot移植必解:Kconfig配置原理與實(shí)戰(zhàn)五步法

U-Boot移植必解:Kconfig配置原理與實(shí)戰(zhàn)五步法 1. 項(xiàng)目概述為什么U-Boot移植繞不開Kconfig這道關(guān)“U-Boot移植_Kconfig”這個(gè)標(biāo)題看起來像一句內(nèi)部筆記但背后藏著嵌入式系統(tǒng)工程師最常踩、也最容易被低估的深坑——不是芯片手冊(cè)沒看懂不是時(shí)鐘樹配錯(cuò)了而是Kconfig配置沒理清導(dǎo)致整個(gè)移植過程卡在編譯前就反復(fù)失敗。我做過二十多個(gè)不同SoC平臺(tái)的U-Boot移植從ARM Cortex-A9到RISC-V雙核MCU從全志H3到兆易GD32V系列幾乎每一次都有至少兩天時(shí)間耗在Kconfig上明明驅(qū)動(dòng)代碼寫好了設(shè)備樹也改對(duì)了可一執(zhí)行make menuconfig目標(biāo)選項(xiàng)根本找不到或者強(qiáng)行選中后編譯報(bào)一堆undefined reference to xxx追下去發(fā)現(xiàn)是某個(gè)依賴項(xiàng)被Kconfig自動(dòng)禁用了。這不是玄學(xué)是U-Boot構(gòu)建體系里最核心的“配置門控機(jī)制”。Kconfig不是簡(jiǎn)單的開關(guān)列表它是U-Boot整個(gè)功能模塊的拓?fù)鋱D譜決定了哪些C文件會(huì)被gcc編譯、哪些頭文件會(huì)被包含、哪些宏定義會(huì)生效、甚至哪些鏈接腳本段會(huì)被保留。你看到的CONFIG_CMD_NET、CONFIG_DM_GPIO、CONFIG_SPL這些宏全由Kconfig生成的.config文件驅(qū)動(dòng)而.config又反過來控制Makefile的條件編譯邏輯。所以“U-Boot移植_Kconfig”本質(zhì)上是在說移植不是把代碼拷過去就能跑而是要讓整個(gè)配置系統(tǒng)理解你的硬件并主動(dòng)為你加載正確的驅(qū)動(dòng)棧和初始化流程。它適合三類人剛接手新板子的嵌入式新人別再盲目復(fù)制開發(fā)板配置、想搞清楚U-Boot啟動(dòng)鏈路的中級(jí)工程師Kconfig是理解啟動(dòng)順序的第一張地圖、以及需要裁剪U-Boot尺寸做資源受限場(chǎng)景如MCU級(jí)Bootloader的優(yōu)化者。接下來我會(huì)拆解Kconfig在U-Boot中的真實(shí)作用機(jī)制、實(shí)操中必須掌握的5個(gè)關(guān)鍵動(dòng)作、如何從零構(gòu)建一個(gè)新板級(jí)配置、以及那些官方文檔絕不會(huì)寫的“配置陷阱”。2. Kconfig設(shè)計(jì)原理與U-Boot構(gòu)建體系深度解析2.1 Kconfig不是獨(dú)立模塊而是U-Boot的“基因編輯器”很多人誤以為Kconfig只是個(gè)圖形化菜單工具其實(shí)它在U-Boot中扮演的是“元構(gòu)建控制器”的角色。它的存在直接決定了U-Boot二進(jìn)制鏡像的基因構(gòu)成。我們先看一個(gè)典型場(chǎng)景你在configs/myboard_defconfig里寫了CONFIG_CMD_USBy但編譯后usb start命令卻不可用。問題往往不出在USB驅(qū)動(dòng)代碼而出在Kconfig的依賴鏈上。U-Boot的Kconfig采用嚴(yán)格的“依賴傳遞”模型CONFIG_CMD_USB的定義在common/Kconfig中但它明確依賴CONFIG_USBy在drivers/usb/Kconfig中定義而CONFIG_USB又依賴CONFIG_DM_USBy設(shè)備模型支持和CONFIG_OF_CONTROLy設(shè)備樹解析。如果其中任意一環(huán)在你的defconfig里沒打開Kconfig在解析時(shí)就會(huì)自動(dòng)禁用CONFIG_CMD_USB即使你手動(dòng)寫了make也會(huì)在預(yù)處理階段把它過濾掉。這種依賴不是線性的而是網(wǎng)狀的。比如CONFIG_DM_GPIO不僅被GPIO命令依賴還被I2C總線驅(qū)動(dòng)、SPI Flash初始化、甚至電源管理芯片通信所依賴。這就解釋了為什么移植時(shí)不能只盯著“我要用的功能”而必須理解整個(gè)功能網(wǎng)絡(luò)的連通性。Kconfig文件本身是分層組織的頂層Kconfig在U-Boot根目錄負(fù)責(zé)引入各子系統(tǒng)Kconfigarch/目錄下按架構(gòu)arm, riscv劃分基礎(chǔ)能力drivers/目錄下按外設(shè)類型usb, mmc, eth細(xì)化common/目錄則管理通用命令和框架。這種結(jié)構(gòu)確保了配置的正交性——修改一個(gè)驅(qū)動(dòng)的配置不會(huì)意外影響另一個(gè)無關(guān)模塊。2.2 Kconfig與Makefile的協(xié)同機(jī)制從.config到.o文件的完整鏈路理解Kconfig必須同步看清它和Makefile的配合。整個(gè)流程是Kconfig→.config→include/autoconf.mk→Makefile→.o文件。第一步make menuconfig或make myboard_defconfig讀取所有Kconfig文件生成.config純文本形如CONFIG_ARMy。第二步U-Boot的頂層Makefile調(diào)用scripts/kconfig/conf工具將.config轉(zhuǎn)換為include/autoconf.mk這是一個(gè)Makefile語(yǔ)法的頭文件內(nèi)容是CONFIG_ARM : y這樣的賦值。第三步所有子目錄的Makefile都通過include $(srctree)/include/autoconf.mk導(dǎo)入這個(gè)文件從而獲得所有CONFIG_XXX變量。第四步Makefile利用這些變量做條件編譯obj-$(CONFIG_ARM) arch/arm/lib/這行代碼只有當(dāng)CONFIG_ARMy時(shí)arch/arm/lib/目錄下的源文件才會(huì)被加入編譯隊(duì)列。這里有個(gè)關(guān)鍵細(xì)節(jié)autoconf.mk里的變量是字符串不是C語(yǔ)言宏。所以你在C代碼里用#ifdef CONFIG_ARM是無效的必須用#if defined(CONFIG_ARM)因?yàn)镃ONFIG_ARM在預(yù)處理器里是一個(gè)宏定義其值由include/generated/autoconf.h提供而這個(gè)頭文件正是由autoconf.mk驅(qū)動(dòng)生成的。autoconf.h的生成路徑是scripts/Makefile.autoconf→include/generated/autoconf.h。這個(gè)頭文件被include/common.h全局包含因此所有C文件都能訪問。所以當(dāng)你在代碼里看到#if CONFIG_IS_ENABLED(DM)它實(shí)際調(diào)用的是generated/autoconf.h里定義的CONFIG_DM宏而這個(gè)宏的開關(guān)狀態(tài)完全由Kconfig的最終決策決定。這就是為什么改完Kconfig后必須重新執(zhí)行make menuconfig或make olddefconfig——否則autoconf.h不會(huì)更新你的代碼永遠(yuǎn)讀不到新的配置狀態(tài)。2.3 U-Boot Kconfig與Linux內(nèi)核Kconfig的本質(zhì)區(qū)別雖然語(yǔ)法相似但U-Boot的Kconfig有自己獨(dú)特的工程哲學(xué)。Linux內(nèi)核追求“全功能覆蓋”Kconfig選項(xiàng)極多允許用戶精細(xì)裁剪而U-Boot更強(qiáng)調(diào)“啟動(dòng)確定性”它的Kconfig設(shè)計(jì)有三個(gè)硬約束第一啟動(dòng)階段隔離。U-Boot分為SPLSecondary Program Loader和Main U-Boot兩個(gè)階段它們有完全獨(dú)立的Kconfig樹。CONFIG_SPL相關(guān)選項(xiàng)只在spl/Kconfig中定義且SPL的Kconfig默認(rèn)關(guān)閉所有非必需功能如命令行、文件系統(tǒng)只保留最精簡(jiǎn)的RAM初始化和加載能力。第二設(shè)備樹強(qiáng)綁定。U-Boot 2014.07之后全面轉(zhuǎn)向OF_CONTROL幾乎所有驅(qū)動(dòng)都要求設(shè)備樹支持。這意味著CONFIG_OF_CONTROLy是絕大多數(shù)外設(shè)驅(qū)動(dòng)的前置條件而它本身又依賴CONFIG_OF_LIBFDTylibfdt庫(kù)和CONFIG_SYS_FDT_PAD0x3000預(yù)留設(shè)備樹空間。第三架構(gòu)抽象層優(yōu)先。U-Boot的Kconfig把硬件抽象放在比具體驅(qū)動(dòng)更高的層級(jí)。例如CONFIG_ARM64開啟后會(huì)自動(dòng)啟用CONFIG_SYS_ARCHarm64和CONFIG_SYS_CPUaarch64進(jìn)而觸發(fā)arch/arm64/Kconfig中定義的CONFIG_ARM64_ERRATUM_843419等CPU微碼修復(fù)選項(xiàng)。這種設(shè)計(jì)讓板級(jí)配置更聚焦于“我的板子有什么”而不是“我要用哪個(gè)驅(qū)動(dòng)”降低了配置復(fù)雜度。這也是為什么官方推薦從configs/evb_rk3399_defconfig這類參考板配置開始修改而不是從頭寫Kconfig——因?yàn)閰⒖及逡呀?jīng)幫你把架構(gòu)層的依賴關(guān)系都梳理好了。3. 實(shí)操核心環(huán)節(jié)從零構(gòu)建新板級(jí)Kconfig配置的五步法3.1 第一步定位并創(chuàng)建板級(jí)Kconfig入口文件所有新板子的Kconfig起點(diǎn)必須是configs/目錄下的board_name_defconfig文件。這個(gè)文件不是Kconfig語(yǔ)法文件而是一個(gè)“配置快照”記錄了該板子所有CONFIG_XXX的開關(guān)狀態(tài)。但它的源頭是arch/arch/Kconfig中定義的menu Board selection節(jié)點(diǎn)。以ARM平臺(tái)為例打開arch/arm/Kconfig你會(huì)找到類似這樣的代碼塊menu Board selection source board/sunxi/Kconfig source board/rockchip/rk3399/Kconfig source board/stmicro/stm32mp1/Kconfig endmenu這里的source指令就是Kconfig的“模塊化引入”。要讓你的板子出現(xiàn)在make menuconfig的板級(jí)選擇菜單里必須在對(duì)應(yīng)架構(gòu)的Kconfig中添加一行source board/your_vendor/your_board/Kconfig。假設(shè)你要移植一塊基于CH32V305的板子vendor叫wchboard叫ch32v305_evb那么你需要在arch/riscv/Kconfig的menu Board selection里添加source board/wch/ch32v305_evb/Kconfig創(chuàng)建目錄board/wch/ch32v305_evb/在該目錄下新建Kconfig文件內(nèi)容必須包含一個(gè)config TARGET_CH32V305_EVB條目這是U-Boot識(shí)別板子的唯一ID。標(biāo)準(zhǔn)模板如下if TARGET_CH32V305_EVB config SYS_BOARD default ch32v305_evb config SYS_VENDOR default wch config SYS_SOC default ch32v305 config SYS_CONFIG_NAME default ch32v305_evb endif注意if TARGET_CH32V305_EVB這個(gè)條件包裹它確保只有當(dāng)用戶在make menuconfig中選中該板子時(shí)這些配置才生效。SYS_CONFIG_NAME的值會(huì)直接映射到configs/ch32v305_evb_defconfig文件名這是U-Boot構(gòu)建系統(tǒng)的硬編碼約定。很多新手在這里栽跟頭以為只要建了Kconfig就行結(jié)果make menuconfig里根本看不到自己的板子原因就是忘了在架構(gòu)Kconfig里source它或者TARGET_XXX的名字和defconfig文件名不一致。3.2 第二步生成初始defconfig并理解其結(jié)構(gòu)創(chuàng)建好Kconfig入口后執(zhí)行make ch32v305_evb_defconfig。這個(gè)命令會(huì)觸發(fā)U-Boot的配置系統(tǒng)根據(jù)board/wch/ch32v305_evb/Kconfig中的定義生成一個(gè)空的configs/ch32v305_evb_defconfig文件。但此時(shí)它幾乎是空的只有一行CONFIG_TARGET_CH32V305_EVBy。真正的配置填充需要借助make menuconfig。運(yùn)行make menuconfig進(jìn)入圖形界面后按/鍵搜索TARGET_CH32V305_EVB回車定位到你的板子選項(xiàng)用空格鍵選中變成*然后按Esc退出。這時(shí)系統(tǒng)會(huì)自動(dòng)保存配置到configs/ch32v305_evb_defconfig。打開這個(gè)文件你會(huì)發(fā)現(xiàn)它是一長(zhǎng)串CONFIG_XXXy或CONFIG_XXXm的列表。重點(diǎn)來了不要手動(dòng)編輯這個(gè)文件它是Kconfig系統(tǒng)的輸出不是輸入。所有修改都必須通過make menuconfig進(jìn)行否則Kconfig的依賴檢查會(huì)失效。defconfig文件的結(jié)構(gòu)有嚴(yán)格順序第一行必須是CONFIG_TARGET_XXXy這是板子標(biāo)識(shí)接著是架構(gòu)相關(guān)配置CONFIG_ARMy然后是SOC特性CONFIG_CH32V305y再是外設(shè)驅(qū)動(dòng)CONFIG_DM_GPIOy最后是命令集CONFIG_CMD_GPIOy。這個(gè)順序不是隨意的它反映了U-Boot的初始化順序先初始化架構(gòu)再初始化SOC再初始化外設(shè)最后注冊(cè)命令。如果你在defconfig里把CONFIG_CMD_GPIOy寫在CONFIG_DM_GPIOn前面make會(huì)警告你依賴沖突但不會(huì)阻止編譯結(jié)果就是GPIO命令編譯進(jìn)去但無法運(yùn)行。3.3 第三步精準(zhǔn)啟用核心驅(qū)動(dòng)避開“全選陷阱”新手最容易犯的錯(cuò)誤就是在make menuconfig里把所有看到的驅(qū)動(dòng)都打上*。這會(huì)導(dǎo)致兩個(gè)嚴(yán)重后果一是編譯時(shí)間暴增U-Boot會(huì)編譯所有選中的驅(qū)動(dòng)哪怕你的板子根本沒有那個(gè)硬件二是內(nèi)存溢出SPL階段RAM只有幾十KB全選驅(qū)動(dòng)會(huì)讓SPL鏡像超過限制。正確做法是“按需啟用逐層驗(yàn)證”。以CH32V305為例它的核心外設(shè)是GPIO、UART、SPI Flash。我們按依賴鏈逐個(gè)啟用基礎(chǔ)架構(gòu)層在Architecture selection菜單下確認(rèn)RISC-V被選中CONFIG_RISCVySOC支持層在System type→WCH CH32V305 SoC support選中CONFIG_CH32V305y設(shè)備模型層在Device Drivers→Driver Model必須啟用CONFIG_DMy、CONFIG_OF_CONTROLy、CONFIG_OF_LIBFDTyGPIO驅(qū)動(dòng)層在Device Drivers→GPIO Support啟用CONFIG_DM_GPIOyUART驅(qū)動(dòng)層在Device Drivers→Serial drivers啟用CONFIG_SYS_NS16550yCH32V305兼容NS16550 UARTSPI Flash層在Device Drivers→SPI Support啟用CONFIG_DM_SPIy、CONFIG_SPI_FLASHy再進(jìn)入SPI Flash support子菜單選中CONFIG_SPI_FLASH_WINBONDy假設(shè)你用的是Winbond Flash。每啟用一層就執(zhí)行一次make clean make ch32v305_evb_defconfig make -j4驗(yàn)證是否能成功編譯。如果報(bào)錯(cuò)立刻回退上一步檢查依賴是否缺失。比如啟用CONFIG_SPI_FLASHy時(shí)報(bào)undefined reference to spi_flash_probe說明CONFIG_DM_SPIy沒開如果報(bào)fatal error: fdt.h: No such file or directory說明CONFIG_OF_LIBFDTy沒開。這種“小步快跑”的方式比一次性全選再調(diào)試高效十倍。3.4 第四步定制SPL配置解決“啟動(dòng)卡死”問題SPLSecondary Program Loader是U-Boot啟動(dòng)的第一階段它必須在ROM或片上SRAM里運(yùn)行空間極其有限通常64KB。很多移植失敗根源在于SPL的Kconfig沒配對(duì)。SPL有自己的Kconfig樹在spl/Kconfig中定義。要為你的板子啟用SPL必須在board/wch/ch32v305_evb/Kconfig中添加config SPL bool Enable SPL depends on TARGET_CH32V305_EVB select SPL_LIBCOMMON_SUPPORT select SPL_LIBGENERIC_SUPPORT select SPL_SERIAL_SUPPORT select SPL_GPIO_SUPPORT help Enable Secondary Program Loader for this board.然后在configs/ch32v305_evb_defconfig中添加CONFIG_SPLy。但光這樣不夠SPL的驅(qū)動(dòng)必須極度精簡(jiǎn)。例如SPL階段不需要完整的命令行所以CONFIG_SPL_CMD_*系列選項(xiàng)要全部關(guān)閉SPL也不需要文件系統(tǒng)所以CONFIG_SPL_FS_*全關(guān)。最關(guān)鍵的是SPL的RAM初始化。CH32V305的SPL必須在arch/riscv/cpu/ch32v305/spl.c中實(shí)現(xiàn)spl_start_uboot()函數(shù)而這個(gè)函數(shù)的調(diào)用依賴CONFIG_SPL_DRIVERS_MISC_SUPPORTy。如果你沒開這個(gè)SPL會(huì)編譯成功但運(yùn)行到一半就跳飛因?yàn)閟pl.c里調(diào)用的board_init_f()函數(shù)找不到符號(hào)。實(shí)測(cè)經(jīng)驗(yàn)SPL配置的黃金法則是“只留啟動(dòng)必需項(xiàng)”。對(duì)于CH32V305SPL最小配置集是CONFIG_SPLy、CONFIG_SPL_SERIAL_SUPPORTy、CONFIG_SPL_GPIO_SUPPORTy、CONFIG_SPL_DRIVERS_MISC_SUPPORTy、CONFIG_SPL_NOR_SUPPORTy如果從Nor Flash啟動(dòng)。其他所有選項(xiàng)一律設(shè)為n。你可以用grep -r SPL_ arch/riscv/來查找所有SPL相關(guān)配置確保沒有遺漏關(guān)鍵依賴。3.5 第五步交叉驗(yàn)證與配置導(dǎo)出建立可復(fù)現(xiàn)的配置基線完成上述步驟后你的configs/ch32v305_evb_defconfig應(yīng)該有80~120行配置。但這還不是終點(diǎn)必須進(jìn)行交叉驗(yàn)證。第一步執(zhí)行make ch32v305_evb_defconfig make savedefconfig。savedefconfig是U-Boot的神器它會(huì)掃描當(dāng)前所有Kconfig選項(xiàng)生成一個(gè)最小化的defconfig文件名為defconfig在當(dāng)前目錄只包含真正被啟用的配置剔除所有默認(rèn)值。對(duì)比configs/ch32v305_evb_defconfig和這個(gè)新defconfig如果行數(shù)差異很大比如原文件120行新文件只有60行說明你啟用了大量默認(rèn)開啟的選項(xiàng)可以安全刪減。第二步用make menuconfig打開配置界面按Z鍵Show all symbols查看所有配置項(xiàng)的狀態(tài)。重點(diǎn)關(guān)注標(biāo)紅的項(xiàng)表示未滿足依賴逐一解決。第三步導(dǎo)出配置快照make ch32v305_evb_defconfig make print_config configs/ch32v305_evb_config.log。這個(gè)log文件會(huì)打印出所有CONFIG_XXX的最終值包括隱式啟用的依賴項(xiàng)是后續(xù)排查問題的黃金依據(jù)。最后把configs/ch32v305_evb_defconfig、board/wch/ch32v305_evb/Kconfig、arch/riscv/Kconfig的修改一起提交到Git倉(cāng)庫(kù)。這樣任何團(tuán)隊(duì)成員拉取代碼后只需make ch32v305_evb_defconfig make就能得到完全一致的構(gòu)建結(jié)果。我見過太多項(xiàng)目因?yàn)橐粋€(gè)人手改defconfig另一個(gè)人用menuconfig重配導(dǎo)致構(gòu)建行為不一致最終在量產(chǎn)時(shí)才發(fā)現(xiàn)SPL大小超限——這種問題一套規(guī)范的配置基線就能杜絕。4. 常見Kconfig問題排查與獨(dú)家避坑指南4.1 問題速查表編譯報(bào)錯(cuò)與Kconfig配置的映射關(guān)系編譯錯(cuò)誤現(xiàn)象最可能的Kconfig原因排查與解決步驟error: struct udevice undeclaredCONFIG_DMn或CONFIG_OF_CONTROLn進(jìn)入make menuconfig檢查Device Drivers→Driver Model→Enable Driver Model和Enable OF Control是否為*若已啟用執(zhí)行make clean make olddefconfig強(qiáng)制刷新autoconf.hundefined reference to dm_i2c_bus_initCONFIG_DM_I2Cn或CONFIG_I2Cy但未啟用設(shè)備模型版本在Device Drivers→I2C Support中必須啟用CONFIG_DM_I2Cy而非舊版CONFIG_I2Cy舊版I2C驅(qū)動(dòng)已被棄用僅用于遺留板子fatal error: asm/arch/gpio.h: No such file or directoryCONFIG_ARCH_CH32V305n或CONFIG_CH32V305n檢查System type菜單下WCH CH32V305 SoC support是否選中同時(shí)確認(rèn)arch/riscv/cpu/ch32v305/Kconfig文件存在且被正確sourceSPL size exceeds limit (0x10000 bytes)啟用了過多SPL驅(qū)動(dòng)如CONFIG_SPL_FS_EXT4y、CONFIG_SPL_NETy執(zhí)行make menuconfig進(jìn)入SPL Build Options關(guān)閉所有非必需的SPL_*選項(xiàng)使用make spl/ch32v305_evb-spl.bin ls -l spl/ch32v305_evb-spl.bin實(shí)時(shí)監(jiān)控SPL大小精簡(jiǎn)原則SPL只保留SERIAL、GPIO、NOR或SD三項(xiàng)CONFIG_CMD_USB not found in menuconfigCONFIG_USBn或CONFIG_DM_USBn未啟用導(dǎo)致依賴鏈斷裂按/搜索USB先找到USB Support并啟用CONFIG_USBy再找DM USB Support啟用CONFIG_DM_USBy最后USB Commands里的CONFIG_CMD_USBy才會(huì)出現(xiàn)順序不能顛倒這個(gè)表格是我從二十多個(gè)項(xiàng)目中總結(jié)的高頻問題。特別提醒U-Boot的錯(cuò)誤提示往往具有誤導(dǎo)性。比如struct udevice undeclared表面看是數(shù)據(jù)結(jié)構(gòu)沒定義實(shí)際是CONFIG_DM沒開導(dǎo)致include/dm/device.h沒被包含。所以遇到編譯錯(cuò)誤第一反應(yīng)不應(yīng)該是查代碼而是查Kconfig依賴。4.2 那些官方文檔絕不會(huì)寫的“配置陷阱”陷阱一CONFIG_SYS_TEXT_BASE與Kconfig的隱式?jīng)_突CONFIG_SYS_TEXT_BASEU-Boot主鏡像的加載地址在U-Boot中是個(gè)特殊存在——它既可以在defconfig里定義CONFIG_SYS_TEXT_BASE0x80000000也可以在板級(jí)頭文件include/configs/ch32v305_evb.h里定義。但兩者不能共存如果defconfig里定義了include/configs/里的定義會(huì)被忽略反之亦然。更危險(xiǎn)的是CONFIG_SYS_TEXT_BASE的值必須與鏈接腳本arch/riscv/cpu/ch32v305/u-boot.lds中的SECTIONS段起始地址嚴(yán)格一致。我曾在一個(gè)CH32V305項(xiàng)目中defconfig里寫0x80000000而u-boot.lds里是0x80100000結(jié)果U-Boot能編譯但啟動(dòng)后串口無輸出因?yàn)榇a被加載到了錯(cuò)誤的內(nèi)存區(qū)域。解決方案統(tǒng)一在defconfig里定義并用grep -r TEXT_BASE arch/riscv/確認(rèn)所有鏈接腳本都引用了這個(gè)宏。陷阱二CONFIG_OF_SEPARATE的“假分離”幻覺很多教程說啟用CONFIG_OF_SEPARATEy可以把設(shè)備樹編譯進(jìn)U-Boot鏡像避免外部.dtb文件。但實(shí)際測(cè)試發(fā)現(xiàn)CH32V305平臺(tái)啟用此選項(xiàng)后U-Boot啟動(dòng)時(shí)會(huì)卡在Starting kernel ...因?yàn)樵O(shè)備樹被放到了錯(cuò)誤的內(nèi)存位置。根本原因是CONFIG_OF_SEPARATE依賴CONFIG_SYS_FDT_PAD的精確計(jì)算。CONFIG_SYS_FDT_PAD不是隨便填的它必須大于設(shè)備樹二進(jìn)制文件的實(shí)際大小。正確做法先用dtc -I dts -O dtb -o myboard.dtb board/wch/ch32v305_evb/myboard.dts編譯出dtb再用ls -l myboard.dtb查看大小比如0x2A30字節(jié)然后在defconfig里設(shè)置CONFIG_SYS_FDT_PAD0x3000向上取整到4KB對(duì)齊。否則U-Boot的fit_image_load()函數(shù)會(huì)因內(nèi)存越界而崩潰。陷阱三CONFIG_SPL_LOAD_FIT的“雙重加載”風(fēng)險(xiǎn)當(dāng)使用FITFlattened Image Tree格式打包SPLU-Boot時(shí)CONFIG_SPL_LOAD_FITy必須與CONFIG_SPL_FIT_GENERATORboard/wch/ch32v305_evb/mkimage_fit.sh配合。但mkimage_fit.sh腳本里如果寫死了-b board/wch/ch32v305_evb/ch32v305_evb.dtb而你的設(shè)備樹文件名是ch32v305_evb_v1.dtbSPL會(huì)靜默失敗沒有任何錯(cuò)誤提示只是不加載U-Boot。這是因?yàn)镕IT生成器在scripts/Makefile.spl中調(diào)用$(SPL_FIT_GENERATOR)時(shí)不校驗(yàn)?zāi)_本返回值。解決方案在mkimage_fit.sh末尾添加exit $?并用bash -x mkimage_fit.sh手動(dòng)執(zhí)行腳本觀察輸出。4.3 實(shí)操心得提升Kconfig效率的三個(gè)硬核技巧技巧一用grep構(gòu)建個(gè)人Kconfig知識(shí)圖譜U-Boot的Kconfig文件分散在幾十個(gè)目錄靠記憶不可能。我的做法是建立一個(gè)kconfig_index.sh腳本#!/bin/bash grep -r config.*CONFIG_ arch/ drivers/ common/ --includeKconfig | \ awk -F : {print $1 : $2} | \ sort | \ uniq kconfig_index.txt運(yùn)行后kconfig_index.txt里會(huì)列出所有CONFIG_XXX的定義位置比如drivers/usb/Kconfig:config CONFIG_USB。下次遇到不認(rèn)識(shí)的配置grep CONFIG_USB kconfig_index.txt秒出答案。這個(gè)索引文件我隨身帶著比翻文檔快十倍。技巧二make menuconfig的“快捷導(dǎo)航術(shù)”make menuconfig默認(rèn)是樹狀菜單但按/搜索后按n可以跳到下一個(gè)匹配項(xiàng)按p跳到上一個(gè)。更厲害的是按L大寫L可以列出所有已啟用的配置項(xiàng)按N列出所有未啟用的。我在調(diào)試SPL時(shí)常用L鍵快速確認(rèn)CONFIG_SPL_SERIAL_SUPPORT是否真的生效而不是只看菜單里的勾選狀態(tài)。技巧三defconfig的“版本化備份策略”每次成功編譯后我都會(huì)執(zhí)行make ch32v305_evb_defconfig make savedefconfig mv defconfig configs/ch32v305_evb_defconfig_v$(git rev-parse --short HEAD)這樣每個(gè)Git commit都對(duì)應(yīng)一個(gè)精確的defconfig快照。當(dāng)某天發(fā)現(xiàn)新代碼導(dǎo)致啟動(dòng)失敗git bisect定位到問題commit后立刻切回對(duì)應(yīng)的defconfig_vxxx就能確認(rèn)是代碼問題還是配置問題。這個(gè)習(xí)慣讓我在最近一個(gè)CH32V305項(xiàng)目中把平均排錯(cuò)時(shí)間從3小時(shí)縮短到20分鐘。5. Kconfig配置的進(jìn)階應(yīng)用裁剪、調(diào)試與自動(dòng)化5.1 精準(zhǔn)裁剪U-Boot尺寸從2MB到384KB的實(shí)戰(zhàn)路徑U-Boot主鏡像尺寸是資源受限場(chǎng)景如MCU Bootloader的生命線。CH32V305的Flash空間通常只有2MB而默認(rèn)配置的U-Boot可能占掉1.5MB。裁剪不是簡(jiǎn)單地關(guān)掉命令而是一套系統(tǒng)工程。第一步用make menuconfig進(jìn)入Command line interface菜單關(guān)閉所有非必需命令CONFIG_CMD_BDIn內(nèi)存查看、CONFIG_CMD_IMLSnFlash信息、CONFIG_CMD_RUNn執(zhí)行腳本等。但最關(guān)鍵的裁剪點(diǎn)在Device Drivers→Network support這里關(guān)閉CONFIG_CMD_NETy、CONFIG_CMD_DHCPy、CONFIG_CMD_PINGy能直接減少300KB。第二步禁用所有文件系統(tǒng)CONFIG_CMD_EXT4n、CONFIG_CMD_FATn、CONFIG_CMD_FS_GENERICn。第三步也是最有效的是關(guān)閉CONFIG_LOGy日志框架和CONFIG_CONSOLE_RECORDn控制臺(tái)記錄這兩項(xiàng)在調(diào)試期很有用但量產(chǎn)時(shí)完全不需要能省下200KB。裁剪后用size u-boot命令查看各段大小.text代碼段、.data已初始化數(shù)據(jù)、.bss未初始化數(shù)據(jù)。我的目標(biāo)是.text 300KB。實(shí)測(cè)CH32V305 EVB板在只保留UART、GPIO、SPI Flash、MMCSD卡和基本命令help、version、reset的情況下U-Boot主鏡像穩(wěn)定在384KB。裁剪不是目的而是為了給應(yīng)用固件騰出空間——這才是嵌入式工程師的終極價(jià)值。5.2 Kconfig驅(qū)動(dòng)調(diào)試用CONFIG_DEBUG_*點(diǎn)亮黑盒當(dāng)U-Boot啟動(dòng)卡在某個(gè)驅(qū)動(dòng)初始化時(shí)Kconfig提供了強(qiáng)大的調(diào)試開關(guān)。在make menuconfig的Kernel hacking菜單下有CONFIG_DEBUG_DRIVERy、CONFIG_DEBUG_DEVRESy等選項(xiàng)。啟用CONFIG_DEBUG_DRIVERy后所有驅(qū)動(dòng)的probe()函數(shù)執(zhí)行前后都會(huì)打印driver: xxx: probe start和driver: xxx: probe done日志。這對(duì)于定位“驅(qū)動(dòng)沒加載”還是“驅(qū)動(dòng)加載失敗”至關(guān)重要。比如CH32V305的SPI Flash驅(qū)動(dòng)如果卡在spi_flash_probe()啟用調(diào)試后能看到是spi_claim_bus()失敗進(jìn)而發(fā)現(xiàn)是SPI引腳的GPIO配置沒生效——這又回到Kconfig需要檢查CONFIG_DM_GPIOy和CONFIG_PINCTRLy是否都開了。另一個(gè)神器是CONFIG_CMD_BOOTSTAGEy它會(huì)記錄U-Boot啟動(dòng)每個(gè)階段的時(shí)間戳生成bootstage_report命令輸出類似0.000000: 0: reset、0.000123: 1: board_init_f的詳細(xì)時(shí)序。結(jié)合CONFIG_BOOTSTAGE_USER_COUNT10你可以自定義10個(gè)關(guān)鍵點(diǎn)比如在board_init_f末尾加bootstage_mark_name(BOOTSTAGE_ID_ACCUM, my_gpio_init)就能精確知道GPIO初始化花了多少毫秒。這些調(diào)試配置只應(yīng)在開發(fā)階段啟用量產(chǎn)時(shí)務(wù)必關(guān)閉否則會(huì)拖慢啟動(dòng)速度。5.3 自動(dòng)化Kconfig管理用Python腳本批量驗(yàn)證配置一致性大型項(xiàng)目往往有多個(gè)板子共享同一套Kconfig邏輯。手動(dòng)維護(hù)容易出錯(cuò)。我寫了一個(gè)validate_kconfig.py腳本它能自動(dòng)檢查三件事第一所有configs/*.defconfig文件中CONFIG_TARGET_XXXy的板子是否都在arch/*/Kconfig中有對(duì)應(yīng)的source第二檢查board/*/Kconfig中定義的config TARGET_XXX是否在configs/目錄下有同名defconfig第三掃描所有CONFIG_XXXy的配置檢查其依賴是否都被滿足。腳本核心邏輯是解析Kconfig語(yǔ)法構(gòu)建依賴圖。運(yùn)行python validate_kconfig.py它會(huì)輸出類似ERROR: board/wch/ch32v305_evb/Kconfig defines TARGET_CH32V305_EVB but configs/ch32v305_evb_defconfig is missing的提示。這個(gè)腳本集成在CI流程中每次Git push都會(huì)自動(dòng)運(yùn)行把Kconfig配置錯(cuò)誤擋在編譯之前。技術(shù)細(xì)節(jié)上它用pyparsing庫(kù)解析Kconfig文件用networkx庫(kù)構(gòu)建依賴圖用difflib比較配置差異。腳本開源在我的GitHub上但核心思想很簡(jiǎn)單Kconfig是代碼就應(yīng)該像代碼一樣被測(cè)試、被版本化、被自動(dòng)化。我在實(shí)際操作中發(fā)現(xiàn)Kconfig配置的穩(wěn)定性直接決定了整個(gè)移植項(xiàng)目的交付節(jié)奏。一個(gè)配置清晰、依賴明確的defconfig能讓新人在2小時(shí)內(nèi)跑通第一個(gè)Hello World而一個(gè)混亂的配置則會(huì)讓團(tuán)隊(duì)在編譯錯(cuò)誤里掙扎一周。所以別把Kconfig當(dāng)成一個(gè)可有可無的菜單把它當(dāng)作U-Boot的“數(shù)字孿生”——你對(duì)硬件的理解有多深Kconfig的配置就有多準(zhǔn)。最后再分享一個(gè)小技巧每次修改Kconfig后不要急著編譯先執(zhí)行make listallnoconfig它會(huì)生成一個(gè)包含所有CONFIG_XXXn的列表掃一眼有沒有誤關(guān)的關(guān)鍵項(xiàng)比如CONFIG_SYS_DCACHE_OFFn關(guān)閉數(shù)據(jù)緩存這種致命配置。這個(gè)習(xí)慣幫我避開了三次差點(diǎn)燒毀開發(fā)板的事故。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
无码一区二区三区四区五区六区七区八区九区十区视频 | 无码视频一区二区| 国产免a费看黄片在线| 亚洲涩涩| 91人人看| 欧美日韩99| 午夜啪| 九九精品美女高溯喷水| 思思热免费视频观看| 97 色综合| 性色乱AV一区二区| 日本久久网| 日本三级一区二区 在线| 女人香蕉久久毛毛片精品| 亚洲精品97在线| 在线a v| 久久啊啊啊| 国产丰满熟夫69mpp| 一区二区三区精品视频| 国产一级高跟丝袜| 黄色成人网久久久久久| 色欧美在线| 国产精品乱码久久久久久久久| 玖玖爱综合| 2024人人操人人摸| 亚洲女毛多水多21P| 欧美综合天天| 97神马久久| 人人妻天天做天天爽| 久久欧美1卡2卡3| 午夜丁香| 色婷婷影院| 亚洲精美粉嫩嫩泬在线观看| 欧美色涩| 青娱乐福利99| 亚州伊人色综台| 国产亚洲欧美每日在线| 亚洲中文字幕熟女少妇一区二区| 东京太热男人的天堂久久久| 东京热,男人的天堂| 怡春苑东京热| 97伪v| 玖玖综合色| oumeisetu综合| 亚洲天堂男人在线| 欧美亚性天堂| 日韩人妻资源网| 日本99久久| 久久久久国产精品喷潮免费观看臀 | av天堂天堂av日韩| 成人亚欧免费视频| 性91| 欧美综合亚洲综合| 久久色精品视频在线| 天天综合中文字幕 91| 黄站在线免费观看| 久艹免费| 精品无码久久久久久久杏吧| 370p日韩欧美亚洲精品| 久久精品国产亚洲AV嘿嘿| 盗摄女人妻在线| 亚洲A曰本VA欧美VA视频| 日韩亚洲欧美中文字幕| 综合色99| 日韩素人无码一区二区三区三州| 99这里有精品| 日本不卡一区二区三区| 国模久久在线| 搡老熟女国产1000部| 夜夜春夜夜操| 伦理第一页| 日本一级特级毛片视频| 国产操逼视频在线观看| 美中日韩无码| 91丝袜美女| 老熟女熟妇| 九九自拍伦理| 射综合网| 在线播放免费av福利片| 五月婷婷大香蕉| 亚洲s在线观看| 加勒比五月天| 午夜爽爽爽| 日韩欧美成人综合在线| 色婷婷激情| 久久五月视频| 9久精品视频在线观看| 伊人精品国产| 人人操人人爽人人操人人| 黄色视频60分钟| 日本三级网页| 嫩草影院永久在线制服丝袜| 人妻精品一区二区| 日韩欧美成人午夜福利| 亚洲 欧美都市激情| 亚洲天堂另类美腿| 亚洲国产97| 久久精品国产亚洲AV无码电影| 伊人AAA| 青青青操| 欧美亚洲小说| 欧美日韩成人在线| 97精品视频在线| 操逼操2| 高清无码国产亚洲| 黄色一区三区| 四虎国产精品永久在线囯在线| 太久视频| 天天天天天天天天综合| 欧美日韩1234| 久操电影网| 91视频女生| 99精品久久久久久久婷婷蜜桃| 欧美婷婷五月天| 嗯啊抽插大香蕉网页| 很很干很很操| 成人国产视频在线观看| 婷婷精品| 精品久操| 精品一区二区成人动漫| 蜜桃视频一区二区三区| 国产精品ww久久| 五月丁香婷婷综合| 亚洲素人综合| 国产版a级片直播在线| 国产视频小说| 97人妻免费中文字幕| 国内91熟女人妻丝袜天天精品视频在线| 97公开久久| 美女诱惑久久| 无码一区二区三区四区五区六区七区八区九区十区视频 | 我要色综合网| 五月激情综合网| 亚洲s色图| 一区二区三区四区免费视频| 亚洲国产亚洲天堂| 性开放中文AV高清无码免费看| 天天综合网久久ww| 国产日逼视频| 性欧美精| 全球成人中文在线| 日韩欧视频| 色综合色色| 97久久超碰日韩精品| 亚洲强奸乱伦影视网| 青青草久草AV| 五月丁香在线| 水多多映视AV| 午夜欧美神马久久久久| 国产自偷自拍一区| 亚洲丝袜二区在线| 天天综合有色网| 操人人| 国产成人主播| 99热日本| 91久久免费视频互動交流| 密臀在线免费观看| 久久久久国产一区二| 伊人午夜福利视频| 成人在线日韩| 日韩乱伦AⅤ| 日韩图区| 淫淫总合网| 国产无码成人无码| 性交一区二区在线播放| 婷婷九月| 嗯啊视频免费在线观看| 亚洲国产福利视频| 国产人伦精品一区二区三区| 国产精品无码av在线 | 欧美一级久久久久久久大片动画| 青青草这里只有精品| 99热这里| 国产精品欧美日韩久久| 2017av无码免费无线播| 欧美综合 站| 天堂8在线新版官网| 激情小说在线视频| 99丝袜福利在线播放| 天天看少妇| 在线有码中文字幕| 果冻传媒A片麻豆熟妇人妻| 丁香五月成人| 亚洲成人久久一区二区| 天天亚洲| 欧美日韩人妻婷婷一区| 欧美日韩亚洲电影| 久久久com| 蜜臀视频网站| 欧美色97| 亚拍在线| 久久久久96| 欧美狠狠操| 日韩精品一区的| 少妇啪啪自拍| 91成人18| 国产九九九九九九| 国产熟女二区| 91 国产丝袜在线放观看| 亚洲综合色婷婷| 性色生活片久久毛片婬片免费放女人一级毛片 | AV天堂电影网| 九九九九九九九精品视频| 国精综合一二三区影视| 95人妻爽爽人人做人人澡| 亚洲密乳AV| 婷婷久久五月综合激情| 97国产精品一区| 欧美精品,四区。五区| 欧美色图片91| 九九九久久久久| 亚洲精品丝袜| 日本青青草在线| 德国一二三不卡| 久久免费精彩视频| 天综合网| 亚洲狼狼干综合1| 久久久久久久久久久久欧美日| 夜夜夜夜久久久久| 亚洲色欧美| 成人性交免费视屏| 亚洲高潮影院| 亚洲熟女av中文字幕| 蜜桃臀av一区二区| 另类图片综合| 69天堂| 91五十路| 操逼不卡中文字幕| 日韩一性一交一A片俄罗斯| 三男一女不戴套的A片| 午夜精品久久久久久久久久久久久| 熟妇国产免费一区| 夜夜嗨免费视频| 天美一区在线| 少妇大屁屁| 伊色久人大在线| 大鸡巴久久| 91国产大片| 97在线无精品 | 精品9999| 日本一二三免费久久| 超碰在线97国产| 九九九九热只有精品| 伊人97色天使| 国产中文福利| 熟女少妇一区二区三区| 麻豆精品.欧美精品.日韩精品.| 国产91丝袜 在线播放| 美女t无毒不卡不卡| 亚洲第91页| 色老牛| 久热99999| 欧美日日人人天天| 亚洲色图图片| 成人自拍三级在线观看| 亚洲AV无码黄色强奸| 国产在线视视频有精品| 熟女人妻av在线资源,黄色的资源| 亚洲中文制服诱惑| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 亚洲天堂人妻一区二区| 久久大线蕉一区| 欧美最婬乱婬爆婬牲视频| 日日摸日日碰夜夜爽视频| 超碰在线91| 超碰97精品| 操国产逼| 国产伦乱91| 920日本午夜免费| 伊人成人情色综合| 91精品国| 国产精品99精品视频网站| 激情色图| 欧美性爱一级操| 1024香蕉视频| 狠色婷婷久久一区二区三区_| 欧美综合色,www| 无码 黑人一区二区三区| 国产CHASE男男GAYGA 毛多色婷婷| 日本熟妇一区二区三区| 国产情色第一第二页在线观看| 黄页av| 国产精品亚洲无码| 国产精品色哟哟| 精品无吗m| 亚洲视频1区| 国产伦精品一区二区三区在线观| 欧美人妻色| 五月天精品| 国产女人极品高潮毛片| 国产精品视频播放| 91福利网在线观看| 99热自拍| 欧美综合综合| 欧美丰满熟妇XXXX性ppX人交| 亚洲AV无码| 亚洲激情在线| 96AV精品| 亚洲欧美第一页| 欧美极度丰满熟妇hd| 久久久男人的天堂| 欧美操逼熟女| 色九九九综合| 搡老女人老妇女AAA一VU麻豆| 亚洲美女精品| 日本久久女同性恋视频| 69精品少妇一区二区三区蜜桃| 国产精品一区二区麻豆| 日本中文字幕在线视频 | 色五月天AV| 97超碰人人操人人操| 久久综合五月天| 久久精品国产97欧美精品亚洲| 国产又黄又爽又刺激久久久久久| 欧美综合加勒比在线| 欧美裸体美女日麻屄| 亚洲天堂99| 天天日天天干天天摸天天操| 变态乱伦伪娘灌肠一区二区| 97久久精品国产| 亚洲超碰97| 精品一区二区三区蜜桃臀赵总| 国产欧美第五页| 韩国女主播青草在线| 国产呦精品系列在线观看| 亚洲无码99| 亚洲第一视频 欧美风情 日韩| 亚洲AV无码乱码| 一本大道综合伊人精品热热| 精品亚洲国产成人av网站| 蜜臀久久久| 日本五十路熟女一区二区| 激情五月天校园春色网| 欧美视频中文字幕区| 97精品97久久| 天天干夜夜一操| 人妻熟女一区二区| 欧美日韩成人在线| 国产偷拍网站| 久久精品男人的天堂| 欧美麻豆成人同性GⅤ在线| 97jingpin| 久久99亚洲精品久久99果| 唯美清纯 妖精视频| 2020视频1区2区3区| 中国操逼无码| 97国产精选| 日本天天吊| 韩日色费| 97超色| 日本 成 人 小说 电影 一区二区| 曰韩人妻中文字幕在线 | 欧美特黄视频网站| 素人播放一区| 亚洲性爱无码乱伦av| 蜜臀中文无码午夜| 麻豆国产成人精品| 丝袜美腿诱惑亚洲欧美视频在线观看| 精品人妻免费观看| 久久69| 用力操死我| 久久99午夜精品一区人妻| 久久啊啊啊| 91草草草| 国产精品91一样| 亚一综合久久久久久久久久| 免费人成毛片乱码| 日本ZZ高免费A级视频| 91丝袜美女| 国产超碰| 日韩欧美国产高清视频| 国产狂喷潮在线精品| 亚洲色图欧美色图在线播放| 猛交交| 女人爽到高潮潮喷18禁网站| 人人玩人人添人人澡免费| 成人小电影网站tex| 天美传媒av一区二区| 日韩丝袜人妻AV| 久久99网站| 日本黄色大片一级视频免费麻豆| 96久久久久| 日本黄色天堂| 久久久成人精品| 色大师网站www永久网站视频| 色啪网| 亚洲一区二区性爱电影| 色爱三区| 国产人妻天天干精品| 美国黄片aaa| 怡红院成人视频| 91视频综合在线| 亚洲情色在线| 床上啊啊啊一区二区三区| 97欧美性爱| 久草国产在线视频| 丰满岳乱妇一区二区三区| 人妻性爱一区二区| 一本色道综合久久欧美| 国产精品探花色| 日韩欧无码一区二区三区免费不卡 | 丁香7月婷婷| 制服诱惑亚洲一区二区三区在线观看| 97se综合网| 国产精品午夜成人福利| 91+欧美| 亚洲 se图 欧美电影| 国产天天骚| 一区=区三区视频| 丝袜制服字幕在线| 中文字幕在线观看网页| 丝袜喷水在线| 中文字幕久久精品一区| 久久超碰av在线| 九久久精品| 欧美成人贴图| 亚洲97| 久久精品 六十路 熟女 欧美| 91爱| 亚洲一曲日韩精品| 亚洲熟女中文字幕在线| 日本福利社| 蜜臀精品1区2区| 91中文精品日韩欧美在线| 国产美女精品| 日韩欧美中文字亚洲慕| 色妺妺AⅤ| 欧美成人一级麻豆| 亚洲欧美国产中文视频| 黄片aaaaa一区| 日日夜夜狠狠| 成人精品视频| 97在线视频网站| 91免费看一区二区三区 | 久久久久久中文字幕中文字幕最新| 920日本午夜免费| 日韩影片中文字幕一区二区三区| 日韩人妻精品中文字幕| 亚洲AV永久无码精品成人调教| 草草草草视频| 粉嫩av在线一区二区| 啊啊啊不要好疼视频| 在线97在线| 蜜桃传媒视频第一区入口在线看| 国产强奸无码乱伦| 偷看洗澡一二三区美女| 欧美精品四区| 久久久久斤小| 韩国免费播放一级毛片| 免费中文在线| 男生女生啊啊啊啊| 欧成人精品H无码| 午夜亚洲国产理论秋霞| 亚洲精品男人的天堂| 久久草视频污视频| 国产白丝精品在线观看| 91色久| 精品一久久久| 少妇高潮一区二区三区在线| 大香蕉www.超碰| 国产在线76页| 四虎影视精品| 久久国产乱子伦精品免费女人| 91GD.COM| 欧美 亚洲| 十八禁视频一区二区| 亚洲欧洲国产综合av| 久久精品亚洲婷婷| 欧美日韩亚洲少妇寂寞影院正在播放| 亚洲欧洲综合成人av一区| 亚洲18禁| 九九热三级片| 天天日少妇逼AV| 日韩97视频| 一级日本牲交大片好爽在线看| Blackedraw视频一区二区| 成人网欧美风情| 精品999一区二区| 色丁香五月婷婷| 青娱乐福利99| www.激情| 亚洲日本天堂| 久操网址| 伊人久久亚洲色欲综合网站 | 60秒免费视频| 熟妇人妻丰满久久久久久久无码| 熟女人妻一区二区三区| 97伦乱| 日日操丁香五月天| 日日骚精品视频| 精品毛片av一区二区| 日韩av熟女一区二区三区成人| 亚州综合色| av天堂影视中文在字幕在线中文| 精品无av| 夜夜爽77777| 天天综合~91| 九一综合精品视品av| 久久久天堂| 日日日日日| 97在线观看免费视频| 鲁鲁色综合网| 亚洲欧洲自拍图片专区满春格| 亚洲精品天天影视综合网 | 色黄色美女大长腿午夜视频| 亚洲999综合| 全球成人中文在线| 91伊人| 超碰性爱97| www.99中文字幕| 97精品视频在线播放| 91GD.COM| 日本黄大片在线观看视频| 国产熟女| 日本久久精品| 国产一级舔足在线观看| 欧美大战久久久伊人| 成人性爱电影一区二区| 久久久久久久性爱| 国产熟女| 噜噜噜狠狠色综合| 狠狠色伊人亚洲综合网站色| 97干综合网| 亚洲男人bt天堂| 夜夜草天天| 中出人妻中文字幕91在线| 精精夜夜| 久久肏大逼| 亚洲高清自拍| 大香蕉99热| 婷婷五月天色色| 国产精品一区二区亚洲人成毛片 | 精品国产一区二区三区在线播出| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 夜夜骑操视频| 午夜精品久久久久久久男人的天堂 | 日本伦乱九九九综合| 日韩精品作爱导航| 蜜臀久久99精品久久久久久久久| 中文字幕在线观看永久| 99re在线| 夜夜精品视频一区二区| 美女诱惑在线一区| 亚洲夜色在线| 日韩成人电影AV| 精品人妻1区| 久久99九九九九6666免费观看软件| 日日A∨| 亚洲影视综合网| 人人做天天爱| 97天堂| 日韩无码人妻中字久久三区四区| 青青草大香蕉在线视频| 国产青一二三| 91无码中出人妻视频| 男女激情黄色网址| 秋霞成人做爱| 家庭乱伦国产精品| 嗯嗯啊啊操我| 神马麻豆福利院| 欧美成人色| 色女99一级片在线观看| 97超碰碰碰| 久热大香蕉| 亚洲成人一区二区精品| 蜜乳AV一区| 岛国激情视频在线观看| 国产精品一区二区亚洲人成毛片 | 婷婷综合网| 热99这里只有精品| 无码人妻丰满热妇又大又粗| 97色伦97色伦国产欧美| 九九九精品| 97欧美超碰| 东京热大香蕉| 91色拍| …亚洲黄色厕厕女女在线播…| 蜜汁欧美| 色五月AV在线| 欧美桃色网| 夜夜骑日日| 超碰色大香蕉| 一区二区三区一亚洲中文字幕、综合区灬 | 欧美日韩国产三级黄色| 国产 日韩 欧美高清| 中文字幕一区二区三区四区在线视频| 亚洲欧美日韩制服另类| 成人自拍三级在线观看| 日韩中文字幕国产| 久久黄片国产一区二区| 另类小说综合网| www.黄色在线| 亚洲超碰在线| 久久极品一区二区| 激情图片亚洲色图| 久热大香蕉网站| 久噜噜| 婷婷久久久精品| 中文字幕一区二区三区人妻不卡 | 日日爱99| 激情 欧美 亚洲 小说| 亚洲蜜乳av| 日韩一级片在线看| 啊啊啊啊啊在线观看网址| 怡红院怡春院| 久久久久久裸体| 俞拍久久国应视频| 日韩免费高清大片在线| 欧美精品久久久久久久久88| 欧亚综合一卡二卡中文字幕| 欧美性爱97超碰| 91AV天堂| 久久久人妻| 色噜噜精品一区二区三| 亚洲最新中文字幕免费| 91日日夜夜| 亚洲 欧美 另类 日韩 人妻一区| 久操影视| 亚洲熟女综合一区二区| 亚洲无码成人精品| 久久久免费一级黄片| 男人的天堂啪啪啪啪啪蜜桃不卡| 射丝袜高跟鞋99| 久久99深爱久久99精品| 天天日天天干少妇日| 人人看人人插| 婷婷亚洲综合| 欧洲精品久久| 九九九久久久| 爽 好舒服 无码刺激久久| 宅男91视频在线播放| 男女性扦B| 亚州熟女乱伦| 国产毛片精品一区二区色欲黄A片| 久极品在线观看| 男人天堂毛片| 亚洲精品无码成人久久久99| 久久最新免费视频23| 性色高清..……| 国产午夜福利专区综合| 伊人激情| 有码免费观看| 少妇熟女一区二区三区| 久久精品国产亚洲AV无码电影| 欧美日韩性爱视屏免费看了| 玖玖爱一区在线| 91情色| 久久久18| 午夜噜噜噜| 久久一级无码精品毛片6| 欧美在线啊啊啊 | 骚鸭AV| 最新岛国大片| 99热这里只有精| 亚洲玖玖爱| 欧日a| 日本高清熟女久久一区| 91精品久久久| 青青草在线视频欧美| 九九九热| 欧美亚洲性爱一区二区| 久久精品一区二区| 97超碰碰碰| 欧美色乱| 水澄无码AV| 大香蕉伊人75| 久久乐| 狠日欧美| 日韩精品一区二区日韩| 在线观看视频91| 亚洲无码国产精品久久| 六月丁操逼| 蜜乳Av成人片网站| 亚洲日韩av一区二区三区百合| 蜜臀久久99精品久久久久久-DVD原版全| 亚洲色五月| 亚洲国产97| 超碰在线974| 97欧美超碰| 蜜桃久久久久久久| 日韩中文字幕国产| 亚洲中文字幕精品久久久久久直播| 一级岛国大片| 成人 日本A片无码8888| 人妻少妇久久| 欧美色五月| 国产精品美女久久久久久网站| av婷婷色网| 一级特黄aaa大片在线观看成人一级片在线观看 | 综合五月婷婷亚洲一区| 久久精品中文字幕女同| 婷婷五月综合激情| 人妻9117c| 亚洲国产中文字幕| 久久精品国产精品亚洲艾通辽熟妇 | 九九九九九九九九九五码| 淫荡少妇免费| 久区视频| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 狠狠爱夜夜| 久久久久久久久九九久孕交| 欧美人妻久久精品二区三区| 91热| 欧美白嫩在线放| 黄色小视频日本txt| 啊啊啊啊免费视频| 一区,二区,三区网站| 国产精品久久久久久久毛片1| 国产在线激情| 综合天天网| 大香蕉97久久| av网页一区二区三区| 97在线免费看视频| 婷婷15月天青娱乐| 欧洲无码一区二区| 五月综合婷婷久久网站| 26uuu最新| 色婷婷日韩精品一区二区三区| 日韩紧密久久| 久9视频| 亚洲欧洲激情卡通另类文学四射小说网站 | 亚洲有薄码区日本系列中文字幕| 一级黄色视频网| 99在线精品视频| 嗯,啊。舔我逼| 久久久工口| 亚洲成人福利电影免费| 国产一区二区成人av在线播放| 久久蜜桃一区二区| 亚洲十八禁止| 青青草精品| 国产精品成人在线| 乱伦Av网| 激情 欧美 亚洲 小说| 欧美成人精品一区| 加勒比久久av| 午夜福利区| 91原创在线观看| 国产农村一一级特黄毛片| 日韩欧美成人综合在线| 毛片久久| 欧美色狠| 亚洲人天堂| 亚洲欧美碰碰| 色约约一区=区三区| 精品久久艹| 狠色婷婷久久一区二区三区_| 人妻精品综合中文字幕在线 | 男人的天堂在线2| 五月激情天| 成年女人18级毛片毛片免费观看| 操迟操逼在巾线Fre看| 日本性爱欧美性爱| 久热在线精品免费观看| 夜夜操美女| 欧美裸体美女日麻屄| 久久精品店| 91欧美综合| 999色欧美中文字幕| 五十路熟女在线不卡观看一区二区| 天天激色| 少妇精品久久久八区九区| 欧美日韩亚洲天堂网| 91l欧美在线| 超碰538| 97超碰色中文字幕| 欧洲站一级二级三级h| 91男人综合| 天躁夜夜躁2021| 日本最新1区2区3区| 亚洲色图第一页| 欧美 日韩 另类 亚洲| 国内操逼视频二区| 日韩欧亚中文在线| 九九九久| 亚洲欧美黄| 亚洲欧美国产中文视频| 国产日韩精品无码去免费专区国产| 亚欧毛片基地国产毛片基地| 亚洲国产精品99久久久| 秋霞成人一级在线观看| 国产极品一区二区三区三州| 日本三级中国三级99人妇网站| 日本性交操一区二区不卡系列| 蜜区区视频79 | 国产精品一区二区a| 欧美日韩*字幕一区| 黄色AAAAA欧美| 伊人久久艹| AV一二区| 任你干在线视频| 久久久啊啊啊| 家庭乱伦国产精品| 国产 丝袜 欧美中文 另类| 99这里有精品| 天天看片麻豆| 怡红院久久老司机| 麻豆亚洲AV成人无码久久精品| 人人搞人人插人人操| 国产一级操B视频| 亚洲日本成人动漫| 精品人妻一区二区三区视频| 成人区人妻精品一| 俺去啦俺来也久久综合| 99久久久无码国产精品性男| 欧美少妇熟女| 亚州熟妇精品| 欧美精品宗合| 国产精品自产拍在线观看社区| 亚洲国产精品久久久久久久久久| 歐美性天天| julia国产在线| 九九九九日本| 久久久久久人| 中字幕人妻一区二区三区| 亚洲高清国产理伦片| 丰满人妻一区二区三区免费,| 欧美暴力猛交| 亚洲色阁| 无码自拍SM| 欧美精品91| 风韵犹存大大大大香蕉 | 亚洲欧洲激情| 午夜乱轮操逼视频免费看| 99操| 夜夜免费视频| 成人av在线播放| 六月婷婷激情| 97久操| 久操网视频| 岛国AV一区二区电影| 校园春色美腿丝袜| 久久av一级av少妇av高潮| 欧美 亚洲 制服 精品| 久久熟女嫩草成人片免费 | 福利五区| 超碰97网站| 成功精品影院| 少妇的嫩逼图片| 人妻精品视频一区二区| 91久久久老司机| 自拍偷拍草一草| 一个人在线看的黄色电影网站| 久久精品国产亚洲av水密被窝| 日日狠狠久久偷偷色综合免费| 国产熟女高潮一区二区三区| 岛国网址国产 | 后入式五六区| 亚欧Av| 最新9久久久9免费视频| 一区二区三区 日韩欧美| 久久久久久久久国产| 国人欧美精品一区二区| 欧美小说区视频区| 亚洲操操操| 97爱| 亚州色图欧美| 国产家庭乱伦网址| 亚州色图欧美色图| 麻豆天美电影一区二区| 18禁止看精品中文字幕| 亚洲自拍一区夜夜操| 色成人Www精品永久观看| 激情婷婷黑人91| 丝袜六区| 18禁免费视频| 少妇高潮一区二区三区在线| 日韩精品区二区三区不卡| 亚洲无码偷拍| 色九九综合AV| 男人的天堂亚洲| 久久日韩精品一区二区| 伊人午夜福利视频| 色噜噜综合在线| A 在线网址| 亚州欧美在线| 骚逼一区二区| 97色婷婷| 国产野战露脸在线播放| 激情综合 婷婷五月 红杏| 宅男午夜在线视频| 另类一区| 色色毛片| 中文字幕第7页| 九九夜精品九九在线| 毛片电影一区二区三区| 日韩精品字幕| 男女啊啊啊| 欧美亚州综合图片| 综合婷婷| 综合操逼| 综合亚洲欧美精品日韩?v| 超碰偷拍| 熟女欧美日韩综合婷婷| 男人的天堂亚洲| 人人操人人叉人人插人人| 男人天堂2017| 天天日天天干天天摸天天操| 熟女天天干| 长长久久88视频| 殴美在线AⅤ| 亚欧无码线免费观看视频| 高颜值美女口爆高潮浪叫| 午夜欧美神马久久久久| 小泽玛利亚一二三| 精品国产乱码久久久久久口爆网站 | 色综合91好| 国产一| 综合 青草 伊久久 影院 综合 | 久久久青青草| 91劲爆| 欧美夜色| 亚洲高清视频在线观看| 久久午夜伦| 久久伊人五月天| 国产不卡免费在线视频| 人人妻碰人人免费| 天天澡天天爽日日AV| 天堂亚洲精品| 日韩 女同 综合| 日韩天天本| 男人的天堂色偷偷青青草视频婷婷网| 99色综合| 五月丁香网站| 久久五月天婷婷| 日韩国产中文字幕| 乱伦系列一区二区| 亚洲最新a在线观看| 国产精品一区二区校花| AⅤ片水多多| 欧美操人视频| 亚洲国产成人7777| 亚洲日韩人妻中文字幕一区| 欧美综合自拍| 五月丁香激情四射| 久久久久久97| 亚洲欧美人妻| 人人操人人色网| 91丝袜在线观看| 日本一区二区中文字幕久久| 天天92av| 国产精品视频内谢女人| 日本精品一级二级三级| 18禁看网站一区| 无码人妻精品一区二区三区99不卡 | ..日韩av毛片精品久久久| 97人人夜夜精品视频| 亚洲性爱电影| 久久精品国产亚洲AV高级北京| 日韩丰满熟妇| 色999五月色| 色五月婷婷网| 精品国产乱码久久久久久影片| 国产刺激视频| 日韩情色视频| 美女主播色欲91抠b在线播放| 啊啊啊不要啊啊受不了了视频在线| 美腿丝袜高跟网免费视频免费视频| 天美传媒Av在线| 黑人粗大V S日韩女优视频| 亚洲玖玖爱| 久久久久久久唑| 91色人妻| 亚洲超碰AV| 91一区二区| 欧美丝袜激情| 久久妇| 青青草好吊色| 精品一区二区三区麻豆| 91天射| 偷拍亚洲情色| 日日爱99| 台湾成人无码AV| 99操视频| 少妇与黑人高潮在线| 欧美在线 亚洲| JuliaAnnXXX888| 韩国三级一线观看久| 福利在线观看一区二区| 97资源制服丝袜| 天天舔天天日天天射| 大粗鳼巴久久久久| 国产精品久久久无码aV去| 亚洲二区精品在线观看| 久久理论字幕视频| 国产蜜臀在线| 欧美熟妇成人一区二区| 久久性爱免费送| 欧美内射少妇| 极品人妻少妇综合| 亚洲精品乱码线路中文字幕| 亚洲精品国产精品乱码不99| 亚洲s在线观看| 玖玖大干人妻| 欧美自拍偷拍综合图片| 久久久国产三级黄色片| 色五月天AV| 欧美AB在线| 日韩不卡毛片Av免费高清| 婷婷三区| 久区视频| 国产人妖视频一区在线观看| 奸色色 男人天堂 天天射| 欧美黑人168页欧美黑人167| 八戒午夜福利理论片| 人妻无码久久一区二区三区免费| 欧美天堂亚洲电影院一区在线播放| 欧美综合1性辶| av在线观看不卡网站| 亚洲精品黄码久久久久| 亚洲欧美国产va在线播放频| av资源在线播放天堂| 西西美女视频网| 91性色| 国产97色在线| 欧美日本不卡| 中国操逼无码| 欧美嗯啊……在线观看视频免费| 在线播放中文字幕| 久久夜黄色无码A级大片| 91+欧美| 亚洲人妻在线精品| 久久极品一区二区| 三及片网站| 色婷网| 少妇精品久久久八区九区| 亚洲一区二区久久久久| 久草色悠悠在线视频| 97精品免费| 天天欧美欧美亚洲网| 亚洲高清欧美总合| 色99视频| 综合少妇网| 人人扣人人操| aV中文麻| 欧美国产日韩高清在线| 色天天野狼综合社区| 国产视频一区二区免费| 欧美色图自拍| 欧美性爱精品一区二区| 亚洲极品| 97精品综合久久| 東南亚性呦成人伦理资源在线视频| 干婷婷综合网| 午夜经典| 中文字幕 人妻不满 在线视频| 啊啊啊骚| 亚洲欧美大| 国产9区| 黄色成品网站| 国产极品精品美女视频| 亚洲一二三| A片 AV一级在线播放观看免费| 97在线欧| 九九成人视频| 啊啊啊免费| 一二三啪啪专区| 中文字幕精品一区二| 91国产美女丝袜足交精品视频| 日韩亚洲中文有码视频| 久久人妻一区二区三区高清| 91九色在线| 天天网综合| 韩国三级三级BD在线| 老司机老司机午夜影院| 九九久精品| 天天影视网综合少妇| 澳门黄片一香蕉视频| 长久操视频| 九九综合| 色色网91| 日韩97超碰| 日欧美色| 日本高清一区二区在线| www.男人的天堂| 在线视频一区二区传媒| 26uuu国产成人综合| 99999亚洲| 美国久久一二三四| 成人黑料社久久| TS人妖另类精品视频系列| 伊人久久亚洲中文字幕不卡| 综合一区中亚洲国产成人综合精品 | 九t超碰| 操b网站亚洲无码| 一个人免费HD91视频| 性猛交| 天天日美女的B| 91色艳| 天天做日日做天天欢。| 中文字幕后石码四区五区| 97一区二区三区视频| 日本色婷婷| 熟女乱伦A| 亚州综合色| 日本精品一区二区三| 18一区二区三区| 粉嫩在线一区二区懂色| 四虎午夜影院| 久夜操| 涩涩久久精品| 日韩影片中文字幕一区二区三区| 亚洲综合精品国产一区| 亚洲AV麻豆Aⅴ无码电影一| 四虎精品永久在线观看| 97超碰亚洲| 天天看少妇| 大香蕉乱伦视频网| 国产欧美精选自拍一区| 亚洲久久久久| 干b网| 热热色色综合| 久热精品色情| 天天色悠悠激情| 五月大香蕉| 久久久精品无码亚免费| 国产Av超碰| 国产高清亚洲日韩一区| 熟妇人妻精品一区二区| 欧洲精品区| 人妻在线大香蕉| 亚洲狼狼干综合1| 女同亚洲欧美一二三区久久电影| 国产在线视视频有精品| 国语国产操逼伊人AV网| 十八禁视频一区二区| 秋霞怕怕片| 乱欲视频| 国产精品剧情| 男人天堂资源| 97在线免费视频观看| 欧美午夜熟妇黑人精品91| 丁香7月婷婷| 亚洲偷拍欧美激情| 国产亚洲精品美女| 天天插夜夜爽| 另类av综合久久| 美女裸体麻豆天美蜜桃91| 密臀在线免费观看| 欧亚乱色熟一区二区三四区| 天天透伊人| 日韩pv中文| 有码免费观看| 九九久久一区二区三区| 精品国产一区二区久久| 亚洲有码 视频一区| 男人的天堂2018东京热啪啪啪| 丰满人妻-区二区三区免费| 婷婷五月影院| 蜜臀久久99精品久久久久久久久| 亚洲欧洲偷拍一区| 91中出视频| 78超碰| 天天做天天爱| 成人五月天丁香激情综合| 日本精品五区| 日韩av在线精品观看| 豆花视频操逼网址| 黄片免费看的| 久久精品国产72国产精品福利|