久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

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

OpenBMC服務(wù)移植到AMI固件:跨生態(tài)BMC適配實(shí)戰(zhàn)指南 1. 項(xiàng)目概述這不是簡(jiǎn)單的代碼遷移而是一次跨生態(tài)的“器官移植”O(jiān)penBMC 是當(dāng)前服務(wù)器固件管理領(lǐng)域事實(shí)上的開(kāi)源標(biāo)準(zhǔn)它用 Linux systemd D-Bus 構(gòu)建了一套可裁剪、可擴(kuò)展、可測(cè)試的基板管理控制器BMC軟件棧。而 AMIAmerican Megatrends Inc.則是全球主流 BIOS/UEFI 固件供應(yīng)商之一其 Aptio V 和 Aptio VI 代碼庫(kù)廣泛用于 x86 服務(wù)器主板特點(diǎn)是高度模塊化、強(qiáng)硬件抽象、深度綁定 Intel PCH/SPD/PECI 等底層總線協(xié)議。ACDAdvanced Control Daemon是 AMI 自研的一套運(yùn)行在 BMC 上的輕量級(jí)服務(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 或精簡(jiǎn) Linux 內(nèi)核上。把 ACD 從 OpenBMC 環(huán)境“porting”到 AMI codebase表面看是“把一個(gè) daemon 搬過(guò)去”實(shí)則涉及三重解耦與重構(gòu)第一層是運(yùn)行時(shí)環(huán)境解耦——OpenBMC 基于完整的 systemddbusglibc 用戶空間而 AMI codebase 中的 ACD 運(yùn)行在無(wú) systemd、無(wú) dbus-daemon、甚至無(wú)完整 libc 的受限環(huán)境中第二層是通信機(jī)制解耦——OpenBMC 下 ACD 通過(guò) D-Bus 接收 IPMI/Redfish 請(qǐng)求并廣播傳感器事件AMI 環(huán)境中它必須對(duì)接 AMI 自有的 IPC 機(jī)制如共享內(nèi)存 Ring Buffer 事件中斷通知第三層是硬件抽象解耦——OpenBMC 使用 sysfs udev hwmon 驅(qū)動(dòng)模型讀取傳感器AMI 則通過(guò) PECIPlatform Environment Control Interface直接與 CPU/SoC 通信或調(diào)用 AMI 提供的 SIOSuper I/O驅(qū)動(dòng) API 訪問(wèn) BMC 芯片寄存器。我做過(guò)三次類似移植一次是把 OpenBMC 的 fan-control service 移入 AMI Aptio V另兩次分別是將基于 libipmi 的 sensor daemon 和基于 libredfish 的 event forwarder 移入 AMI 的 BMC firmware layer。每一次都踩過(guò)坑——不是編譯不過(guò)而是“跑起來(lái)但不工作”。比如第一次移植后風(fēng)扇全速狂轉(zhuǎn)查了三天才發(fā)現(xiàn) AMI 的 PWM 控制寄存器 bit 定義和 OpenBMC 默認(rèn)的 hwmon pwmN_enable 不一致0x1 表示“關(guān)閉”而非“啟用”而 OpenBMC 的驅(qū)動(dòng)默認(rèn)寫(xiě) 0x1 啟動(dòng)第二次移植后 PECI 溫度讀數(shù)始終為 0最后發(fā)現(xiàn) AMI 的 PECI driver 在初始化時(shí)未使能 CPU Package Thermal Sensor 的 THERMTRIP# 中斷掩碼位導(dǎo)致 sensor 數(shù)據(jù)鎖存失敗。這些都不是文檔里寫(xiě)的是燒板子、抓邏輯分析儀波形、反匯編 AMI driver bin 才定位出來(lái)的。所以這個(gè)項(xiàng)目標(biāo)題里的“porting”絕不是 git clone make install 那么簡(jiǎn)單。它本質(zhì)是一次對(duì)固件生態(tài)邊界的測(cè)繪你得先搞清 AMI codebase 的“呼吸節(jié)奏”——它的啟動(dòng)時(shí)序、內(nèi)存布局、中斷分發(fā)路徑、驅(qū)動(dòng)加載順序、IPC 通道注冊(cè)時(shí)機(jī)再把 ACD 的“心臟節(jié)律”狀態(tài)機(jī)、定時(shí)器精度、事件響應(yīng)延遲調(diào)諧到同一頻率上。適合兩類人參考一是正在做國(guó)產(chǎn) BMC 固件適配的工程師需要理解如何把開(kāi)源生態(tài)能力注入閉源 BIOS 棧二是 AMI OEM 廠商的固件集成工程師正面臨客戶要求“在現(xiàn)有 BIOS 上快速支持 Redfish 風(fēng)扇策略”的壓力需要一套可復(fù)用的移植方法論。2. 整體設(shè)計(jì)思路放棄“復(fù)制粘貼”堅(jiān)持“接口重定義”很多人一上來(lái)就想把 OpenBMC 的 ACD 源碼整個(gè)拷進(jìn) AMI 工程目錄改個(gè) Makefile 就編譯。結(jié)果十有八九卡在 linker 階段undefined reference todbus_connection_open、sd_event_loop、udev_device_get_syspath……這些符號(hào)在 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而是定義一套輕量級(jí) IPC 協(xié)議使用固定大小的共享內(nèi)存塊4KB前 16 字節(jié)為 header含 sequence number、timestamp、command type后續(xù)為 payload。AMIBIOS 啟動(dòng)后由 BMC firmware 初始化該內(nèi)存區(qū)并注冊(cè)一個(gè)中斷 handler如 GPIO#5 上升沿觸發(fā)當(dāng) host OS 或 BMC 應(yīng)用寫(xiě)入新 command 時(shí)觸發(fā)中斷通知 ACD。ACD 用 polling interrupt 混合模式監(jiān)聽(tīng)——每 10ms 主動(dòng) check header 的 sequence number 變更同時(shí)等待中斷喚醒兼顧低延遲與低功耗。中間層硬件訪問(wèn)接口重定義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 庫(kù)它內(nèi)部封裝了 PECI transaction如PECI_CMD_TEMP_READ、SMBus read如SMBUS_READ_BYTE_DATA、GPIO input sampling如GPIO_READ_PIN(GPIO_FAN_TACH)三種物理訪問(wèn)路徑。ACD 必須根據(jù) sensor 類型自動(dòng)選擇路徑——CPU 溫度走 PECIVRM 電壓走 SMBus風(fēng)扇轉(zhuǎn)速走 GPIO這需要在 AMI codebase 的 sensor config table 中預(yù)置 mapping rule。最內(nèi)層調(diào)度與生命周期接口重定義OpenBMC 下 ACD 由 systemd 管理Typenotify通過(guò)sd_notify(READY1)告知啟動(dòng)完成。AMI 環(huán)境中沒(méi)有 systemd我們實(shí)現(xiàn)一個(gè) mini-schedulerACD 啟動(dòng)時(shí)注冊(cè)一組 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ū)動(dòng)只響應(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兩個(gè)文件里編譯成靜態(tài)庫(kù)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 會(huì)自動(dòng)解析依賴并加入 link order。別試圖寫(xiě) Makefile —— AMI 的 build infra 會(huì)忽略它。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庫(kù)封裝調(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。問(wèn)題來(lái)了PECI_Read返回的 raw data 怎么轉(zhuǎn)換成攝氏度OpenBMC 的libpeci里是temp (data[0] 8 | data[1]) * 0.0625但 AMI 的 datasheet 明確寫(xiě)著“PECI GET_TEMP response is 16-bit signed integer, LSB 1°C, offset 0°C”。也就是說(shuō)AMIBIOS 的 PECI driver 返回的是整數(shù)攝氏度無(wú)需乘 0.0625。我第一次移植時(shí)沒(méi)注意這個(gè)差異ACD 把 75°C 讀成 1200°C觸發(fā)了錯(cuò)誤的高溫降頻策略。更隱蔽的坑是 PECI transaction timeout。OpenBMC 默認(rèn) timeout 是 100ms而 AMI 的PECI_Readtimeout 參數(shù)是PECI_TIMEOUT_MS定義在peci_config.h里出廠值是 50ms。但某些老舊服務(wù)器平臺(tái)如 C620 芯片組的 PECI bus 時(shí)序裕量小50ms 經(jīng)常 timeout。解決方案不是改全局 timeout會(huì)影響其他 PECI 功能而是在 ACD 的 sensor poll task 中做 adaptive retry首次調(diào)用PECI_Read失敗后sleep 10ms再調(diào)用一次最多 retry 3 次。實(shí)測(cè)下來(lái)99% 的 timeout 都發(fā)生在第一次retry 后成功。還有一個(gè)硬件級(jí)陷阱PECI bus 的 pull-up resistor。AMIBIOS 的 PECI driver 假設(shè) bus 上有 4.7kΩ 上拉電阻但某些 OEM 主板為了省料用了 10kΩ導(dǎo)致 signal rise time 超標(biāo)。現(xiàn)象是PECI_Read偶發(fā)返回 0xFF 0xFF。解決方法是在 ACD 初始化時(shí)加一個(gè) bus health check連續(xù) 5 次PECI_Read(0x30, 0x00, data, 1)GET_CAPABILITY如果失敗率 60%則打印 warning log 并切換到 fallback sensor source如 SIO chip 的本地溫度傳感器。這個(gè) check 必須在 ACD 啟動(dòng) 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)存 中斷完全替代但必須解決三個(gè)關(guān)鍵問(wèn)題原子性、序列號(hào)、超時(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;原子性保障不能簡(jiǎn)單用seq_num變更判斷新命令到來(lái)因?yàn)?write memory 和 writeseq_num不是原子操作。正確做法是雙 buffer toggle bit。我們分配兩塊 4KB 內(nèi)存ipc_buf_a和ipc_buf_bheader 第一個(gè) byte 是toggle_bit0 or 1。writer 先寫(xiě) payload 到ipc_buf_a.payload再寫(xiě)ipc_buf_a.toggle_bit 1reader 檢查ipc_buf_a.toggle_bit 1則讀取然后寫(xiě)ipc_buf_a.toggle_bit 0。這樣避免 reader 讀到 half-written payload。序列號(hào)防重放seq_num不僅用于 detect new command還用于 client 端匹配 response。ACD 處理完setSpeed后會(huì)把 result 寫(xiě)入另一塊 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 語(yǔ)義。超時(shí)處理client 端發(fā)起 call 后啟動(dòng) watchdog timer500ms。如果resp_buf在 timeout 內(nèi)未更新client 主動(dòng) cancel request寫(xiě)req_buf.cmd_type CMD_CANCELACD 的 interrupt handler 檢測(cè)到 cancel 命令清理 pending state。這個(gè)機(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 會(huì)殘留 garbage data導(dǎo)致 ACD 解析出錯(cuò)。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每個(gè) thread stack。ACD 作為BMC_App的一部分必須全部放入RAM_CODE區(qū)域因?yàn)?BMC 的 RAM 很小通常 ≤ 2MB且RAM_CODE是 cache-coherent 的適合跑實(shí)時(shí) task。陷阱在于OpenBMC 的 ACD 大量使用malloc()動(dòng)態(tài)分配內(nèi)存而 AMI 的BMC_App禁用 heap ——malloc是 stub function永遠(yuǎn)返回 NULL。解決方案是pre-allocated object pool。我們?cè)赼cd_init()里一次性 malloc 16KB足夠容納 128 個(gè) sensor object 32 個(gè) 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 更靈活。另一個(gè)致命陷阱是stack overflow。OpenBMC 的 ACD 默認(rèn) stack size 是 8MBLinux process而 AMI 的BMC_Appthread stack 是 4KB。ACD 的fan_control_task()里有個(gè) 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)—— 這個(gè) 8192 是 AMI 的 magic number表示給該 timer callback 分配 8KB stack。4. 實(shí)操過(guò)程從零開(kāi)始構(gòu)建 AMI ACD 工程的七步法4.1 步驟一環(huán)境準(zhǔn)備與 AMI SDK 獲取AMI 不公開(kāi) SDK download必須通過(guò) OEM portal 申請(qǐng)。你需要提供公司營(yíng)業(yè)執(zhí)照、產(chǎn)品型號(hào)、BIOS version、contact person email。審批通常 3-5 個(gè)工作日。拿到的是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 識(shí)別 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 會(huì)自動(dòng)掃描并加入 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 重寫(xiě) 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ù)然后通過(guò)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常見(jiàn)報(bào)錯(cuò)及解決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)證燒錄后通過(guò) 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 測(cè) 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。我遇到過(guò)一次詭異問(wèn)題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()開(kāi)頭加AMI_DisableInterrupts()結(jié)尾加AMI_EnableInterrupts()確保 IPC 處理原子性。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄5.1 PECI 讀數(shù)為 0 或恒定值的 5 種原因及定位法現(xiàn)象可能原因定位方法解決方案PECI_Read返回 0xFFFFPECI bus 信號(hào)完整性差上拉電阻過(guò)大/PCB trace 長(zhǎng)度超標(biāo)用示波器測(cè) 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 中開(kāi)啟或調(diào)用AMI_EnablePECI()PECI_Read返回固定值如 0x00C8200°CCPU Package Thermal Sensor 被 disable讀取 CPU MSRIA32_PACKAGE_THERM_STATUS(0x1B1)bit 0 是否為 1在acd_init()中寫(xiě)MSR_IA32_PACKAGE_THERM_STATUSbit 0 1PECI_Read偶發(fā) timeoutPECI timeout 設(shè)置過(guò)短修改peci_config.h中PECI_TIMEOUT_MS為 100重編譯不推薦全局改應(yīng)在 ACD 中做 adaptive retryPECI_Read成功但溫度異常PECI response scaling 錯(cuò)誤對(duì)比 AMI datasheet 和 OpenBMC libpeci 的 scaling factor嚴(yán)格按照 AMI spec不做任何 scaling實(shí)操心得PECI debug 的黃金組合是示波器 AMI JTAG Debugger CPU datasheet。我用 Saleae Logic 8 測(cè) PECI bus發(fā)現(xiàn)某款主板的 PECI DATA line 有 200mV noise floor導(dǎo)致PECI_Read誤判 start bit。加一個(gè) 100nF decoupling capacitor 到 PECI connector pin 3GND和 pin 4DATA之間問(wèn)題消失。5.2 IPC 不生效的 3 個(gè)隱藏雷區(qū)內(nèi)存 cache coherency 未 flushAMI 的BMC_App運(yùn)行在 ARM Cortex-A53 上有 L1/L2 cache。writer 寫(xiě)ipc_buf_a后reader 可能讀到 stale cache data。必須在 writer 寫(xiě)完后調(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 配置錯(cuò)誤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否則訪問(wèn)ipc_buf_a會(huì)觸發(fā) MMU faultACD crash。5.3 編譯報(bào)錯(cuò)fatal error c1083的
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91M一社| 91色女| B049AV在线播放| 亚洲国产成人精品久久久国产成人一区二区 | 久久性爱视频免费看| 日本护士高潮| 一级免费精品| 国产精品一区二区黄片| 综合网亚洲在线| 美女黄频a美女大全免费皮| 少妇69中文| 国产精品女aA片爽爽视频| 久色网| 少妇无码999| 五月天色图| 熟妇女伦乱视频视频| 伊人久久大香线蕉无码| 日本一级不卡一二区| 插穴性爱视频在线观看| 搡老女人老91妇女熟女| 五月丁香社区婷婷日韩欧美精品影院 | 亚洲日本成人动漫| 久久久97| 在线小说视频一区| 蜜乳AV色欲AVAV无码| 日本精品一区二区三| 国产a级午夜毛片| 97精品一区| 99综合| 女性91网站| 一牛影视久久久一区二区三区| 欧美影院一区二区三区| 天天天做天天天爱天天天爽| 超碰在线91| 一区二区影视| 日韩欧亚太美不卡| 波多野结衣先锋影音| 一区二区三区在线日韩影院观看| 久久99精品视频| 国产精品久久久亚洲第一牛牛_在线观看 | 992视频一区| 欧美色五月| 天天干18禁| 男人兔费天堂| 久久精品国产AV一区二区三区| 欧美高清在线| 五月天激情小说网| 中文字幕日韩专区精品系列| 久久人妻无码毛片A片麻豆| 五月丁香激情综合网| 亚州综合网| 九九九精品一区二区无码| 日本岛国黄色网址| 亚洲午夜福利在线影院| 国产精品久久久久久久久久久久久久| 一区二区 电影 亚洲| 国产精品无码在线| 日产操逼| 色九色久| 欧美亚洲一区二区久久久婷精品大包诱| 亚洲国产ⅴ高清在线观看| 久久9精品网站| 亚码激情| 综合久久六月久久婷婷| 久久一二三四| 久久久久久久9最新免费视频观看| 亚洲少妇色| 欧色综合| 国产精品免费视频人成| 另类欧美色| 高跟伊人julia ann| 亚洲 欧美日韩 另类| 午夜αv| 亚洲鸥美色图| 观看免费区二区三区二| 亚洲美女自拍偷拍视频| 免费视频在线一区二区不卡| 久 久无码人妻AV| 日本高清加勒比| 欧美九九爱| 免费中文在线| 高清无码一区二区三区| 亚洲色图欧美| 78精品在线| 四虎国产成人精品免费一女五男| 老鸭窝亚洲毛片| 日本肏逼视频在线观看| 岛国AB视频| 日本精品五区| 可乐操亚洲蜜911| 人妻在线大香蕉| 伊人天堂在线| 久久久久久久人妻| 香蕉人人操tv| 久久黄色性爱视频| 偷拍 欧美 日韩| 婷婷8月天青娱乐| 天天摸夜夜操视频| 日韩AV中文字幕电影| 久久久久免费少妇| 亚洲中文字幕精品久久久久久直播| 在线人成亚洲视频免费观看| 国产成人在线观看网址| 欧色网址| 国产sv美女内射| 超碰在97| 国产精品3| 爱啪精品一区| 亚洲高清视频在线观看| 美女露胸露屁股| 日本熟妇一区二区三区| 婷婷伊人| 色五月网址| 手机在线观看不卡无码av| 亚洲无码超碰免费| 翔田千里无码一区| 日本在线观看网址| 制度丝袜99| 亚洲欧美日韩免费电影| 国产精品视频自拍在线| 小日子操bb在线看| 无码人妻精品一区二区中文| 在线强奷到舒服的无码视频| 国产一级作爱毛片| 天天做天天爱| 亚洲色图激情小说| 九九无码久久精品视频| 大香蕉免| 爱爱动态试试看6 0秒| 亚洲中文人妻色| 艾草av| 亚洲精品国产av天美传媒| 女一区二区| 国精综合一二三区影视| 亚州熟妇精品| 九草九九九| 婷婷九月丁香| 女人香蕉久久毛毛片精品| 久久久精品九| 97精品一区二区三区免费| 91色香| 亚欧色图在线激情| 国产多人在线观看视频| 日本人人操人人操| 日韩三级一区| 国产极品久久久| 亚洲国内精品成人不卡| 国内精品99999| 在线视频97| 国产精品日本无码A片| 亚洲āv网址在线观看| 18禁精品网站在线看| 日韩人妻中文视频| 亚洲丁香花色| 国产青视频| 久操| 欧美视频一| 国产理论视频在线播放| 亚洲色图大香| 日韩在线97| 日日骚av| 正在播放国产精品一区| 中文字幕在线免费观看视频| 亚洲高清内射| 男人的天堂免费| 日韩性爱视频在线免费观看| 色妇91| 色欧美在线| 立川理惠被中出无码| 亚洲囯产精品女人久久久| 国产精品亚洲免费| 精品一区96| 无码操逼天堂| 亚洲国产丝袜熟女av| 奇米四色影视777久久久| 国产午夜激片Av毛片不卡| 欧洲色色| 99热国产| 久久精品国产亚洲AV高清演员表| 亚洲欧洲另类| 亚洲欧洲无码一区夜| juliaann丝袜| 日韩性爱再线视频| 亚洲中文字幕日产无码久久| 91丝袜人妻| 又大又长又粗又爽又黄| 人人喜人人妻| 美女t无毒不卡不卡| www熟女乱伦com| 五月婷婷丁香| 蜜乳av一区二区三区四区不卡| 五月天亚洲色图| 国产亚洲禁久一区二区| 97天天操天天干| 欧美性91| 丁香九月婷婷| 色网亚洲人| 中文字幕精品一区欧美| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 91久| 日本道久久综合色色| 91中文精品日韩欧美在线 | 3PAV乱伦视频| 久久午夜伦| 91痴汉| 91精品女厕偷拍视频| 麻豆黄色五月天| 日韩精品亚洲一二三| 国产精品爽爽v| www鬼畜国产男人的天堂| 国产中文字幕在线观看| 日本精品无码三级网站| 欧美猛交黑寡妇中文字幕| 国产精品美女| 旡码电影特区| 女人久久久| 久热免费视频| 欧美综合天堂| 操人无码| 啊啊啊草死我| 精品十三区| 久操91视频| 精品国产一区二区久久| 久久激情婷婷| 啪啪91| 久久久亚洲熟妇熟女| 色一情一乱一乱一区91Av| 九草九九九| 看日韩操逼| 超碰97导航| 91爆操视频| 久久精品国产久精国产| 亚洲最大AV网| 久久精品六区| 久久综合激情| 综合少妇网| 亚洲日本韩国在线| 欧美色九九| 亚洲高潮少妇| 大JI巴好深好爽又大又粗视频| 国产超碰国产97| 天天综合亚洲综合| 亚洲免费日韩在线一区二区| 涩涩这里只有精品视频| 亚洲AV不卡在线观看| 搡老熟女老女人老熟妇免费视频| 久久超碰日韩精品| 亚洲情色在线| 免費黃色視頻觀看一| 欧美日本不卡在线| 69AV女优男人的天堂| 国产精品女aA片爽爽视频| 黄色二级片网站| WWW操逼| 欧美日韩国产人人| 日韩无码专区| 曰韩中文人妻视频| 日韩 成人 有码| 91精品人妻电影| 久久久一二三四区| 亚洲美乱| 亚洲精美粉嫩嫩泬在线观看 | 男人把坤坤插入女人的下体| 九色婷婷| 老熟女乱伦片| nuu12国产麻豆精品| 欧美激情五月天| 操国产高清| 麻豆国产第一| 爱射综合| 午夜偷拍久久熟女| 亚州91| 欧美操逼视频二区| 五月婷婷色| 伊人操你| 国产路线专区| 狠色婷婷久久一区二区三区_| 蜜乳性色无码专日粉嫩骚逼AV| 精品人妻一区二区三区四区| 精品国产网站| 成人三级片无码| 久久AV无码AV| 久久风骚城市| 夜夜国产一区| www.色婷婷| 午夜福利1区2区3区| 精品国产乱码久久久影院| 国产精品老熟女一区二区| 国产日韩精品人妻久久久久色欲网站| 91天堂网| 91四海无码日韩欧美| 免费看污网站| 色婷婷99| 粉嫩绯色AV一区二区在线| 97亚洲欧美| 国产自啪精品视频网站黑丝| 精品国产91久久久久久一区黄无| 婷婷久草| 欧美日韩性爱视屏免费看了| 2018天天日天天日| 久久伊人影院| 色69大色97香蕉| 久久只有精品一区二区三区| 狠狠穞A片一區二區三區| 亚洲欧美在线观看无码| 亚洲欧美色图片| 果冻传媒一区二区三区| 亚洲欧洲色情高清| 日本三级日本三级三级人妇四虎| 色999亚洲人成色| 国产传媒操逼视频| 午夜福利1区2区3区| 97这里只有精品| 嗯嗯不要 视频| 综合激情一一91| 欧美激情视频一区二区三区不卡| 大稥蕉免费视频这里只有精品| 亚洲偷拍自拍在线视频| 狠狠中文字幕| 91精品久久久| 国产女s强制榨精视频| 亚洲开心网| 亚洲色婷婷综合久久久久中文| 97热视频在线观看| 青青伊人久久| 亚洲宗合网| 国产久久日| 国产第11页| 97频视在线| 欧洲精品一区二区三区| 另类亚洲图色| 天堂精品小草| 污污污8888| 99热精品国产| 人妻 制服 日韩 中文 在线| 丰满搜索结果 -第18页- 久久高清无码| 97久久久久久久精| 亚洲情色91| 97久久久久久久精| 少妇免费视频| 欧美日韩淫加| 久久精品视频在线观看| 九区国产| 亚洲一二三四区在线免费看视频| 五月天欧美色图| 日日嗨AV一区二区夜夜| 91碰碰| 中文字幕精品专区搜索结果91| 久久久噜噜噜久久人妻| 91色人| 91美女精品| 人妻欧美| 婷婷久久五月| 亚洲欧美经典一区二区| www色色com| 欧苏综合色综合| 婷婷成人久久久精品| 久久综合乱子伦国产免费| 热久久精品| 爆乳免费黄网站| 国产SV一线| 2026国产精品视频| 欧美色九九| 中文字幕在线免费观看 | 天堂综合网| 亚洲精品九九九| 国产一级内射高清视频| 人人摸.人人色| 国产一级作爱毛片| 欧洲综合视频| 97一区二区三区视频| 亚洲天堂电影网| 综合五月天| 毛片一区二区| 看黄片视频免费| 国产67194| 一二三啪啪专区| 国产精品丝袜久久亚洲不卡| 麻豆天天躁天天揉揉AV| 女人综合网| 人人妻人人爽 97人人看碰人免费公开视频| 欧美性爱三区二区| 天天影视网综合少妇| 91九九九小逼| 大香蕉伊人75| 国产精品成人久久一区二区三区| 我要看免费韩日黄片| 97综合在线观看| 青青草玖玖爱| 91天天综合网| 在线观看精品国产免费| 四虎AV无码| 少妇丝袜在线观看AV| 97在线免费视频观看| 自怕偷自怕亚洲精品| 久久曰曰| 91天天爱| 日本精品一区二区三区四区的功能| 免费一级a毛片久久久久久鸭绿欲| 色色色色综合网| 操b网站亚洲无码| 麻豆一区二区AV天美| 欧美性爱日韩高清| 91校园春色长篇| 亚洲综合性网址| 麻豆成人AV| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 亚洲色欧美| 福利伊人玖玖国产| 色诱avtt| 屁股久久久久久| 精品亚洲国产成人AV制服丝袜| 亭亭丁香激情| 亚洲人久久久久日| 97人人模人人爽人人| 今日头条成人一区二区三区四虎精品| 天天92av| 亚洲色五月| 欧美色图99| 操逼啊啊啊91| 超碰地址97| 在线日韩精品一区二区三区| www.色婷婷| 亚洲激情深爱文学小说网站| 天堂а√在线最新版在线| 亚洲天天艹| 男人的天堂视频精品乱在线| 韩国午夜理伦三级好看| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 久久这里只精品99re66图| 色欲人妻一区二区在线| 欧美一级黄色免费专区| 又黄又爽在线观看视频 | 久草精品国产99| 人妻久久久久久久久久久久久久久| 日本熟妇自慰性高潮一区二区三区| 成人无码在线超碰网| 日本天堂网| 91色图| 亚洲欧美精品一区天堂久久| 亚洲第一页色网| 亚洲欧美成人在线| 夜夜嗨一区| 久久久国产成人一区二区三区在线| 校园春色综合香蕉| 少妇3P性爱自拍| 欧美一级专区免费大片| 777AV电影| 九九九九九九九九九五码| 久久久久亚洲av综合波多野制衣| 狠狠图片青青草| 一区不卡在线观看av| 欲色影视综合吧| 久久性爱视频99| 欧洲亚洲人妻无码中字久久三区四区 | 精品无码一二三四区| 亚洲欧洲av影音| 欧美成人亚洲精品| 日韩性爱视频在线免费观看| 夜夜 中文视频rt| 国产高清26uuu| 亚洲清纯唯美| 日本女人操逼| 资源新线在线天堂| 熟妇人妻一区二区三区| 高潮毛片无遮挡高清免费| 做爱福利视频一区二区| 一,爱啪啪,在线免费视频| 久久人人爽av亚洲精品天堂桃色| 九九综合久久| 综合色一区三区二区| 97超碰jingpin| 日韩激情电影中文字幕| 欧洲亚洲人人爽爽视频| 色色五月天激情| 综合久久9| 国产精品午夜成人福利| 国产不卡免费在线视频| 天天操福利视频综合网站| 99性爱视频| 富女玩鸭子一级毛片| 欧美午夜视频| 狠狠色综合网| 亚洲 小说 欧美 激情 另类| 91伊人久久在线| 亚洲男人的天堂亚洲| J?P?NESEHD熟女熟妇伦| 国产第11页| 日本中文字幕在线电影| 超碰成人人人爽人人爽| 亚洲大胆人体av| 美日韩成人| 日韩在线欧美精品一区二区| 久久久久久九九九九九九| 成人欧美一区二区三区黑人一| 日韩av无码网站| 亚州色阁| 精品夜夜澡人妻无码| 为用户提供免费看黄网址在线观看| 日韩毛片9| 精品人妻1237| 亚洲AV无码国产精品久久久久 | 北野未奈加勒比av| 韩国女主播青草福利视频| 中文字幕91页| 欧美精品宗合| 51一区二区三区| 超碰国产情侣自拍网| 午夜欧美女人操逼| 一区二区三区免费视频入口| 蜜臀久久99精品久久久久电影| 在线视频一区二区传媒| www.狠狠| 一级性爱aaaa| 精品国产91av一区二区三区| 91狠狠| 一本色道久久综合狠狠操| 少妇毛片久久| 日本天天操| 亚洲一欧洲中文字幕在线| 呦呦一区| 九九九九九九九九九国产精品| 97色涩| 丝袜夫妻自拍| 激情久久久| 午夜无码精品免费看性色| 国产一级高清免费观看| 久久精品区| 日韩无码久久熟女一级片| 中文字幕一区 二 区 三 四 五 区日 日 骚| 尤物一级在线免费观看| 性爱综合一区二区| 色99999| 美女好片色日本| 男人的天堂日韩| 高跟伊人julia ann| 天天色悠悠激情| 五月丁香婷婷色| 欧亚在线视频| 丰满高潮18xxxx| 一级黄色视频网| 強姦亂倫a| 国产 日韩 欧美一区| 97在线免费视频观看| 婷婷久久久精品| 亚洲日韩黑丝| 久久久草草精品| 欧美色图人妻| 国产女人9999| 日本免费一区二区不卡| 伊人 俄罗斯 a v| 久操操| 日韩人妻无码精品系列| 天天日日本| 天天操天天射青青草| 亚洲情色电影网| 日韩精品 资源| 久久久无码国精品无码三区三区| 色噜噜狠狠色综无码久久合欧美| 日本中文字幕在线电影| 色婷五月| 99色色| 国产丝袜视频| 天天摸天天插天天日| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 成人麻豆av电影网站| 亚洲天天做日日做天天谢日日| 欧美大波激情xxxx| 日韩亚洲精品一区二区| 亚洲最新中文字幕免费| 亚洲日韩国产欧美综合v| 国产黄色av大片网站| 91操人| 强免费黄色网址| 99操碰| AA特级绝黄| 91亚洲欧美综合高清在线| 久久熟女久| 男人的天堂不卡一区二区| 中文字幕精品区先锋资源| 欧美激色| 伊人色综合网电影| 不卡人妻少妇精品毛片一区23区视频| av网站免费线看| 国产乱弄免费在线视频。| 天天激情综合站| 色九九九综合| A片 AV一级在线播放观看免费| 玖色av| 婷婷五月天AV| 亚洲成人贴图| 婷婷五月天小说| 日本高清加勒比| 在免费jIzzjIzz在线视频| 热热色综合网| 无码WWW免费视频网站| www.婷婷| 国产91亚洲精品一区二区三区| 最新亚洲风情电影| 伊人久久大香线蕉无码| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 激情婷婷| 日欧操屄| 色哟哟精品1精品2| 亚洲午夜AV| 三级日韩一区二区三区| 肥佬影院91| 97精品一区二区视频在线观看| 天天操妹子| 久久这里只精品免费福利| 亚洲精品国产拍免费91在线| 十八禁黄色| 中文字幕一区二区三区字幕| 日本在线一二| 久久久精品中文字幕爱豆| 欧洲自拍色图gif在线| 天美传媒婬乱在| 狠狠综合网| 久久偷拍人| 久久精品91| 中文字幕高清精品一区| 五月天激情网图片| AV中亚| 日本久操视频| 日天天九九天堂666| 国产宅男宅女在线观看| 91丨九色丨43老版熟女| 国产青视频| 丝袜美腿91| 自拍偷拍 日韩欧美| 美女一区二区国产精品| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 精品国产久久乱码| WWW啪啪的com| 日韩人妻资源在线看| 天美欧美国产| 久久久久久中文字幕中文字幕最新| 女人综合网| 东北操逼| 内射中出日韩在线观看视频| 亚洲aV性爱| 一级AV性爱| 日韩图区| 午夜爽爽爽在线观看永久入口姬片| 麻豆影音天美视频| 特级特黄一级毛片免费| 丰满人妻一区二区三区| 久久久久久加勒比| 中文字幕天天操| 国产精品久久久久久久久久梁医生| 人妻干天天| 91暧暧| 丝袜AV一区二区三区| 激情综合五月| 久久中出在线| 91东京热男人的天堂| 综合色欧美| 97网址97| 国精综合一二三区影视| 97WW精品| 激情综合五月| 日韩欧美国产高清视频| 欧洲亚洲国产综合在线| 偷拍综合网| 成人三级片一区二区三区视频| 少妇丝袜在线观看AV| 青青操少妇| 成人精品电影| 夜色五月天| 亚洲人妻AV| 无码国产精品久久久久| 亚洲?V无码专区在线电影| 日韩97| 97碰碰色| 97久久久久| 大香蕉日韩欧美| 黄色一区三区| 欧美性综合| 九九九影院| 亚洲综合有玛| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 偷窥自拍A片| 久久精品国产亚洲AV无码做| 人人操我人人干| aaa亚无码专区| 91 欧美| 97爱综合| 久久久新亚洲AV| 欧美少妇色图| 97视频在线播放| 精品熟女呻吟久久91| 欧美高清色| 国产伦精品| 啊啊啊啊啊好多水| 亚洲综合在线第一页| 精品欧美乱码久| 久久免费9| 蜜臀久久99精品久久久久久婷婷| 久久国产精品m码| 日本午夜精品理论片A级APP发布| www欧美性爱| 青草av在线| 婷婷五月色| 激情网五月天| 混色激情av| 精品久久久中文字幕不| 亚洲最大的黄色电影网站。| 亚洲天堂另类小说男人| 久久久久久九九九九-美女久久久久久久-成人AV | 热久久无毒不卡| 麻豆色99999| 日本不卡一二区| 啊啊啊网站| 精品人妻视频入口| 丁香六月激情| 另类一区| 久久久久久国产精品| 久久久九97| 日韩AV一区二区三区三州三州| 久久偷拍人| 碰超人人在线一区二区三区| 欧美色图小说综合| 久夜操| 大肥女高潮bbwbbwhd视频| 欧美熟妇成人一区二区| 三级特黄60分钟播放| 中国国国产一级特黄毛片| 国产成人无码网站在线视频| 人妻少妇色综合| 成人AV素股で擦久久| 欧美天堂日韩三级国产传媒| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 深夜福利黄片| 中文字幕一区二区三区高清| 搡老熟女老女人老熟妇免费视频| 91 刺激在线| 97香蕉人人乳| 老熟妇一区二区三区| 蜜臀AV午夜精品久| 日韩免费三级黄片电影| 国产精品自在自拍视频| 久久精品国产精品亚洲艾通辽熟妇| 久草视频制服诱惑| 天天草AV| 国产女人视频三四五区| 欧美日韩国产另类综合| 国产高潮AA片免费看| 九九玖玖精品| 蜜桃臀一区二区aV| 欧美少妇色图| 久久亚洲AV无码专区国产精品| 超碰人人干| 少妇与黑人高潮在线| 视频在线中文字幕| 大香蕉伊利av| 超碰久久草| 欧洲亚洲少妇| 亚洲蜜乳av| 日本精品一区三区| 香蕉免费一区二区三区不读 | 97伪v| 999精品女人| 亚洲免费在线探花| 丁香六月综合激情| 1000午夜黄色| 亚洲精品久久久久久久蜜桃臀| 人人操人人摸人人看人人干| 很很干很很操| 天天拍天| 一级做受视频免费是看美女| 国产成人精品日本视频| 久久色激情一区二区三区| 女上位精品在线| 成人性爱免费播放| 色人久久| 欧美精品三区| 草草草视频在线免费看| 三级片网站在线播放| 日产中文字幕2020| 97操碰| 影音先锋视频在线| 素人美腿视频网站| 91在线观看,天天综合| 无码丰满熟妇一区二区浪潮AV| 性色一线| 日日骚av| 可以免费观看的日韩av毛片| 嫩草 人人网精品| 日本男人天堂| 免费毛片在线播放| 1000午夜黄色| 国产丝袜美女在线一区| 婷婷五月天补不补| 美女天天干| 凹凸视频在线观看伊人| 97硬碰| 91精品老女人| 欧美色色色| 久久久久久免费电影| 日本黄色大片一级视频免费麻豆| 九九热免费国产视频婷婷伊人五月 | 国产馆| 国产粉嫩出水在线播放| 99re99视频在线免费观看| 日本久久女同性恋视频| 日韩人妻少妇 一区二区三区| 日韩色图 一区二区| 人人操肉肉| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 中文字幕五区| 啪啪啪男女亚洲中文字幕99| 久久久久久精品免费看A级| www.高清无码诱惑一区.com| 秋霞网无码| 久久久久成人蜜桃精品| 91久久99久久91熟女精品| 色悠久久久av| 亚洲第一精品在线视频| 国产偷仑| 国产第12页| 大香蕉天天看妹子| 蜜乳中文字幕a在线| 91色艳| 夜夜爽夜夜| 婷婷久草一区二区三区| 丰满人妻-区二区三区免费看| 亚洲操人| 亚洲欧美综合图片| 婷婷五月天色色| 欧美日韩中文字幕不卡| 五月色网| 国产精品久久久久9999小说| 91九色网| 天美传媒婬乱在| 蜜臀久久一区二区| 蜜臀99久久精品久久久懂爱| 91欧美高清| 思思久热在线精品66| 色呦呦、国产精品| 久久久久亚洲熟妇熟女| 宗合情欲网| 国产成人自拍视频视频| 九区国产| 欧美v亚洲v日韩v最新在线二区 | 一级性爱视频免费观看 | 亚洲少妇综合| 久久久一区二区三区四曲免费听 | 成人AV素股で擦久久| 91福利网在线观看| 伊人青青草久久| 人妻一区视频| 大香交| 另类在线| 精品99999| 91在线色| 亚洲啪啪视频一区二区| 偷拍亚洲情色| 人妻AV 中文字幕的| 欧美精品三区| 欧美一区二区成人一卡| 国产麻豆福利av在线播放| 国产精品久久久午夜夜伦鲁鲁| 依人大香蕉| 人人操人人摸人人骑| 97色妞| 国产一区二区在线电影| 欧美一区二区| 男人的天堂成人的社区| 高清国产成人无码| 亚洲极品| 麻豆久久视频在线地址| 看免费的黄片| 97jingpin| 成人婷婷丁香| 成人精品久久久午夜福利| 亚洲人码13| 五月丁香婷婷色| 久久国产在线一区二区| 精品一区二区三区四区外站 | 大香蕉琪琪日本女优不卡| 久久人人爽人人爽人人片Ⅴ| 亚洲丝袜诱惑| 亚洲限制级| 亚洲啪啪性视频| 91亚洲综合| 走光一区92下载| 人妻久久久| 韩国一级婬片A片无码天美| 天操天操夜操夜月月年年操操| AV 少妇 人妻 偷拍| 亚洲高清无毛一区二区| 欧美第五页| 青青草吊丝| 乱伦系列一区二区| 欧美成人一级麻豆| 九草九九九| 午夜福利久久久噜久噜久久综合| 男女真人网18| 99久久久无码国产精品性啊聊| 97就爱干| 在线观看十八禁| 亚洲精品一区二区三区在线播放| 97国产人人| 人妻少妇久久| 欧美一区二区日韩传媒搭讪精品| 在线观看综合精品亚洲| www.av家庭乱伦| 人妻少妇无码| 校园春色综合色| 久久综合激情| 福利操逼| 日韩无码极品| 欧美97se| 天天看天天在线精品| 老熟乱一区二区三区四区| 四虎免费看黄| 蜜桃久久综合视频| 男女真人网18| 精品成人无码| 天天综合欧美| 青青久日| 裸体1区| 97精品国产97久久久久久户外免费| 日本一级性爱| 国产东北女人在线视频| 国产精品视频内谢女人| 天堂av最新电影网| 亚洲色丰满少妇高潮| 亚洲熟女国产综合另类| AV综合中文字幕干| 青青伊人这里只有精品| 亚欧无码线免费观看视频| 精品人妻15区| 91劲爆| 91网站18在线| 一区二区三区 丝袜 高跟 美腿| 综合自拍| 日本操逼视频导航| 91人精品妻入口| 99国产精品| 久久久青青草| 亚洲人精品久久久| 久久久99999久网站| 一区二区三区日韩欧美 | 美女91av| 另类 综合 日韩 欧美 亚洲| 美腿色图| 欧美淫穴| 成人欧美一区二区三区黑人一| 国产超碰人人爽人人做| 国产 日韩 欧美高清| 精品人妻一区二区三区四区石在线| 久久久久久综合久久伊人蜜月| 97在线日韩中文字幕| 色五月激情AV在线| 91nbbbbbb| 亚洲欧洲久久天堂| 你草精品在线视频| 人妻精品4K4K4K4K4| 久操九九九九| 91色艳| 又大又白奶子| 女同在线视频一区| 啊啊啊啊嗯嗯嗯用力好爽 | 亚洲欧洲无码一区夜| 夜草欧美| 青青草乱入乱欲视频在线观看| 成人天天看站长推荐| 第四色色综合91| 少妇诱惑视频| 欧美少妇内射| 97超级欧美| 久久99精品国产| 亚洲视频二区| 亚洲偷91色| 中字一区| 青青草在线视频美女| 丰满少妇精品一区二区| 午夜福利一区二区三区四区五区色婷婷| 久久久九精品| 骚妻少妇精品性色无码四色A V| 在线播放中文字幕| 蜜桃久久一区| 亚欧美综合网| 久草加勒比一区在线| 私人尤物在线精品不卡| 国产精品第一区第一页| 亚洲欧洲中文日韩女优乱码| 国产超碰AV在线精品| 亚洲日本激情| 久久亚洲AV无码专区国产精品| 91操人| 中文字幕成人| 又黑又大又粗| 欧美狠狠弄| 麻豆国产成人精品| 后入式999| 欧美色97| 九九九久久久| 欧美偷拍区| 亚洲欧综合另类无码一区| 日韩欧美亚洲一区二区三区影院 | 欧美亚洲尤物久久| 国产精品午夜高潮呻吟久久av| 色色五月婷婷| 台欧久久精品视频| 欧美久久婷婷| 亚洲怡春院| 嗯嗯啊啊啊好爽| 国产精品com| 这里只有精品视频在线观看麻豆| 国产一区二区在线电影| 九九热精品视频在线观看| 欧美在线官网| 久草婷婷| 精品白丝一区| 91天天看| 久久riav中文精品| 无套内射性感少妇视频| 91综合网站| 性爱视频啪啪啪啪| 欧美顶级黄片AAAAA在线免费看| 久久草草欧美精品| 丝袜无码a片| 国产精品午夜福利| 在线日韩日本亚洲国产| 综合久久久久久久综合网| 天天爽人人综合免费7799| 加勒比在线视频| 国产欧美后入| 亚洲人久久久久日| 日韩综合无码色欲vv| 一级免费啪啪片| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 精品综合久久久久久五月天| 国产精品美女在线一区| 色婷婷影院| 97天天操天天干| 欧美高清91| 久久久久久久伊人精品| 欧美精品999| 久久超碰、| 国产午夜精品一区二区三区牛牛| 欧美性爱第一页久久| 欧美一级做a爰片免费视频| 久久不卡一区二区 | 欧美精品23| 五月天激情婷婷| 97视频www| 狠狠爱综合网| 久久精视频美日韩在线视频| 99久久这里只有精品| 亚州Av天美传媒| 婷婷伊人五月| 色婷婷色99国产综合精品| 久久成年精品| 丰满人妻一区二区三区四区| 涩涩这里只有精品视频| 欧美拳交在线播放| 久久久一区二区| 翔田千里无码一区| 久久女婷| 天天超级碰碰碰| 亚洲欧美高清无码| 爱射综合| 嫩草黄页| 东京热视频网| 素人播放一区| 青青草在线视频播放器| 大香蕉视频一二三区| 中文字幕在线24| 免费男人的天堂| 中日亚韩免费视频| 富二代亚洲精品99| 亚洲毛片久久| 日韩激情啪啪| 欧美亚洲美少妇一区二区| 国产精品96| 337p大胆噜噜噜噜噜91Av| 极品色电影院| 欧美自拍偷拍综合图片| 中文字幕高清20页视频| 九九九久| 欧美日韩国产中文精品字幕自在自线| 欧美综合加勒比在线| 伊人91| 丁香五月天激情| 日韩av情韩国爱禁区av一区二区| 五月婷婷丁香六月丁香| 九九天堂| 97天天操| 婷婷五月天伊人| 亚州五月| 天天干天天狼在线视频| 精品人妻一区春色| 国产午夜在线观看视频| 中文字幕在线观看第二页| 91亚洲人| a久久| 中韩中文字幕在线观看| 丰满人妻av一区二区三区| 老司机午夜福利视频一区二区| 无码免费在线观看黄色片| 刺激性视频黄页| 中文一区二区三区影院| 中文字幕啊啊啊在线观看视频| 亚洲高清色综合| www.久久| 久久综合97| 激情六月天| 色与欲影视| 67914亚洲精品| 天天92av| 久操综合在线| 九热中文字幕| 天无日色综合| 麻豆天美91| 99久久久无码| 男女啪啪网站免费视频| 91AV老熟女视频| 日韩欧美性爱电影在线观看| 99国产精品人妻人伦| 亚洲av青草久久一区二区| 1769国内精品视频| 久久xxxx| www欧美91| 另类小说五月天| 久久精品店| 婷婷香蕉欧美在线一区二区三区| 男人的天堂久久久| 天美麻豆精品视频99| 九月丁香婷婷| 97超碰超碰| 精品免费一区二区三区在线亚洲人成| 欧美在线播放| 欧洲乱码一区二区| 都市久久精品激情亚洲| 97公开久久| 国产区性爱在线视频秋霞豆| 呻吟 欧美 日本 中出| 中文字幕精品资源在线| 欧美色97| 色色色色色色色色色色色色色色综合| 少妇综合网| 亚洲高清视频在线观看| 中文色综合| 91处女在线视频| www色婷婷| 亚洲天天操| 九九热五区| 免费在线黄片视频| 黄页网站成人免费| 九九九九久久久| 韩国三级一线观看久| 日韩美女高潮喷水视频| 久久高清欧美国产| 91丰满| 91美乳| 日本五十路熟女一区二区| 国产精品丝袜在线|