新闻详情

新闻详情

首页 / 资讯中心 / 详情

QCM8550平台传感器驱动移植实战:从设备树到HAL的完整链路

发布时间:2026/9/28 9:36:41来源:尧图网络
QCM8550平台传感器驱动移植实战:从设备树到HAL的完整链路
前面有一段时间在做QCM8550平台的传感器驱动适配拿到任务时我原本以为就是普通的内核驱动移植把老平台上的加速度计、陀螺仪驱动拷过来、改改设备树、编一把内核就完事。实际跑下来才发现QCM8550kalama平台车规模块这代平台把传感器接入的路径拉得很长DTS资源、寄存器映射、QUPV3 I2C控制器编号、中断和供电的绑定、HAL层和SCP/SLPI的协调以及功耗和睡眠链路的处理任何一个环节出问题最终现象都统一表现为“传感器不出数据”。如果你也正在搞QCM8550或者其他高通车规平台的传感器驱动调试这篇内容应该能帮你少走不少弯路。我会按照我实际处理的顺序来写先讲清楚这台平台的移植边界再梳理前期准备、设备树和内核驱动的改法然后是上层HAL和验证工具最后用几个高频故障的排查过程把整个链路串起来。文中涉及的命令、代码片段和寄存器细节均基于常见实践补充请结合你手上的板级原理图灵活参考。1. 不是“新写驱动”而是“搬驱动”QCM8550平台上移植的真实边界1.1 先弄清楚这次移植到底要动哪几层很多工程师拿到“传感器驱动移植”这个任务时脑子里想的只有内核态的i2c_driverprobe、read/write、report。但在QCM8550这种车规高算力平台上一套传感器从硬件到应用至少横跨四层硬件层Sensor芯片本身、I2C/SPI总线、中断GPIO、供电LDO、电平转换。设备树层I2C控制器节点、sensor子节点、pinctrl、regulator绑定。内核驱动层I2C驱动、IIO或Input子系统的接入点、休眠/唤醒框架、电源域。用户态HAL层可选高通sensors HAL、SCP/SLPI侧sensor registry以及sensorservice上报。任何一个环节脱节你都会发现要么i2cdetect根本扫不到芯片要么/sys/bus/iio/devices/里有节点但数值不动要么dumpsys sensorservice里压根不挂传感器。所以要做的第一件事就是别把自己框在“写内核驱动”的思维里先盘清楚整个数据通路。1.2 手机平台和车规平台在传感器接入上的关键差异之前我在消费类平台比如SM8550手机方案上移植过G-sensor流程通常更直白驱动挂在某个APSS侧的I2C上中断进GPIOHAL直接读。但QCM8550这类车规平台有完全不同的一套约定大量传感器会优先考虑挂在SLPI/SCP低功耗子系统上由协处理器固件直接管理数据AP侧只拿到融合后的结果。这种方式对功耗和ASIL分解都有优势但移植成本高需要固件侧配合。如果传感器不通过SSC固件接管而是直接在AP侧跑那么就需要考虑打车规平台特有的电源域和休眠唤醒约束不能简单用suspend/resume把传感器一关了之还得兼顾Can总线唤醒和系统监控需求。平台内核树基于Code Aurora下游分支管理驱动合入路径、Kconfig组织、设备树覆盖方式都和上游Linux社区写法有差异。这就是为什么“搬驱动”比“新写驱动”更麻烦。代码是可以抄的但平台上下文必须自己理清。2. 接活前先把资源盘清器件资料、内核分支与供电约束2.1 器件资料不是只看Datasheet就够了我以前的习惯是拿到一颗传感器先翻寄存器手册把WHO_AM_I、CTRL_REG、OUT_DATA这些关键寄存器找出来然后再看驱动怎么配。这个习惯没错但在QCM8550这种平台上还不够你还要额外找齐三样东西参考驱动源码尽量拿到同一款Sensor在其它高通平台或旧内核分支上的可用驱动不要从零写。很多传感器的寄存器流程藏在厂商驱动里Datasheet不一定会写得那么具体比如上电后需要等多少毫秒、软复位后要不要重写所有寄存器。原理图和layout标注I2C接的是哪一路QUPV3 SE传感器INT脚接的是哪个TLMM GPIO供电是LDO还是DC-DC有没有板级load switchGPIO是否被其他外设复用。方向定义Sensor在PCB上的安装方向、轴定义、旋转角度这些信息通常只在硬件设计说明里不会写进寄存器手册但在HAL层坐标转换时必须用到。这块资料没理清之前不建议碰代码。很多移植项目做到最后卡在“寄存器能读但方向不对”就是前期没拿轴定义后面在HAL里反复猜非常浪费时间。2.2 选对CAF内核分支和基线版本QCM8550对应的内核不是随便找个mainline就能编的。你需要先确认板子实际使用的CAF内核基线常见是msm-5.15或msm-6.1的衍生分支并且要匹配对应的BSP release版本。不同分支之间pinctrl驱动节点写法、QUPV3设备树标签、时钟框架API签名都有差异。如果你拿到的传感器参考驱动是基于4.19或者5.10写的里面的devm_gpiod_get、device_property_read_u32这类API大部分还能用但某些高通定制的接口比如电源域rpmh-regulator的绑定方式就完全不一样了。所以第一步先在内核源码根目录确认版本号和CAF标签head -5 Makefile git describe --tags然后找到目标板卡的设备树目录通常在arch/arm64/boot/dts/vendor/qcom/下里面会以kalama-*.dts或qcm8550-*.dtsi命名。看清楚现有I2C控制器的开启状况和剩余GPIO资源再决定挂哪条总线。2.3 供电与电气约束最容易在PCB阶段埋雷传感器这类小电流外设大家容易在供电上想当然。我在QCM8550调试中遇到的第一个坑就跟供电有关设备枚举正常但probe里读芯片ID偶尔失败最后查出来是VDDIO和传感器I2C电平不匹配LDO电压配置和实际硬件设计差了0.3V。拿到板子后建议先把Sensor的供电链路口算清楚主电源VDD通常1.8V或3.3V核对LDO规格。IO电源VDDIO必须和I2C总线电平一致否则上拉电阻的电压会把通信不稳。中断引脚的上拉/下拉状态很多Sensor的INT脚是开漏输出必须配外置或TLMM内部上拉如果内部上拉没使能中断信号就是浮空电平触发完全失效。这些细节不一定能在设备树里看出来最好是在根因排查时用万用表和示波器实测。我的习惯是在移植前先给硬件同事列一张“传感器供电和IO电平确认表”逐项签字确认再动软件省得后面来回扯皮。3. 设备树配置I2C节点、中断脚与供电链路的绑定细节3.1 找到正确的I2C控制器节点别把SE编号搞错QCM8550的I2C控制器基于QUPV3架构DTS里面的标签形如qupv3_se5_i2c但这个se5编号和硬件原理图上的“I2C5”不一定是同一回事。QUP的物理地址和功能模式由bootloader按PBL配置决定你必须从平台的原生DTSI文件里搜索确认grep -rn qupv3_se5_i2c arch/arm64/boot/dts/vendor/qcom/在原生DTSI里qupv3_se5_i2c会带有内存映射地址reg 0x...你要拿这个地址去和硬件原理图上标记的I2C控制器基址比对。如果原理图上用的是“I2C 2”但实际基址对应的是SE5那设备树就要挂在qupv3_se5_i2c不要被丝印编号带偏。另外要确认这个SE节点默认状态是disabled还是okay。如果已经被UART或SPI占用就无法再挂I2C设备必须换一条总线或者通过修改TLMM pinmux把已有功能释放出来。3.2 中断GPIO配置pinctrl和触发方式都要对齐传感器中断在设备树里主要有三个坑第一interrupt-parent和interrupts要正确引用TLMM节点和GPIO编号。QCM8550的GPIO一般归到tlmm中断号是绝对值而不是相对某个bank的偏移。第二传感器INT脚的开漏特性和TLMM的上下拉配置要匹配。如果Sensor的INT是推挽输出内部上拉可以不加如果是开漏内部上拉必须开否则中断信号上不去。第三触发方式必须和芯片寄存器里的中断配置一致。加速度计典型做法是IRQ_TYPE_LEVEL_LOW因为中断发生期间引脚保持低电平适合数据准备好通知如果错误配置成边沿触发在高频中断时很容易丢中断。设备树里一个典型的传感器节点大概长这样以某6轴惯性传感器为例qupv3_se5_i2c { status okay; sensor68 { compatible vendor,imu-sensor; reg 0x68; interrupt-parent tlmm; interrupts 12 IRQ_TYPE_LEVEL_LOW; pinctrl-names default, sleep; pinctrl-0 sensor_int_default; pinctrl-1 sensor_int_sleep; vdd-supply L6A; vddio-supply L7A; wakeup-source; }; };对应的pinctrl子节点通常放在板级dtsi的tlmm里tlmm { sensor_int_default: sensor_int_default { mux { pins gpio12; function gpio; }; config { pins gpio12; drive-strength 2; bias-pull-up; input-enable; }; }; };要注意drive-strength不是越大越好对于开漏中断脚2mA通常够了过分加大反而会引起振铃。3.3 供电链路的设备树绑定regulator不是随便填的QCM8550平台普遍用rpmh-regulator管理电压域传感器节点里的vdd-supply、vddio-supply必须对应到板级DTS里真实存在的LDO标签比如L6A、L7A。如果你填了一个不存在的regulator驱动侧devm_regulator_get不会报致命错但regulator_enable阶段会一直返回EPROBE_DEFER导致probe无限推迟。我的建议是先在DTS里搜一下目标LDO是否存在以及它的初始电压和负载电流能力是否满足Sensor要求grep -rn L6A arch/arm64/boot/dts/vendor/qcom/kalama-*.dtsi确认LDO存在后可以在设备树里显式加上regulator-boot-on或regulator-always-on吗除非硬件确实需要否则不建议。车规平台对功耗很敏感Sensor应该在驱动probe时动态开电在runtime suspend时动态掉电而不是一直挂电。4. 内核驱动代码搬运从旧平台到QCM8550的改法4.1 入子系统时先选对框架IIO还是Input传感器驱动在内核里最常见的两个接入框架是IIO和Input子系统。它们各有适用场景移植前先想清楚IIO在Linux内核里是传感器和ADC类设备的通用框架自带buffer、trigger、sysfs标准接口。调试方便/sys/bus/iio/devices/iio:deviceX/in_accel_x_raw直接读文件适合加速度计、陀螺仪、磁力计、气压计这类惯性传感器。Input更适用于按键、摇杆、触摸板等需要input_event上报的设备。如果你的Sensor要当成事件设备比如手势感应、双击检测给上层用用Input子系统更顺手。在高通平台上传感器最终要接到Android或Linux的sensorservice因此HAL层通常期望能直接读到原始轴数据。我的经验是单纯的数据传感器用IIO带事件语义的用Input。当然也有厂商把加速度计做成Input设备上报ABS_X/ABS_Y/ABS_Z的能用但非常别扭坐标轴的含义容易被磨掉。4.2 高通常见的probe失败原因与修复顺序从旧平台搬过来的驱动在QCM8550上最常见的probe失败问题按出现概率排个序设备树属性名不匹配。老驱动读vddio-supply用的是vdd_i0-supply或者读interrupt-parent的方式不对导致regulator或中断资源拿不到。I2C地址错误。同一款Sensor可能支持多个地址取决于ADDR引脚电平。设备树reg和芯片实际地址不一致时probe会报ENODEV因为whoami读不到预期值。驱动ID表兼容字符串没对上。老驱动里的of_device_id使用的compatible字符串和设备树里写的不一样内核就不会匹配。中断返回EPROBE_DEFER。Sensor中断GPIO经常依赖某个pinctrl状态而这个pinctrl又是另一个驱动初始化的顺序没对齐就会反复延迟。排查时不要直接看dmesg而是先确认驱动有没有进probeadb shell dmesg | grep -i sensor adb shell ls -l /sys/bus/i2c/devices/如果probe压根没进去优先查compatible和I2C地址如果进了但报错退出优先查regulator_get和request_threaded_irq的返回值。QCM8550平台往往把外设挂在PMIC LDO上LDO上电时序不对也会导致驱动读寄存器超时。4.3 CAF Kernel下面的Kconfig与Makefile组织方式高通下游内核会把外设驱动分门别类放在专属目录下传感器驱动通常放在drivers/iio/imu/、drivers/iio/accel/或drivers/input/misc/下具体取决于你的接入框架。如果你拿到的驱动是散落的几个.c文件建议先归好目录再改Kconfig。以IIO框架下的IMU驱动为例config SENSOR_IMU_VENDOR tristate Vendor IMU sensor driver for QCM8550 depends on I2C select IIO_BUFFER select IIO_TRIGGERED_BUFFER help Support for Vendor IMU sensor on QCM8550 platform.Makefile里加一行obj-$(CONFIG_SENSOR_IMU_VENDOR) vendor_imu.o注意给Kconfig的依赖描述很多传感器驱动需要IIO_TRIGGERED_BUFFER如果不选上iio_triggered_buffer_setup在链接阶段会报未定义引用。编译前记得先跑一遍make menuconfig或直接在defconfig里打开选项。高通的内核通常会通过*_defconfig管理不要改了Kconfig却不改defconfig那样默认配置下驱动根本不会编出来。5. 上层框架对接HAL、SCP/SLPI与sensorservice验证5.1 高通传感器框架的基本结构AP侧和SSC固件侧高通QCM8550上的传感器框架最正统的路线是SSCSensing Subsystem/SLPI固件管理传感器。这颗协处理器负责数据采集和融合AP侧通过/dev/sensors和QMI接口管理。如果Sensor直接接入SSC固件那内核侧通常只需要提供sns_device_*对应的固件参数然后通过高通提供的sensorsHAL上报。但如果是自己外接第三方Sensor最省力也最常见的做法是AP侧直接拿下整个传感器数据通路HAL层通过标准接口读取这样既不用写SSC固件也容易调试。缺点是你得自己管休眠唤醒。在QCM8550的调试中我先确认平台默认的sensorsHAL配置是否包含了目标传感器。高通HAL启动时会读取/vendor/etc/sensors/hals.conf或类似配置文件里面声明了有哪些Sensor实例被实例化。如果HAL里没有目标传感器内核驱动就算跑起来、设备节点也生成了Android层的sensorservice也看不到它。5.2 HAL层坐标转换方向矩阵别等最后才做传感器方向和安装的对应关系是HAL层最容易翻车的点。内核上报的x/y/z是芯片本体的原始坐标而应用层需要的通常是屏幕坐标系下的数值。这个转换矩阵一般是3x3的元素数值是0、1、-1或它们的组合。最怕的情况是驱动工作正常原始数据也正确但HAL层没做矩阵转换导致dumpsys sensorservice里显示的数据倾斜90度或走向相反。这个问题在线调试时很难一眼看出来因为你拿板子转一圈数据有变化你以为好了实际方向已经反了。我的建议是在驱动调试阶段就写一个简单的坐标输出脚本把原始轴数据和传感器放在水平桌面、旋转90度后的输出全部打出来先验证物理方向对不对再谈HAL矩阵。HAL里坐标系旋转用的是四元数或欧拉角如果你只是简单置换轴务必检查左右手坐标系是否一致。5.3 dumpsys sensorservice快速判断整条链路是否打通在QCM8550板子上一旦内核驱动和HAL配置都就位最终验证可以依赖Android原生命令adb shell dumpsys sensorservice运行之后重点关注两部分内容All Sensors列表里是否出现目标传感器名称、vendor、version是否匹配。传感器事件流是否持续更新在dumpsys sensorservice的输出里能看到每个sensor的last event数值是否按照采样率变化。如果你想让传感器强制上报并实时看数据adb shell settings put system accelerometer_rotation 0 adb shell content query --uri content://settings/system不过在纯嵌入式Linux不带Android框架的场景下sensorservice不存在你可以直接读IIO设备节点确认原始数据adb shell cat /sys/bus/iio/devices/iio:device0/in_accel_x_raw adb shell watch -n 0.2 cat /sys/bus/iio/devices/iio:device0/in_accel_scale这样的数据流验证比看HAL更底层能快速区分问题出在驱动还是HAL。6. 真机调试三板斧I2C没反应、数据不动、中断不来的定位过程6.1 I2C设备枚举失败的完整排查链路这是我在QCM8550上遇到最多的一个现象modprobe后驱动成功加载但i2cdetect扫不到设备地址。完整的排查链路我建议按下面顺序走第一步确认I2C总线本身是否工作。直接扫描所有总线adb root for i in $(seq 0 20); do adb shell i2cdetect -y -r $i; done看是否有一整条I2C总线上完全没有--以外的设备。如果所有地址都是--大概率是总线上拉电阻或者电平问题如果只有目标地址扫不到继续往下走。第二步用示波器抓I2C clock和data信号确认设备有没有ACK。大多数情况下是器件供电没有起来或者I2C地址配置脚接错。此时查看LDO是否开启adb shell cat /sys/class/regulator/regulator.4/name adb shell cat /sys/class/regulator/regulator.4/state如果regulator没问题再检查设备树里reg是否和IC实际地址一致。第三步确认I2C控制器时钟有没有打开。在DTS里挂完qupv3_se5_i2c后如果对应GPIO做成了sleep状态会关闭I2C引脚的上拉扫描就会失败。用GPIO调试节点检查adb shell cat /sys/kernel/debug/gpio在输出里找I2C引脚是不是处于gpio功能而不是i2c功能。如果是这种情况多半是pinctrl没配对。6.2 寄存器能读但数据不更新FIFO、ODR和软复位的纠缠有一段时期现象很典型whoami正确寄存器也读得到但轴数据永远不变或者只有上电瞬间跳一次。这种问题根本原因通常在三条线上ODR输出数据率没配好很多Sensor有多个ODR寄存器控制光写了采样率位还不够还要根据FIFO的decimation配置正确。FIFO没被及时读取FIFO数据积压但读指针没移动你会一直读到头数据。检查驱动里FIFO读取流程是否正确建议先把FIFO模式改成bypass直接读寄存器排除FIFO逻辑干扰。软复位和初始化时序没等够Sensor上电后需要时间初始化如果驱动在启动后立刻写寄存器写操作会被忽略。在probe流程里加延时特别是msleep(50)这种在旧平台可能被随意跳过的步骤在QCM8550这种更快的SoC上反而容易出问题。排查时可以在驱动里临时改用IIO sysfs直接读寄存器原始值adb shell cat /sys/kernel/debug/iio/iio:device0/direct_reg_access很多IIO驱动自带调试口如果没有也可以临时在驱动里加i2c_smbus_read_byte_data打点。6.3 中断触发但上报混乱电平类型、去抖和线程化中断中断类问题有个典型数据有更新但getevent或上层看到的事件频率完全乱套比如一次数据触发报了三次或者上报的event滞后好几个周期。常见原因有三个中断触发方式不匹配。Sensor INT配置成低电平设备树里也写的LEVEL_LOW但如果驱动在中断处理函数里读了数据但没有清中断位电平一直拉低会导致中断反复触发。解决方法是确保每次中断服务里都执行清中断寄存器。中断没有线程化。在I2C读数据这类慢速操作里如果在硬中断上下文直接调用i2c_transfer会造成中断处理时间过长系统直接把该中断关了。正确做法是devm_request_threaded_irqIRQF_ONESHOT把数据读取放到threaded context。没做去抖或数据锁存。Sensor自带FIFO的情况下建议中断到达后在中断线程里把所有FIFO数据一次性读光再上报一次event否则下次中断可能覆盖旧数据事件就会丢。这里额外提醒一句如果用getevent验证Android上层只看到归一化后的坐标如果怀疑驱动里坐标有偏差最好在驱动里加一个原始数据的tracing点或者直接读IIO节点确认。7. 一些值得记录的经验与坑7.1 睡眠唤醒后数据链路断开是车规平台优先级最高的问题QCM8550最终是要跑在车辆场景里的因此休眠唤醒流程和手机平台差别很大。Sensor驱动不能像在手机上那样简单地在系统suspend时关闭电源车规系统经常需要传感器在整车休眠时保持某种程度的唤醒监控能力。如果你的Sensor要支持唤醒事件记得在设备树里加wakeup-source;属性同时在驱动suspend回调里不要把中断关掉而是配置成唤醒源。如果Sensor不带唤醒功能那就要确保驱动在resume之后重新完整初始化一遍寄存器否则经常出现唤醒后数据不再更新的现象。这块我踩过的坑是只把驱动挂在PM runtime里系统suspend时让regulator直接掉电结果恢复后驱动没重刷寄存器FIFO状态错乱数据流直接卡住。后来加了完整的resume重初始化逻辑问题才消失。7.2 温度校准和ODR切换测试看起来没用但必须做惯性传感器在温度变化时零偏会漂移QCM8550平台上如果Sensor靠近高速SoC发热对数据影响非常明显。调试阶段做一次简单的温升测试板子运行高负载20分钟期间持续采集传感器原始零偏看有没有明显漂移。如果漂移超过规格需要在驱动里开启温度补偿或HAL侧做校准。ODR切换同样值得尽快测。很多驱动只在初始化时设置ODR上层如果动态要求降低采样率需要走完整的set_odr流程。这个接口在IIO框架下对应in_anglvel_sampling_frequency这类属性。如果切换失败表现通常是数据乱跳或时间戳异常排查起来比普通数据失真更难受。7.3 文档和基线管理搬驱动最容易忽略但最要命的事最后一条经验来自这次移植过程中最痛苦的返工当时我在QCM8550上把驱动全部调通之后想顺手合入另一个分支结果因为基线差异和Kconfig改动反复冲突了两天才收敛。高通平台内核分支之间差异很大如果不记录原始驱动的来源基线、改动内容和依赖配置后面所有工作都会变成在未知状态上叠补丁。建议在搬任何驱动前先用git format-patch生成一个独立patch文件单独管理。如果驱动本来就是公开的Linux社区代码记录版本号如果是厂商定制驱动记录对应BSP release和修改点。这个习惯在车规项目里尤其重要因为客户审计时经常需要你回答“某行代码为什么这么改”有基线记录才能答得上。移植完成后还要做一遍双向检查在QCM8550平台上反复reboot、随机suspend/resume、长时间跑数据稳定性确认没有时序依赖类问题。这类问题在实验室单次验证时最容易漏一旦上车就是偶发bug定位成本高得多。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

快速搭建网站的工具怎么选?3个方案省下5万冤枉钱 2026/9/28 9:42:31

快速搭建网站的工具怎么选?3个方案省下5万冤枉钱

快速搭建网站的工具怎么选?3个方案省下5万冤枉钱 网站做好了没人访问,这是很多老板最头疼的事。你花大价钱做的官网,设计精美、功能齐全,但打开一看,流量为零,咨询为零。这时候你才意识到,问题不在“做没做”,而在“怎么快速做出来并推向市场”。面…

阅读更多 →
昇腾910B多机分布式推理:从HCCL到MindIE的DeepSeek部署实践 2026/9/28 9:42:24

昇腾910B多机分布式推理:从HCCL到MindIE的DeepSeek部署实践

昇腾910B上跑DeepSeek多机分布式推理,很多人卡在第一眼:MindIE、HCCL、ranktable、hccn_tool,每个词都眼熟,串起来就不是那么回事。实际踩过一圈之后你会发现,真正决定能不能跑起来的不是模型代码,而是通信…

阅读更多 →
从CANoe到TSMaster:车载总线测试工具链迁移实战指南 2026/9/28 9:42:24

从CANoe到TSMaster:车载总线测试工具链迁移实战指南

搞车载总线测试的工程师,电脑里大概率都装着一套CANoe。我最早接触CANoe是刚入行那会儿,跟着前辈在项目里做网络测试,从报文发送、DBC解析到UDS诊断,基本全是靠Vector这套工具撑起来的。说实话,CANoe确实是这个行业的标…

阅读更多 →
从刷榜到用榜:GitHub Trending 的增量逻辑、项目筛选与高效落地 2026/9/28 9:42:23

从刷榜到用榜:GitHub Trending 的增量逻辑、项目筛选与高效落地

1. 日榜的"热度"到底是怎么算出来的先别急着收藏仓库。每天打开 GitHub 的 Trending 页面,你看到的是过去 24 小时内 Star 增量最高的仓库,周榜和月榜则分别看一周、一个月内的增量。官方没有公开完整排序算法,但用久了会发现&…

阅读更多 →
【Java开发MCP】SSE模式开发并集成MCP:TaoToken统一Key接入与SpringAI WebFlux配置骨架 2026/9/28 9:42:23

【Java开发MCP】SSE模式开发并集成MCP:TaoToken统一Key接入与SpringAI WebFlux配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
OpenCompass 高效评测:Partitioner 任务切分与 Runner 执行后端实战指南 2026/9/28 9:42:23

OpenCompass 高效评测:Partitioner 任务切分与 Runner 执行后端实战指南

模型评测人工智能大模型AI 评测 【免费下载链接】opencompass OpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100 datasets covering knowledge, reasoning, coding, scie…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉