免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

OpenBMC服務(wù)移植到AMI固件:跨生態(tài)BMC適配實(shí)戰(zhàn)指南

OpenBMC服務(wù)移植到AMI固件:跨生態(tài)BMC適配實(shí)戰(zhàn)指南 1. 項(xiàng)目概述這不是簡單的代碼遷移而是一次跨生態(tài)的“器官移植”O(jiān)penBMC 是當(dāng)前服務(wù)器固件管理領(lǐng)域事實(shí)上的開源標(biāo)準(zhǔn)它用 Linux systemd D-Bus 構(gòu)建了一套可裁剪、可擴(kuò)展、可測試的基板管理控制器BMC軟件棧。而 AMIAmerican Megatrends Inc.則是全球主流 BIOS/UEFI 固件供應(yīng)商之一其 Aptio V 和 Aptio VI 代碼庫廣泛用于 x86 服務(wù)器主板特點(diǎn)是高度模塊化、強(qiáng)硬件抽象、深度綁定 Intel PCH/SPD/PECI 等底層總線協(xié)議。ACDAdvanced Control Daemon是 AMI 自研的一套運(yùn)行在 BMC 上的輕量級服務(wù)守護(hù)進(jìn)程負(fù)責(zé)處理溫度策略、風(fēng)扇調(diào)速、電源狀態(tài)同步、傳感器輪詢等實(shí)時(shí)性要求高的任務(wù)——它不依賴完整 Linux 用戶態(tài)環(huán)境常以靜態(tài)鏈接方式部署在 AMI 的 Mini-OS 或精簡 Linux 內(nèi)核上。把 ACD 從 OpenBMC 環(huán)境“porting”到 AMI codebase表面看是“把一個 daemon 搬過去”實(shí)則涉及三重解耦與重構(gòu)第一層是運(yùn)行時(shí)環(huán)境解耦——OpenBMC 基于完整的 systemddbusglibc 用戶空間而 AMI codebase 中的 ACD 運(yùn)行在無 systemd、無 dbus-daemon、甚至無完整 libc 的受限環(huán)境中第二層是通信機(jī)制解耦——OpenBMC 下 ACD 通過 D-Bus 接收 IPMI/Redfish 請求并廣播傳感器事件AMI 環(huán)境中它必須對接 AMI 自有的 IPC 機(jī)制如共享內(nèi)存 Ring Buffer 事件中斷通知第三層是硬件抽象解耦——OpenBMC 使用 sysfs udev hwmon 驅(qū)動模型讀取傳感器AMI 則通過 PECIPlatform Environment Control Interface直接與 CPU/SoC 通信或調(diào)用 AMI 提供的 SIOSuper I/O驅(qū)動 API 訪問 BMC 芯片寄存器。我做過三次類似移植一次是把 OpenBMC 的 fan-control service 移入 AMI Aptio V另兩次分別是將基于 libipmi 的 sensor daemon 和基于 libredfish 的 event forwarder 移入 AMI 的 BMC firmware layer。每一次都踩過坑——不是編譯不過而是“跑起來但不工作”。比如第一次移植后風(fēng)扇全速狂轉(zhuǎn)查了三天才發(fā)現(xiàn) AMI 的 PWM 控制寄存器 bit 定義和 OpenBMC 默認(rèn)的 hwmon pwmN_enable 不一致0x1 表示“關(guān)閉”而非“啟用”而 OpenBMC 的驅(qū)動默認(rèn)寫 0x1 啟動第二次移植后 PECI 溫度讀數(shù)始終為 0最后發(fā)現(xiàn) AMI 的 PECI driver 在初始化時(shí)未使能 CPU Package Thermal Sensor 的 THERMTRIP# 中斷掩碼位導(dǎo)致 sensor 數(shù)據(jù)鎖存失敗。這些都不是文檔里寫的是燒板子、抓邏輯分析儀波形、反匯編 AMI driver bin 才定位出來的。所以這個項(xiàng)目標(biāo)題里的“porting”絕不是 git clone make install 那么簡單。它本質(zhì)是一次對固件生態(tài)邊界的測繪你得先搞清 AMI codebase 的“呼吸節(jié)奏”——它的啟動時(shí)序、內(nèi)存布局、中斷分發(fā)路徑、驅(qū)動加載順序、IPC 通道注冊時(shí)機(jī)再把 ACD 的“心臟節(jié)律”狀態(tài)機(jī)、定時(shí)器精度、事件響應(yīng)延遲調(diào)諧到同一頻率上。適合兩類人參考一是正在做國產(chǎn) BMC 固件適配的工程師需要理解如何把開源生態(tài)能力注入閉源 BIOS 棧二是 AMI OEM 廠商的固件集成工程師正面臨客戶要求“在現(xiàn)有 BIOS 上快速支持 Redfish 風(fēng)扇策略”的壓力需要一套可復(fù)用的移植方法論。2. 整體設(shè)計(jì)思路放棄“復(fù)制粘貼”堅(jiān)持“接口重定義”很多人一上來就想把 OpenBMC 的 ACD 源碼整個拷進(jìn) AMI 工程目錄改個 Makefile 就編譯。結(jié)果十有八九卡在 linker 階段undefined reference todbus_connection_open、sd_event_loop、udev_device_get_syspath……這些符號在 AMI 環(huán)境里根本不存在。正確的思路不是“讓 AMI 支持 OpenBMC 的依賴”而是“讓 ACD 適應(yīng) AMI 的契約”。我最終采用的是“三層接口重定義法”最外層通信接口重定義OpenBMC 下 ACD 作為 D-Bus service提供org.openbmc.control.Fan接口方法包括setSpeed,getSpeed,getRPM。在 AMI codebase 中我們不引入 dbus-daemon而是定義一套輕量級 IPC 協(xié)議使用固定大小的共享內(nèi)存塊4KB前 16 字節(jié)為 header含 sequence number、timestamp、command type后續(xù)為 payload。AMIBIOS 啟動后由 BMC firmware 初始化該內(nèi)存區(qū)并注冊一個中斷 handler如 GPIO#5 上升沿觸發(fā)當(dāng) host OS 或 BMC 應(yīng)用寫入新 command 時(shí)觸發(fā)中斷通知 ACD。ACD 用 polling interrupt 混合模式監(jiān)聽——每 10ms 主動 check header 的 sequence number 變更同時(shí)等待中斷喚醒兼顧低延遲與低功耗。中間層硬件訪問接口重定義OpenBMC 使用libsensorhwmonsysfs 接口讀取溫度、電壓、風(fēng)扇 RPM。AMI 環(huán)境中我們剝離所有 sysfs 依賴改為直接調(diào)用 AMI 提供的AMI_SensorLibAPIAMI_GetTempReading(TEMP_CPU_PKG, value)、AMI_GetFanRPM(FAN_1, rpm)。關(guān)鍵點(diǎn)在于AMI_SensorLib并非標(biāo)準(zhǔn) POSIX 庫它內(nèi)部封裝了 PECI transaction如PECI_CMD_TEMP_READ、SMBus read如SMBUS_READ_BYTE_DATA、GPIO input sampling如GPIO_READ_PIN(GPIO_FAN_TACH)三種物理訪問路徑。ACD 必須根據(jù) sensor 類型自動選擇路徑——CPU 溫度走 PECIVRM 電壓走 SMBus風(fēng)扇轉(zhuǎn)速走 GPIO這需要在 AMI codebase 的 sensor config table 中預(yù)置 mapping rule。最內(nèi)層調(diào)度與生命周期接口重定義OpenBMC 下 ACD 由 systemd 管理Typenotify通過sd_notify(READY1)告知啟動完成。AMI 環(huán)境中沒有 systemd我們實(shí)現(xiàn)一個 mini-schedulerACD 啟動時(shí)注冊一組 callback 函數(shù)到 AMI 的AMI_TimerRegister()例如AMI_TimerRegister(100, fan_control_task)表示每 100ms 調(diào)用一次風(fēng)扇控制邏輯AMI_TimerRegister(5000, sensor_poll_task)表示每 5s 輪詢一次溫度。ACD 的 main loop 變成純事件驅(qū)動只響應(yīng) timer callback 和 IPC interrupt不再有 while(1) sleep() 循環(huán)避免阻塞 AMI firmware 的主調(diào)度器。這套設(shè)計(jì)的核心哲學(xué)是不挑戰(zhàn) AMI codebase 的權(quán)威只做最小侵入式適配。我們不修改 AMI 的 driver model不 patch kernel不引入新 daemon所有新增代碼都封裝在acd_ami_adapter.c和acd_hw_abstraction.c兩個文件里編譯成靜態(tài)庫libacd_ami.a鏈接進(jìn) AMI 的BMC_Appmodule。這樣既滿足 OEM 客戶“不能改 BIOS 主干代碼”的紅線又保證功能可驗(yàn)證、可回滾、可灰度發(fā)布。提示AMI codebase 的 build system 是基于 Python 的build.py不是 GNU Make。它用config.json定義 module dependency graph。你在config.json里添加acd_ami_adapter: {deps: [AMI_SensorLib, AMI_Timer]}build.py 會自動解析依賴并加入 link order。別試圖寫 Makefile —— AMI 的 build infra 會忽略它。3. 核心細(xì)節(jié)解析PECI 協(xié)議握手、D-Bus 替代方案、內(nèi)存布局陷阱3.1 PECI 協(xié)議在 AMI 環(huán)境中的真實(shí)行為PECIPlatform Environment Control Interface是 Intel 定義的單總線串行協(xié)議用于 CPU 與 BMC 之間傳輸溫度、功耗、頻率等環(huán)境數(shù)據(jù)。OpenBMC 下通常用libpeci庫封裝調(diào)用peci_get_temp_read()即可獲取 CPU Package 溫度。但在 AMI codebase 中PECI driver 是閉源 binary blobpeci_drv.bin只暴露 C APIPECI_Read(0x30, 0x01, data, 2)。參數(shù)含義是target address 0x30CPU0command code 0x01GET_TEMP讀 2 字節(jié) response。問題來了PECI_Read返回的 raw data 怎么轉(zhuǎn)換成攝氏度OpenBMC 的libpeci里是temp (data[0] 8 | data[1]) * 0.0625但 AMI 的 datasheet 明確寫著“PECI GET_TEMP response is 16-bit signed integer, LSB 1°C, offset 0°C”。也就是說AMIBIOS 的 PECI driver 返回的是整數(shù)攝氏度無需乘 0.0625。我第一次移植時(shí)沒注意這個差異ACD 把 75°C 讀成 1200°C觸發(fā)了錯誤的高溫降頻策略。更隱蔽的坑是 PECI transaction timeout。OpenBMC 默認(rèn) timeout 是 100ms而 AMI 的PECI_Readtimeout 參數(shù)是PECI_TIMEOUT_MS定義在peci_config.h里出廠值是 50ms。但某些老舊服務(wù)器平臺如 C620 芯片組的 PECI bus 時(shí)序裕量小50ms 經(jīng)常 timeout。解決方案不是改全局 timeout會影響其他 PECI 功能而是在 ACD 的 sensor poll task 中做 adaptive retry首次調(diào)用PECI_Read失敗后sleep 10ms再調(diào)用一次最多 retry 3 次。實(shí)測下來99% 的 timeout 都發(fā)生在第一次retry 后成功。還有一個硬件級陷阱PECI bus 的 pull-up resistor。AMIBIOS 的 PECI driver 假設(shè) bus 上有 4.7kΩ 上拉電阻但某些 OEM 主板為了省料用了 10kΩ導(dǎo)致 signal rise time 超標(biāo)?,F(xiàn)象是PECI_Read偶發(fā)返回 0xFF 0xFF。解決方法是在 ACD 初始化時(shí)加一個 bus health check連續(xù) 5 次PECI_Read(0x30, 0x00, data, 1)GET_CAPABILITY如果失敗率 60%則打印 warning log 并切換到 fallback sensor source如 SIO chip 的本地溫度傳感器。這個 check 必須在 ACD 啟動 early stage 完成不能等到 main loop。3.2 D-Bus 的替代方案共享內(nèi)存 中斷的實(shí)戰(zhàn)實(shí)現(xiàn)D-Bus 在 OpenBMC 中承擔(dān)兩大角色service discoveryorg.freedesktop.DBus.Introspectable和 method call dispatchsetSpeed。在 AMI codebase 中我們用共享內(nèi)存 中斷完全替代但必須解決三個關(guān)鍵問題原子性、序列號、超時(shí)處理。共享內(nèi)存 layout 如下定義在acd_ipc.htypedef struct { uint32_t seq_num; // monotonically increasing, wraps at 0xFFFFFFFF uint32_t timestamp; // ms since boot uint8_t cmd_type; // 0x01setSpeed, 0x02getRPM, 0x03getTemp uint8_t target_id; // FAN_1, FAN_2... uint16_t payload_len; // bytes of following data uint8_t payload[256]; // variable length, e.g. for setSpeed: [uint8_t speed_percent] } acd_ipc_header_t;原子性保障不能簡單用seq_num變更判斷新命令到來因?yàn)?write memory 和 writeseq_num不是原子操作。正確做法是雙 buffer toggle bit。我們分配兩塊 4KB 內(nèi)存ipc_buf_a和ipc_buf_bheader 第一個 byte 是toggle_bit0 or 1。writer 先寫 payload 到ipc_buf_a.payload再寫ipc_buf_a.toggle_bit 1reader 檢查ipc_buf_a.toggle_bit 1則讀取然后寫ipc_buf_a.toggle_bit 0。這樣避免 reader 讀到 half-written payload。序列號防重放seq_num不僅用于 detect new command還用于 client 端匹配 response。ACD 處理完setSpeed后會把 result 寫入另一塊 response bufferresp_bufresp_buf.seq_num必須等于 request 的seq_num。client 端輪詢r(jià)esp_buf直到resp_buf.seq_num req_seq_num且resp_buf.status SUCCESS才認(rèn)為調(diào)用完成。這模擬了 D-Bus 的 synchronous call 語義。超時(shí)處理client 端發(fā)起 call 后啟動 watchdog timer500ms。如果resp_buf在 timeout 內(nèi)未更新client 主動 cancel request寫req_buf.cmd_type CMD_CANCELACD 的 interrupt handler 檢測到 cancel 命令清理 pending state。這個機(jī)制比 D-Bus 的org.freedesktop.DBus.Error.Timeout更輕量且不依賴 dbus-daemon 的 timeout manager。注意AMI 的 shared memory region 必須在BMC_App的 memory map 中顯式聲明。我在bmc_app.ldlinker script 里添加_acd_ipc_start .; .acd_ipc (NOLOAD) : { *(.acd_ipc) } RAM_REGION _acd_ipc_end .;然后在acd_ipc_init()中用memset((void*)_acd_ipc_start, 0, _acd_ipc_end - _acd_ipc_start)清零。漏掉這步IPC buffer 會殘留 garbage data導(dǎo)致 ACD 解析出錯。3.3 AMI codebase 內(nèi)存布局與 ACD 鏈接陷阱AMI Aptio V 的 firmware memory layout 是嚴(yán)格分區(qū)的ROM_CODE只讀 flash、RAM_CODE可執(zhí)行 RAM、DATA_RAM全局變量、STACK_RAM每個 thread stack。ACD 作為BMC_App的一部分必須全部放入RAM_CODE區(qū)域因?yàn)?BMC 的 RAM 很小通常 ≤ 2MB且RAM_CODE是 cache-coherent 的適合跑實(shí)時(shí) task。陷阱在于OpenBMC 的 ACD 大量使用malloc()動態(tài)分配內(nèi)存而 AMI 的BMC_App禁用 heap ——malloc是 stub function永遠(yuǎn)返回 NULL。解決方案是pre-allocated object pool。我們在acd_init()里一次性 malloc 16KB足夠容納 128 個 sensor object 32 個 fan control context然后用 slab allocator 管理static uint8_t acd_pool[16384]; static acd_slab_t fan_ctx_slab; static acd_slab_t sensor_obj_slab; void acd_init() { acd_slab_init(fan_ctx_slab, sizeof(fan_context_t), 32, acd_pool); acd_slab_init(sensor_obj_slab, sizeof(sensor_object_t), 128, acd_pool 32*sizeof(fan_context_t)); }所有fan_context_t* ctx acd_slab_alloc(fan_ctx_slab)釋放用acd_slab_free(fan_ctx_slab, ctx)。這樣既避免 runtime malloc又比 static array 更靈活。另一個致命陷阱是stack overflow。OpenBMC 的 ACD 默認(rèn) stack size 是 8MBLinux process而 AMI 的BMC_Appthread stack 是 4KB。ACD 的fan_control_task()里有個 deep recursion 的 PID controller原版用double運(yùn)算每次 call stack depth 達(dá) 12 層直接爆棧。解決方法是① 把 double 改為 fixed-point int32_tQ15 format② 把 recursion 改為 iterative loop③ 在acd_timer_register()時(shí)顯式指定 stack sizeAMI_TimerRegister(100, fan_control_task, 8192)—— 這個 8192 是 AMI 的 magic number表示給該 timer callback 分配 8KB stack。4. 實(shí)操過程從零開始構(gòu)建 AMI ACD 工程的七步法4.1 步驟一環(huán)境準(zhǔn)備與 AMI SDK 獲取AMI 不公開 SDK download必須通過 OEM portal 申請。你需要提供公司營業(yè)執(zhí)照、產(chǎn)品型號、BIOS version、contact person email。審批通常 3-5 個工作日。拿到的是AMI_AptioV_SDK_XXXX.zip解壓后目錄結(jié)構(gòu)如下AMI_AptioV_SDK/ ├── BuildTools/ # Python build scripts, gcc cross-compiler (x86_64-amibios-linux-gcc) ├── Platform/ # Board-specific config, e.g., Platform/Whitley/Config/ ├── Source/ # Core firmware source: Core/ (UEFI), BMC/ (BMC App), Library/ │ ├── BMC/ │ │ ├── App/ # Your ACD will go here │ │ └── Driver/ # PECI, SMBus, GPIO drivers ├── Tools/ # Flash programming tools, debug probes └── Docs/ # AptioV Programmers Guide, BMC App Dev Manual關(guān)鍵工具鏈編譯器BuildTools/gcc/x86_64-amibios-linux-gcc基于 GCC 7.3不支持 C17stdc99。構(gòu)建腳本BuildTools/build.py核心命令python build.py --platform Whitley --module BMC_App --buildtype RELEASE。調(diào)試AMI 提供AMI_JTAG_Debugger支持 SWD/JTAG但只能 attach 到BMC_App不能 debug kernel。實(shí)操心得不要用 Windows Subsystem for Linux (WSL) 運(yùn)行 build.py —— AMI 的 build infra 依賴 Windows-style path (C:\AMI\...) 和 registry key。必須在原生 Windows 10/11 上安裝 Python 3.7AMI 指定版本并用管理員權(quán)限運(yùn)行 cmd。4.2 步驟二創(chuàng)建 ACD module skeleton在Source/BMC/App/下新建目錄ACD_AmiPort/結(jié)構(gòu)如下ACD_AmiPort/ ├── acd_main.c # ACD entry point, calls acd_init(), acd_start() ├── acd_ipc.c # Shared memory interrupt IPC implementation ├── acd_hw.c # Hardware abstraction: PECI/SMBus/GPIO wrapper ├── acd_control.c # Fan control logic, PID algorithm ├── acd_sensor.c # Sensor polling fusion ├── acd_log.c # Lightweight logging (write to UART or BMC flash log) ├── acd_config.h # Compile-time config: FAN_COUNT, SENSOR_MAP, TIMER_INTERVALS └── Makefile.amibios # AMI build system requires this, not MakefileMakefile.amibios內(nèi)容這是 AMI build system 識別 module 的唯一方式MODULE_NAME : ACD_AmiPort MODULE_TYPE : APP MODULE_DEPS : AMI_SensorLib AMI_Timer AMI_GPIO MODULE_SRCS : acd_main.c acd_ipc.c acd_hw.c acd_control.c acd_sensor.c acd_log.c MODULE_INCLUDES : -I$(AMI_ROOT)/Source/BMC/Include MODULE_CFLAGS : -stdc99 -O2 -Wall -Wno-unused-function然后在Source/BMC/App/的ModuleList.txt里添加一行ACD_AmiPort。build.py 會自動掃描并加入 build graph。4.3 步驟三實(shí)現(xiàn) PECI sensor abstraction layeracd_hw.c是移植成敗的關(guān)鍵。我們不直接調(diào)用PECI_Read而是封裝一層acd_peci_read_temp()// acd_hw.c #include peci_api.h // AMI provided header #include acd_config.h // PECI target mapping: CPU0 - 0x30, CPU1 - 0x31, etc. static const uint8_t peci_target_map[ACD_MAX_CPUS] {0x30, 0x31, 0x32, 0x33}; int acd_peci_read_temp(uint8_t cpu_id, int32_t *temp_c) { uint8_t data[2]; int ret; int retry 0; if (cpu_id ACD_MAX_CPUS) return -1; do { ret PECI_Read(peci_target_map[cpu_id], 0x01, data, 2); // GET_TEMP if (ret 0) break; // success if (retry 3) return -1; AMI_TimerDelay(10); // 10ms delay between retries } while(1); // AMI PECI returns integer °C, no scaling needed *temp_c (int16_t)((data[0] 8) | data[1]); return 0; }重點(diǎn)是AMI_TimerDelay(10)—— 這是 AMI 提供的 busy-wait delay精度 ±5%比usleep()更可靠因?yàn)?AMI 的usleep()依賴 system timer可能被其他 high-priority task preempt。acd_config.h里定義ACD_MAX_CPUS為 4覆蓋主流雙路服務(wù)器。4.4 步驟四構(gòu)建共享內(nèi)存 IPC coreacd_ipc.c實(shí)現(xiàn)雙 buffer IPC// acd_ipc.c #include acd_ipc.h #include acd_log.h static volatile acd_ipc_header_t *ipc_buf_a; static volatile acd_ipc_header_t *ipc_buf_b; static volatile uint8_t *toggle_a; static volatile uint8_t *toggle_b; void acd_ipc_init(void) { // Get physical address from AMI memory map ipc_buf_a (volatile acd_ipc_header_t*)AMI_GetMemoryAddress(IPC_BUF_A_BASE); ipc_buf_b (volatile acd_ipc_header_t*)AMI_GetMemoryAddress(IPC_BUF_B_BASE); toggle_a (volatile uint8_t*)ipc_buf_a-cmd_type; // reuse first byte as toggle toggle_b (volatile uint8_t*)ipc_buf_b-cmd_type; // Clear both buffers memset((void*)ipc_buf_a, 0, sizeof(acd_ipc_header_t)); memset((void*)ipc_buf_b, 0, sizeof(acd_ipc_header_t)); *toggle_a 0; *toggle_b 0; } // Called by interrupt handler when GPIO#5 triggers void acd_ipc_interrupt_handler(void) { if (*toggle_a 1) { acd_ipc_process_command(ipc_buf_a); *toggle_a 0; // clear toggle } else if (*toggle_b 1) { acd_ipc_process_command(ipc_buf_b); *toggle_b 0; } } static void acd_ipc_process_command(volatile acd_ipc_header_t *hdr) { switch(hdr-cmd_type) { case CMD_SET_SPEED: acd_control_set_fan_speed(hdr-target_id, hdr-payload[0]); break; case CMD_GET_RPM: acd_control_get_fan_rpm(hdr-target_id, hdr-payload[0]); break; default: acd_log_error(Unknown IPC cmd %d, hdr-cmd_type); } }AMI_GetMemoryAddress()是 AMI 提供的 API用于從 memory map table 查物理地址。IPC_BUF_A_BASE定義在acd_config.h值為0x80000000假設(shè) AMI 分配 128MB RAMIPC buf 在高端地址。4.5 步驟五移植風(fēng)扇控制算法OpenBMC 的fan_control.py是基于 PID 的但 Python 在 AMI 環(huán)境不可用。我們用 C 重寫 fixed-point PID// acd_control.c #include acd_control.h #include acd_sensor.h // Q15 fixed-point: 1.0 0x8000, 0.5 0x4000 #define KP_Q15 0x2000 // 0.25 #define KI_Q15 0x0800 // 0.0625 #define KD_Q15 0x1000 // 0.125 typedef struct { int32_t integral; // Q15 accumulator int32_t last_error; // Q15 uint8_t pwm_out; // 0-100% } pid_state_t; static pid_state_t pid_state[ACD_MAX_FANS]; uint8_t acd_control_calculate_pwm(uint8_t fan_id, int32_t temp_c, int32_t target_temp_c) { int32_t error (target_temp_c - temp_c) 15; // convert to Q15 int32_t p_term (error * KP_Q15) 15; pid_state[fan_id].integral error; // anti-windup: clamp integral to ±1000°C*sec if (pid_state[fan_id].integral 0x3E80000) pid_state[fan_id].integral 0x3E80000; if (pid_state[fan_id].integral -0x3E80000) pid_state[fan_id].integral -0x3E80000; int32_t i_term (pid_state[fan_id].integral * KI_Q15) 15; int32_t d_term ((error - pid_state[fan_id].last_error) * KD_Q15) 15; pid_state[fan_id].last_error error; int32_t pwm p_term i_term d_term; // clamp to 0-100% if (pwm 0) pwm 0; if (pwm 100) pwm 100; return (uint8_t)pwm; }acd_control_set_fan_speed()調(diào)用此函數(shù)然后通過AMI_SetFanPWM(fan_id, pwm_value)設(shè)置硬件 PWM 寄存器。AMI_SetFanPWM是 AMI 提供的 API內(nèi)部處理 fan curve lookup 和寄存器 bit mapping。4.6 步驟六集成與編譯執(zhí)行構(gòu)建命令cd AMI_AptioV_SDK/ python BuildTools/build.py --platform Whitley --module BMC_App --buildtype RELEASE常見報(bào)錯及解決error f015: c1: fatal error c1083: cannot open source file dbus/dbus.h這是因?yàn)閍cd_main.c里還有殘留的#include dbus/dbus.h。全局搜索刪除所有 dbus 相關(guān) include 和 code用#ifdef OPENBMC_MODEguard 住。undefined reference to pthread_createAMI 不支持 pthread。把所有pthread_*調(diào)用替換為 AMI 的AMI_ThreadCreate()但 ACD 不需要多線程 —— 我們用 timer callback 模擬并發(fā)所以直接刪掉 pthread 代碼。section .acd_ipc will not fit in region RAM_REGIONlinker 報(bào)內(nèi)存不足。檢查bmc_app.ld增大RAM_REGIONsize或減小acd_ipc.h的payload[256]到payload[64]夠用。編譯成功后生成BMC_App.bin用 AMI 的FlashProgrammer.exe燒錄到 BMC SPI flash。4.7 步驟七調(diào)試與驗(yàn)證燒錄后通過 UART console 觀察 log[ACD] Init start... [ACD] IPC init OK, buf_a0x80000000, buf_b0x80001000 [ACD] PECI health check OK, CPU0 temp65C [ACD] Fan control task registered, interval100ms [ACD] Ready.驗(yàn)證方法功能驗(yàn)證用 AMI 提供的BMC_CLI.exe發(fā)送 IPC commandBMC_CLI.exe --send-ipc --cmd setSpeed --fan 1 --speed 50觀察風(fēng)扇是否按 50% PWM 運(yùn)行用 tachometer 測 RPM。壓力驗(yàn)證連續(xù)發(fā)送 1000 次getRPMcommand檢查 response latency 是否 50ms丟包率是否為 0。穩(wěn)定性驗(yàn)證72 小時(shí)滿載運(yùn)行監(jiān)控acd_log是否有PECI timeout或IPC toggle error。我遇到過一次詭異問題ACD 運(yùn)行 24 小時(shí)后seq_num突然跳變從 0x1234 到 0xABCD導(dǎo)致 client 端所有 pending request 超時(shí)。最后發(fā)現(xiàn)是 AMI 的AMI_TimerDelay(10)在高負(fù)載下不準(zhǔn)導(dǎo)致 IPC interrupt handler 被延遲執(zhí)行writer 誤判 buffer 空閑而覆蓋了未處理的 command。解決方案在acd_ipc_interrupt_handler()開頭加AMI_DisableInterrupts()結(jié)尾加AMI_EnableInterrupts()確保 IPC 處理原子性。5. 常見問題與排查技巧實(shí)錄5.1 PECI 讀數(shù)為 0 或恒定值的 5 種原因及定位法現(xiàn)象可能原因定位方法解決方案PECI_Read返回 0xFFFFPECI bus 信號完整性差上拉電阻過大/PCB trace 長度超標(biāo)用示波器測 PECI CLK 和 DATA 波形rise time 1ns 則 fail更換 4.7kΩ 上拉電阻或縮短 PCB tracePECI_Read返回 0x0000PECI driver 未初始化或 target CPU 未 power on在acd_init()后加PECI_Read(0x30, 0x00, cap, 1)檢查 cap 是否為 valid value確保 AMI BIOS 的 PECI enable bit 在Setupmenu 中開啟或調(diào)用AMI_EnablePECI()PECI_Read返回固定值如 0x00C8200°CCPU Package Thermal Sensor 被 disable讀取 CPU MSRIA32_PACKAGE_THERM_STATUS(0x1B1)bit 0 是否為 1在acd_init()中寫MSR_IA32_PACKAGE_THERM_STATUSbit 0 1PECI_Read偶發(fā) timeoutPECI timeout 設(shè)置過短修改peci_config.h中PECI_TIMEOUT_MS為 100重編譯不推薦全局改應(yīng)在 ACD 中做 adaptive retryPECI_Read成功但溫度異常PECI response scaling 錯誤對比 AMI datasheet 和 OpenBMC libpeci 的 scaling factor嚴(yán)格按照 AMI spec不做任何 scaling實(shí)操心得PECI debug 的黃金組合是示波器 AMI JTAG Debugger CPU datasheet。我用 Saleae Logic 8 測 PECI bus發(fā)現(xiàn)某款主板的 PECI DATA line 有 200mV noise floor導(dǎo)致PECI_Read誤判 start bit。加一個 100nF decoupling capacitor 到 PECI connector pin 3GND和 pin 4DATA之間問題消失。5.2 IPC 不生效的 3 個隱藏雷區(qū)內(nèi)存 cache coherency 未 flushAMI 的BMC_App運(yùn)行在 ARM Cortex-A53 上有 L1/L2 cache。writer 寫ipc_buf_a后reader 可能讀到 stale cache data。必須在 writer 寫完后調(diào)用AMI_CacheFlush(ipc_buf_a, sizeof(acd_ipc_header_t))reader 讀前調(diào)用AMI_CacheInvalidate(ipc_buf_a, sizeof(acd_ipc_header_t))。漏掉這步IPC 100% 失效。GPIO interrupt 配置錯誤AMI 的 GPIO interrupt 需要配置 trigger modelevel-high / edge-falling。IPC 使用 edge-fallingGPIO#5 從高變低表示 command ready。如果 BIOS setup 中配置為 level-high則 interrupt never fires。解決方案在acd_ipc_init()中調(diào)用AMI_GPIO_SetInterruptMode(GPIO_5, EDGE_FALLING)。shared memory region 未映射到 MMUAMI 的 MMU 默認(rèn)只映射RAM_CODE和DATA_RAM。IPC buf 在0x80000000需在mmu_config.c中添加MMU_MapRegion(0x80000000, 0x80002000, MMU_ATTR_NORMAL_WB); // 8KB region否則訪問ipc_buf_a會觸發(fā) MMU faultACD crash。5.3 編譯報(bào)錯fatal error c1083的
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
色狠狠综合| 99思思热只有在这里看| 国产激情久久| 丁香五月婷婷成人色区| 依人大香蕉在钱1| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 婷婷五月天a| 欧美性生交XXXXX无码小说| 天堂爱爱| 99精品久| 91天天操天天干天天射| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 五月丁香婷婷中文网| 色五月五月丁香| 国产日韩欧美| 久久久久人妻中文| 精品99视频| 久久与婷婷| 久久五月网| 亚洲视频99| 婷婷五月天成人五月天| 91午夜婷婷狠狠久久综合9色| 大伊久久| 五月情涩综合婷婷| 可以看的av网站| 天堂AV三级| 六月成人网| 国产高清精品色| Caoporn公开| 丁香五月婷婷在线| .操區COm| 日本三日本三级少妇三级66| 在线播放成人网站| 5月婷婷6月六月丁香| 九九色播五月丁香| 国产看真人毛片爱做A片| 午夜爱爱爱成人| 丁香五月亚洲综合| 激情五月天丁香| 99热在线99| 大香蕉色婷婷伊人在线| 任你爽免费视频| 欧美激情丁香五月| 伊人久久大香线蕉亚洲五月天,| 啪啪小说五月天| 丁香婷婷色色| 九热网站| 激情五月天网| 六月激情综合| 大狠狠在线| 97电影99热| 激情五月综合亚洲另类| 婷婷在线激情| 26uuu激情五月天| 婷婷久久色| 日夜操B| 91精品熟女| 超碰人人妻| 无码啪啪| 五月婷婷六月丁香在线| 亚洲综合色丁香婷婷六月| 五月丿香啪啪| 久久综合婷婷激情| 五月婷婷三级| 五月天婷婷在线AN| 久久这里只有精品无码| 激情五月天婷婷直播| 成人无码髙潮喷水A片| 久久国产色| 国产中文亚洲欧美日韩性交| 67194中文字幕| 国产又爽又猛又粗的视频A片| 久草热在线视频| 丁香五月图片| 色9999日韩国产| 亚洲激情四谢| 中文字幕日产A片在线看| 五月丁香五月婷婷| 五月深爱激情网| 噜综合| 日都一级A片| 婷婷大香蕉| 天天舔天天摸| 五月伊人婷婷| 激情宗合网激情五月天| 丁香六月亚洲| 丁香无五月网| 婷婷五月亚洲激情| 欧美激情综合| 婷婷久久五月丁香| 久久婷婷五月综合精品蜜芽| 天堂网色婷婷| 五月停亭久久电影| 成人性生活免费观看。| 久久丁香综合香蕉| 天堂久热| 日本人妻伦在线中文字幕| 色欲五月婷婷| 婷婷中文字幕| 天天xxxxxx天天日| 丁香六月毛片| caopeng97日韩| 日韩欧美一级大黄网站| 五月丁香成人| 超碰chaompinm| 亚洲国产黄色电影| www网站在线观看| 国产又黄又爽又色的免费| 激情五月天天狠狠久久| 狠狠狠色激情综合适合| 人人草人人舔| 六月丁香五月天| 思思热热久久| 色色色国产| 人人干天天操五月丁香| 丁香婷婷六月天| 91婷婷色五月| 玖热精品综合视频| 色狠狠999综合网| 九色视频91| 亚洲色综久久五月| 六月婷基地| 伊人热在线大香蕉| www.亚洲激情.com| 久久aaaaa| 丁香五月瑟瑟| 亚洲九九99精品视频在线播放| 欧美激情综合| 亚洲深喉AV| 婷婷97狠狠成人网站| 婷婷久久五月| 欧美私人家庭影院| 婷婷久久女人| 亚洲六月婷婷| 99爱最新免费视频在线观看| 26uuu最新地址| 天天操天天插| 天天干天天操天天拍| 99视频自拍| 99操逼| 婷婷无码视频| 色色综合网站| 99网址在线观看| 香蕉视频性爱BB做爱| 97啪在线观看视频| www综合久久| 精品九九网| 97操碰人免费| 久9视频免费播放| se色综合网| 色五月婷婷激情基地| 99操免费视频| 99久久丝| 婷婷五月天狠狠| 99狠狠操一| 五月色婷婷中文字幕| 激情五月天影院| 青草视频在线观看视频| 欧美日韩五月婷婷| 久久这里在精品视频| 五月综合在线婷婷图片| 五月天伊人久久久久| 99热日本| 九九Y精品热播| 性欧美日本| 欧美噜噜久久久XXX| 人妻五月天激情开心网| 五月天婷婷AV| 欧美久久一级内射wwwwww.| 久久久亚洲成人无码A片| 激情图片婷婷| 五月婷婷之六月丁香| 开心婷婷五月天激情网| 女人天堂AV| 亚洲av电影网站| 热久69| 丁香五月婷婷久久综合激情网 | 九九热精品99| 久久精品永久免费| 99re久久| 久久五月天免费网站| 久久婷婷激情| 九九热视频这里只有精品| 91欧美| 操操操B| 五月婷婷六月丁香玖玖玫瑰91| 97天堂| 五月天色婷婷基地| 99热这里只有精| 亚洲天堂AV综合网| 丁香婷婷六月天| 久久综合首页| 碰超亚洲| 婷婷九月激情| 99ri国产| 97人妻碰碰碰久久久久-最近国语高清| 久久er这里只有精品| 亚洲五月色| 欧美激情综合色综合啪啪五月| 天堂网操| 五月丁香好婷婷A片网| 伊人www22综合色| www天堂99| 4399成人黄A片| 这里只有精彩视| 99视频在线精品免费观看2| 在线免费视频caop| 狠狠999| 色播五月婷婷| 中文AV在线播放| 丁香五月在线观看完整版| 色色五月婷| 91丨人妻丨国产丨丝袜| 五月丁香六月婷婷久久久综合| www.99热| 7777激情基地| 99ri精品视频在线观看| 夜夜躁婷婷AV| 色五月婷婷久久| 欧美大片| 春色激情第四色| 欧美日韩一区二区三区四区| 啪啪激情综合| 97久久精品| 婷婷久久天堂网| WWW.桔色成人.COM| 色五月婷婷成人| 狠狠干天天内射| 婷婷射丁香| 亚洲Av成人在线观看| 色小说五月婷婷| 五月丁香网站| 天天上天天爽| 青青草国产亚洲精品久久| 操91| 色综合久久888| 激情六月丁香| 91久久久久久久久18| 色很久综合| 欧美va欧美va差| 先锋影音av色五月天资源站| 伊人丁香花综合影院| 99无码视频| 五月天天丁香婷婷在线中| 久久五月网| 狠狠色色综合| 97精品欧美91久久久久久久| 狠狠综合| 在线另类| 亚洲爱爱无码婷婷色五月| 亚洲激情在线| 他改变了拜占庭| 东京热伊人| 婷婷成人AV| 性日本精品| 熟惀91九色在线| 新99思思视频| 日本久久精品| 热99精品视频观看| 丰满少妇猛烈A片免费看观看 | 亚洲第一色区| 久久色吧| 欧洲色| 99久久終合| 五月开行婷婷色五月| 色逼综合网| 亚洲无码成人性爰网| 免费无码毛片一区二区A片| 激情综合网之激情五月| 久久caop| 啪啪亚洲综合| 欧美日韩国产伦精品日韩人妻一| 久久五月激情综合| 久婷| 九九碰九九爱97| 婷婷欧美激情综合| 双性美人被调教到喷水A片| 亚洲激情免费久久| 亚洲精品国产A久久久久久| 天天日天天干天天爱| 激情网五月| 色婷婷五月六月丁香综合视频| 丁香色婷婷| 《诡秘之主》在线观看| AA片在线观看视频在线播放| 欧美激情五月| 人妻激情在线| 亚洲成人综合在线| 五月天婷婷青青草| 大香蕉大香蕉在线影院| 欧美丁香婷婷五月| 五月丁香激情深爱婷婷| 五月香蕉婷婷| 看片视频在线免费日产在线看| 狠狠艹狠狠艹| 久热精彩视频98| 五月激情六月宗合| 五月天婷婷综合久久| 狠狠爱综合网| 婷婷五月天黄色小说| 九九热婷婷| 碰碰91| 这里只有精品99视频| 国产精品第一国产精品| 天天插天天爱| 久久色频| 色色97丁香婷婷五月天| 久热91| 热99这里只有精品视频| 六月婷婷色色色| 五月天六月色| 人人爱国产| 色狠狠999综合| 亚洲欧美婷婷五月色综合| 婷婷国产日本欧美| 射琪琪| 日日色综合| 色色婷婷综合网| 玖玖婷婷色| 日韩在线9| 开心四月婷婷在线色播播| 色婷婷狠狠久久综合五月| 九九热在线视频| 五月丁香爱婷婷深深| 河北真实伦对白精彩脏话| 婷婷在线播放| www.日韩艹| 欧美日韩中国| 少妇AB又爽又紧无码网站| 色狠久| 久久久久婷婷| 亚洲有码在线视频| 色欲一区二区三区精品A片| 狠狠色综合久久| 丁香六月婷婷久久综合| 婷婷丁香五月基地| 免费视频在线观看的网站| 五月婷婷色| 国产99精品免费视频| 狠狠综合久久综合| 亚洲亚洲人成综合网络| 日本三级中国三级99| 九九久久综合网站| 欧美极品999| 天天综合网~91| 成人在线日韩| 五月天com| 天天插天天很| 婷婷伊人綜合中文字幕| 蜜桃婷婷狠狠久久综合| www.9操| 丁香五月区| 99热在线成人网站| 色情播放| 噜综合| 色一情一乱一乱一区9| 精品人妻伦九区久久AAA片| 天天久久狠狠色综合| 激情九九这里只有精品| 久热2025无码| 97资源碰碰| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 五月婷婷色播视频| 激情AV在线| 啪啪五月婷婷| AⅤ网站在线看| www.99视频| 操九色| 色性五月天| 99热这里只有在线播放| 九月色婷婷| 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | 久久九九怡红院| 久久Xx| 蜜臀99久久精品久久久久| 丰满少妇乱A片无码| 色五月琪琪| 开心婷婷中文字幕| 色日本五月天| 久久这里只有精品16| 色亚洲中文| 日本片日本片祼观看网站在线看中文版网页在线看 | 婷婷综合激情五月中文字幕| 久九色| 青青久久大香蕉| 婷婷五月天综合久久日美女| 激情九月婷婷九月| 日本色色色色色色色色一色二色| 六月婷婷毛片| chaopengdaxiangjiao| 超碰99在线| 四色99久久| 婷婷午夜丁香| 中文av网站| 国产成人+综合亚洲+天堂| 久久免片| www.99热这里精品| 久久国产色| 亚洲免费婷婷| 欧美影院| 碰碰91| 久操大| 国产激情在线| 久久久婷婷婷| 色情五月综合婷婷| 99re6在线视频精品免费| 五月激情在线| 老师的粉嫩小又紧水又多A片视频 粉嫩AV久久一区二区三区 | 伊人久久艹| 激情综合网五月| 99在线观看| 九九黄色网| 五月天激情婷婷| 日日干夜夜干| 欧美性色A片免费免费观看的| 极品少妇高潮啪啪AV无码| 99热18| 三级av在线| www.色色色com| 99热传媒| 欧美日韩五月婷婷| 九洲一级A片| 天天操天天日天天爱| 婷婷五月黄色激情在线| 婷婷性爱无码视频| 色狠久| 激情五月天色婷婷| 丁香五月91| 日日夜夜天天综合| 亚洲乱码日产精品BD| 少妇伦子伦精品无吗| 丁香六月综合激情| 五月丁香婷婷老司机| WWW·色色色·COM| 蜜臀丁香黄色婷婷五月天| 婷婷五月天成人五月天| 五月草影视| 久久久免费精彩视频| 免费视频无码| 色色亚洲| 91人人妻人人操人人爽| 国产成人网站在线观看| 99在线视频精品| http://www.sd-xiangsu.com/| 亚洲VA口| 97福利视频| av婷婷丁香| 久久九九国产| 这里只有精品,日韩视频| 夜夜操夜夜姧| 激情五月婷婷五月| 激情深爱五月天| 一本大道伊人AV久久综合| 五月天色欧美| 国产真人做爰视频免费| 久久曰9| 色99婷婷五月天| 天天爽人人综合免费7799| 六月色婷婷欧美| 色综合色综合色综合| 欧美内射AA| 欧美三9久九观看| 2013AV天堂| 亚洲国产精品五月天| 五月婷婷激清网| 成人五月丁香社区| 九九九九九九九九九九九九九九九九九九九在线视频 | 久久激情五月| 操人精品| 青青草蜜臀| 婷婷激情六月视频| 无码人妻AV久久久一区二区三区| 9婷婷内射| 婷婷五月天激情偷拍| 日本婷婷色日| 婷婷色婷婷| 99色日本| 这里只有精品网站| 99热在线观看| 国产日韩av片| 激情五月综合网最新| 碰碰91| 久婷狼色诱惑在线| 久久这里这里有精品免费视频| 婷婷激情五月天视频在线| 91色久| 自拍视频99| 色综合久久五月| 色色99| 狠狠五月激情丁香六月| 日韩成人网址| 另类视屏| 这里只有精品免费观看网占| 日本一级一级一级一级| 久久久激情视频| 日日夜夜天天综合| 97操操网| 五月丁香爱婷婷深深| 婷婷丁香五月色| 日日影院 | 亚洲色色色色色| 26uuu国产| 黄页免费一级视频懂色| 色99热| 97五月天婷婷| 操大屄五月天视频| 五月婷婷狠天天色综合| 九九婷婷网五月天| 五月丁香六月婷婷啪啪| 草综合14| 国产美女主播vip| 久久 这里只有精品1| 大香蕉中文| 五月丁香激情综合啪啪| 五月天激情小说婷婷| 婷五月天| 五月丁香婷婷网在线在线| 九九视频精品视频精品| 亚洲成人五月| 91熟妇大香蕉| 激情五月色综合国产精品| 久久九九热视频| 中国无码av| 5Www色5夜| 国产26uuu视频| 狠狠干综合| 亚洲超碰在线| 九九aV| 婷婷五月丁香超碰| 激情九九这里只有精品| 伊人大综合| 夜夜操夜夜姧| AA片在线观看视频在线播放| 国产婷婷五月中文字幕高清| 夜精品无码A片一区二区蜜桃| 九九AV| 天天爽人人综合免费7799| 亚洲色综久久五月| 97久久人人| 激情四射婷婷| 久久久18| 日本精品在线噜噜噜| 26uuu在线观看| 深爱五月月天| www.99热| 无码毛片992367| 97亚洲视频在线| 人妻肉射免费观看| 久久曰9| 激情5月天天天| 激情五月天.色网| 色婷婷婷婷五月天| 9婷婷内射| 久久色五月天| 六月婷婷天天操夜夜爽视频| 婷婷五月天av| 日 日干 日日做| 亚洲成人AV电影在线| Www,五月天| 婷婷久久婷婷| 欧美五月婷婷| 久久久人妻人伦| 疯狂做受XXXX高潮A片| 欧洲日韩一区二区三区| 丁香色色五月| 婷婷五月天福利| 草草操操| 激情综合五月婷婷| 色人妻五月| 丁香狠狠操| 色~性~乱~伦~噜| 五月综合久久| 激情图片五月天| 婷婷五月综激情| 久久婷综合| 色五月开心五月激情五月| 中文字幕视频色婷婷| 亚洲A色| 91操在线视频| 五月婷婷丁香| 综合一本道| 色色色地址| 激情五月天网| www,99热| 久色网址| 成人国产网站在线免费看| 色久丁香五| 1024人妻| 中文字幕欧美日韩VA免费视频| 色五月丁香六月婷婷| 精品国产a| 九月丁香亭亭| 婷婷基地五月色| 久99精品视频| 成人午夜天| 五月丁香六月婷婷欧美综合| 丁香啪啪| av操B网站| 五月天色色色| 婷婷五月丁香六月天亚洲综合| 热久久色| 色色欧美色色| 久久色天堂| 人人射av| 亚洲av成人在线| 久久大大香| 黄色五月婷婷| 色爱终和网| 99热这里都是精品| www.久操| 99热在线播放| 伊人玖玖婷婷| 亚洲色婷婷网站| 色婷婷影| 91中文狠狠综合| 99久久婷婷五月综合| 天天摸日日舔狠狠添婷婷婷| 五月丁香欧美综合| 91狼友视频在线观看| 91九色精品熟女内射| 色婷婷狠狠干芒果TV| wwwss在线观看| 激情床戏| 丁香五月激情婷婷| 96人人操人人操人人| 久久99精品久久久久久青青AR| 婷婷五月在线观看| 色五月欧美| 五月丁香五月天现场视频| 国产9色在线/日韩| 天色色综合网| 国产成人精品一区二区三区视频 | 91九九精品| 大香蕉伊人久久| 色在线99| 久久五月天综合| 六月婷婷狠狠做| 亚洲1区| 免费看片操逼| 97人人操人人拍| 久久精彩视频| 丁香花五月天激情| 五月婷婷av| 综合色色婷婷| 在线区区区| 久久精典| 91超碰在线观看| 色婷婷亚洲在线观看| 精品人妻午夜一区二区三区四区| 超碰99在线| 色哟哟www| 色播五月婷婷五月| 色五月综合婷婷| 久月丁香爱婷婷综合| 无码人妻激情| 亚洲国产成人在线| 先锋资源婷婷| 91精品国产色猫| 亚洲影院婷婷色| 丁香五月婷婷天激情| 天天日天天色| 这里只有精品在线免费视频| 狠狠干在线视频| 亚洲中文丁香| 伊人春天av| 五月丁香久久| 婷婷色色五月| 婷婷伊人綜合中文字幕| 亚洲av免费在线| 亚洲精品影视| 九九综合| www超碰| 99er6免费视频热播| 久久停停超碰| 97操视频| 丁香九月激情| 一区二区中文字幕| 99热热九九| 色综合色婷婷色伊人| 亚洲丁香婷婷五月天综合色| 丁香五月天导航| 婷婷啪啪| 婷婷五月天 偷拍| 激情五月天婷婷久久久久久久久久久| 青青草原中文字幕| 五月婷婷导航| 能看的AV| 久热这里只精品| 婷婷五月综合在线| 青青草原99热| 欧美激情中文字幕| 久热这里只有| 伊人成人宗合网| 亚洲精品**不卡在线播he| 可以直接看的AV| 久久99精品视频| 五月天婷婷香蕉狠狠超碰综合| 五月天伊人综合| 丁香六月激情四射| 久久这里只有国产| www.狠狠干| 久久五月婷天天干| 久久久久久综合五月婷婷| 日本人人xxx| 久色激情| 插插干干干色| 可以看的AV网站| 操日视频| 思思热精品在线视频| 欧美肉大捧一进一出免费视频| 亚洲精品白浆高清久久久久久 | 亚洲无码 图片区| 99操网站| A在线观看| 亚洲中文丁香| 五月丁香婷在线| 日本色狠狠| 亚洲成人免费电影| 国产人妻777人伦精品HD| 色色五月婷婷网| 97碰操| 色久影院| 就99这里只有精品| 婷婷五月天成人网站| 免费国产视频| 精品国产AV色一区二区深夜久久| 99热有精品在线观看| 五月天婷婷綜合院| 丁香六月婷婷缴情欧美| 激情综合六月| 丁香五月婷婷影院| 欧美五月停| 六月婷基地| 怡红院99| 五月婷婷69| 色五月婷婷久久| 欧美性猛交XXXX乱大交极品| 欧美婷婷九月| 99久久精彩视频。| 亚洲五月色| h在线看免费版在线看| 亚洲综合网在线| 六月丁香停| 涩涩五| 影音先锋91资源站| 99色色| 五月丁香六月色| 天天草天天舔| 98永久精品| 婷婷综合中文| 日本久久婷| WWW.色婷婷.COM| 日韩视频99| 99九九99九九九视频精品| 色五月婷婷色| 伊人五月综合网| 欧洲亚洲激情五月天在线| 日本系列_4页_777FP| 丁香六月婷婷色XXXX| 人妻AV在线观看| 五月花亭亭| 色色五月丁香| 色yeye色综合| 婷婷五月丁香高清无码| 91超碰九色| 五月刺激丁香月综合| 99免费综合网| 99re在线这里只有精品视频首页| 99免费热视频在线| yazhochengrenavwang| 日本色噜| 123草逼网| 春色激情| 久久这里只精品66| 射久久丁香五月| 亚洲视频在线网站| 丁香五月在线视频| Av九九| 丁香五月婷婷www..com| 欧美亚洲999| 色碰碰| 99re久热| 久久九九在线视频| 色五月激情网| 国产67194| 色女人久久| 日噜噜色| 婷婷五月激情欧美大胆视频| 思思99热| 91九九| 综合久久高清| 先锋资源婷婷| 亚洲综合激情五月| 操碰色一区就去操| 中文无码精品一区二区三区| 夜夜撸天天操| 97人妻人人| www.俺去也com| 国产亚洲精品AAAA片APP| www色婷婷| 久久精典| 99玖玖在线视频| 夜夜操天天干| 综合 蜜月 婷婷| 激情网综合| 校园春色亚洲色| 婷婷天天综合| 青草青草视频2免费观看| 玖玖99福利| 婷婷五月天福利| 色情五月丁香| 欧美丁香婷婷五月| 91成人品| 在线中文av| 激情五月天色网站| 91综合国免费久入| 99激情| 夜夜躁狠狠| 五月丁香五月婷婷| 九九99视频精品| 九九aV| 日韩欧美一区二区三区四区| 9久热| caopeng超碰| 欧美婷婷| 狠狠操天天操综合| 中文字幕乱码亚洲精品一区| 五月情综合| 国产五月视频| 色婷婷狠狠久久综合五月| 玖玖婷婷免费| 婷婷五亚洲| 婷婷97C| 婷婷 色 丁香 夜| 欧美日韩国产一区二区| 99热思思| 91日本在线| 天天干夜晚夜操| 激情另类综合| 日本V在线观看不卡视频网站| 成人狠狠成人狠狠成人狠狠成人狠狠 | 日本91在线| 国产精品社区| 狼人久草| 丁香五月激情综合在线观看| 中国操逼99| 99热99色| 日韩精品一品二区三区的使用体验| 26uuu欧美宗合| www.sebowuyue| 色婷婷综合久久久久| 九九热亚洲中文在线观看免费| 日日干夜夜干| 69午夜成人影片| 丁香色色五月| 永久免费一区二区三区| 色婷婷导航| 久久视频在线视频| 99re最新地址| 大香蕉久久久久| 97人人干人人操| 日韩六六久久电影| 日韩美女在线视频19| 五月婷婷激情| 激情文学天天| av一区二区电影免费在线观看| 开心五月深爱五月| 色婷婷丁香五月| 婷婷激情五月综合丁| 成人 AV播放| 91精品久久久久久| 激情五月天综合图片小说网站| 激情5月婷婷| 视频一二区| 色婷婷六月性| 在线一起草av| 六月丁香久久| 五月综合激情综合久| 97五月天婷婷综合激情网| 色色色色色色色色综合网| 成人网丁香五月| 婷婷丁香五月天影院 | 色色婷| www一区二区三区| 九九热自拍| 国产精品一区在线观看你懂的| 六月丁香VA| 99热啪啪| 色在线免费观看| 99re思思热久久| 天天干天天色天天干| 啪啪日本欧美| 美女五月天| 五月天婷婷激情春色小说| 亚洲综合视频网| 欧美成人AAA片一区国产精品| 欧美va在线| 五月丁香六月婷婷,婷| 亚洲啪啪自拍| 激情综合五月丁香| 夜夜夜夜撸夜夜操| 色五月之第四色| 久久婷婷亚洲无码一起| 精品色色| 婷婷射丁香| 秋霞影音91人妻久久| 欧美三级欧美一级| www.久久久久久久久久.com| www.minyis.com【JT】实力收量可预付QQ2101460746 | 亚洲正能量欧美| 狠狠干婷婷| 五月人妻婷婷视频| 激情五月天之五月婷婷| 激情视频网址| 五月天婷婷在线AN| 丁香五月视频在线观看| XX久久| 99久热在线精品99re6热| 久久久久这里只有精品| www.五月.com| 丁香六月天婷婷色| 91色五月| 人人干女人| 婷婷婷婷午夜| 五月婷婷激情综合| 久热91| 婷婷丁香18| 婷婷激情五月综合在线视频| 色九月| 99热精品网| 99久久国产综合精品五月天喷水\| 五月亭亭直播| 天堂色婷婷| 色久五月天| 区区久久妻| 色碰干| 九九九九成人| 成人免费超碰| 少妇真实被内射视频三四区| 五月婷婷六月丁香综合在线| 天天色天天日| 操逼棍操逼| 婷婷五月天激情亚洲小说| 亚洲综合在线伊人婷| 久草五月婷婷| 99热全是精品| 99热很操老逼| 九色亚洲| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 色五月色综合| 激情com| 成人看片网站| 人妻久久婷婷| 久久99综合网| 婷婷色偷拍| 日本综合99| 人妻丰满精品一区二区A片| 色丁香五月| 91爱啪啪| 久草视频一,二三四| 久久综合中文字幕| 日本色五月| 99视频在线观看视频| 婷婷丁香一月| 亚洲视频在线观看99| 亚洲精品va| 99热久| 99这里只有精品视频免费| 操碰99| www.91AV.COM| 香蕉伊人综合| 丁香色影院| 国产亚洲99久久| 玖玖婷婷视频| 久操干| 一起草无码| 亚洲啪啪精品| 五月天基地| 欧美婷婷精品激| 日本色久| 婷婷久久丁香五月| 久热91| 日本色色图| 五月色婷婷在线观看| 天天舔天天插天天爱| 精品无码色| 五月色 亚洲| 就爱干 在线| 99这里是精品| 五月情色天| 99色综合网| 色五月婷婷狠狠撸| 激情五月丁香在线观看直播| 天天色色婷婷| 国产色色色色| 五月综合视频| 色吧婷婷| 色播五月| 99网| 淫视馆av三区| 综合 蜜月 婷婷| 综合久久久| 综合色99| 激情网第四色| 久久久精品人妻录| 97好吊操| 狠狠色大香蕉| 91丨九色丨国产打屁股| 人人摸人人干| 色婷婷香蕉在线| 亚洲AV无码影院| 亚洲综合1024| 一區四區歐美日韓| 天天干天天操天天爱| 五月婷婷丁香五月天| 五月婷婷色综图片| 激情久久久| 五月天婷婷婷| 五月色情婷婷| 激情伊人| 99色看这里只有精品| 天天操夜夜橾| 偷偷操99| 26uuu欧美| av免费在线观看0| 激情六月天婷婷| 日本女va| 曰日爽日日操| 日日干天天射| 中文成人在线| 亚洲四色五月| 五月综合视频在线| 亭亭五月天黑人2014| 香蕉婷婷色五月| 日日爽夜夜爽| 五月丁久久| 丁香五月婷婷av| 色婷婷丁香六月| 色综合色综合色综合色综合| 亚洲中文字幕网| 91嫩草国产线观看亚洲一区二区| 91婷婷五月丁香碰| 99色最新在线视频| 久久视频这里99| 99这里只有| 在线免费视频caop| 丁香五月婷婷啪啪啪| 操逼福利视频| 久久3p| 成人无码精品1区2区3区免费看| 婷婷综合一二三| 五月丁香久久网| 婷婷在线激情| 狠狠色综合网| 金品在线视频99| 天天日日人| 六月激情网| 思思热在线| 色丁香五月| 丁香婷婷五月天色播| 激情丁香图片| 五月色丁香| 国产操B| www.99热日韩.com| 99re思思久久| WWW.国产| 五月婷婷色播| 狠狠五月激情婷婷直播片| 日本久热| 超碰在线资源| 开心婷婷五| 熟女网站久久| 97日本在线播放| 丁香六月天婷婷在线| 亚洲热视频| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 五月婷婷基地| 国产精品国产| 欧美婷婷五月| 五月天婷婷社区| 婷婷的色色五月天| 五月丁香色婷| 五月丁香色色网| 亚洲免费观看高清完整版AV线| 五月综合激情综合久| www.99色| 婷婷九色| 性色99| 99视频| 99色色热热| 成人丁香色| 9色天堂| 久久一二三视频| 天天日,天天干,天天操| 综合性爱网| 丁香五月综合在线观看| XX色综合| 五月激情丁香五月| 久久东京热婷婷五月| 婷婷五月在线| 国产乱妇乱子伦| www.婷婷| 综合五月天亚洲婷婷| 99热免费精品| 4399伦理午夜| 丁香五月婷婷激情蜜桃| 综合色、色综合| 99热免费网站| 思思re99视频在线观看| 久久jiuwww| 99热精品中文字幕| 啪啪日热| 婷婷五月天亚洲图片| 97人人操人人干| 99er6免费视频热播| 国产VA亚洲VA96| 色色9 9| 久草五月| 国产亚洲99久久精品| 碰碰91| 99热1| 久久丝袜婷婷| 殴美综合激情五月天免费视频| 青青草网武则天| 激情五月天激情综合网| 影音先锋秋秋五月婷婷| 色丁香在线视频| 亚洲欧洲中文日韩久久AV乱码 | 六月婷综合| 五月色婷婷AV| 亚洲激情四射色| 森林影视大全,最好看的2019年视频 | 九九精品在线观看视频6| 操97在线观看| 日本性激情色播| 91九色PORNY肉丝在线| 亚洲精99| 51精品国自产在线| 久久99色色| 密着浓厚中出乚交尾GvG935| 五月天婷婷丁香蜜桃91| 日逼影音先锋男人AV资源站| 五月丁香va| 欧美三级巜人妻互换| 伊人六月丁香婷婷| 色婷青青| 思思热久久爱| 99热一本| 久久九九热视频| 综合婷| 五月天丁香成人社| 97影院一级片| 久久婷婷成人综合色怡春院| 草草视频91| CHINESE熟女老女人HD视频| 亚洲综合欧美色丁香婷婷888月图片| 激情九月婷婷| 可以直接看的av| 精品日本视频444| 丁香五月激情六月欧亚激情综合导航| 婷婷六月丁香欧美视频在线| 丁香五月婷婷天激情| 99re熱| 五月天丁香综合| 日本情色一区二区| 亚洲婷婷激情五月天| 91操人| 久久这里都是精品免费| 99这里只有精品| 久热re在线视频| 色综合久久88色综合天天| EEUSS鲁片一区二区三区| 九九热这里只有精品23| 国产亚洲精品久久一区二区三区| 超碰无码老师| 久久性爱网站| 国产无套精品一区二区| 久久这里这里有精品免费视频| 久久久区区一久久久久久| 九九热这里只有精品7| 国产免费一区二区三州老师F1F1| 国产操B| caopeng97日韩| 婷婷射综合| 九月综合| 9久热免费视频99| 天天透天天干| 五月天激情无码| 91大屁股在线| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪| 欧美激情综合| 99热这里只有精品10| 99热超碰| 婷婷激情丁香五月婷婷激情丁香五月婷婷 | 亚洲精品第一国产综合亚AV| 另类婷婷丁香| 欧美精品XXXXBBBB| 丁香婷婷五月天校园春色| 99爱精品| 丁香五月六月久久综合| 亚洲成人网站在线观看| 99久久久久| 国产成人网站在线观看| www超碰| 天天色播| 丁香丁香激情网| 亚洲中文字幕网| 六月伊人婷婷| 99色在线观看视频者| 天天舔天天摸天天透| 九九久99免费视频| 丁香婷婷色五月| 少妇婷婷五月天| 五月婷婷丁香五月 | 日日噜噜夜夜狠狠久久丁香六月| 狠狠色婷婷7777久综合| 六月激情网| 97AV在线视频| 思思热视频| 国产综合激情五月久久| 不卡在线超碰| www.狠狠艹| 五月丁香久人妻中文| 99色色网| 婷婷五月天.com| 91男同视频| 亚洲无码色色| 97干综合网| 婷婷久久综合久| 婷婷五月天深爱| 色www99| 国产激情在线| 丁香五月婷婷啪啪啪| 久久九色| 五月丁香色婷婷综合| 色停停影院五月天| 黄网免费看| 日韩婷婷五月| 青草视频在线观看视频| 五月天天天色| 91婷婷色 | 婷婷五月天激情综合深爱激情| 成年视频免费观看| 婷婷六月丁香五月| 婷婷五月天视频小说| 狠狠色婷婷7777久综合| 色婷婷五月天在线观看| 99久久成人| 九九av在线| 色情五月丁香| 狠狠狠人妻| 97人妻碰碰碰久久久久-最近国语高清| 六月色播| 激情五月亚洲综合网| 狠狠色大香蕉| 色婷婷小说网| 欧美成人A片AAA片在线播放| 超碰三级片| 嫩草AV久久伊人妇女超级A| 久久这里只有精品热在99| www九九热| 五月 婷 久| 婷婷五月激情欧美| 九九视频精品在线免费| 六月丁香色色| 午夜天堂一区人妻|