#!/bin/bash # ec_i2c_scan.sh - 用 ectool i2cxfer 扫描 EC 各 I2C port 上的设备 # 用法: ECTOOL=/path/to/ectool-cec sudo ./ec_i2c_scan.sh [port1 port2 ...] # 不传 port 时默认扫 port 0~7。必须用 Chromium 的 ectool-cec,系统 ectool 无 i2cxfer。 set -e ECTOOL=/home/jack/bin/ectool-cec # 默认用 ectool-cec(系统 ectool 不支持 i2cxfer) if [ -z "$ECTOOL" ]; then for candidate in ectool-cec ./ectool-cec "$HOME/bin/ectool-cec"; do if command -v "$candidate" >/dev/null 2>&1 || [ -x "$candidate" ]; then ECTOOL="$candidate" break fi done fi ECTOOL="${ECTOOL:-ectool-cec}" PORTS="${*:-0 1 2 3 4 5 6 7}" if ! command -v "$ECTOOL" >/dev/null 2>&1 && ! [ -x "$ECTOOL" ]; then echo "未找到 ectool-cec(需 Chromium EC 的 ectool,系统 ectool 无 i2cxfer)。请设置 ECTOOL:" echo " ECTOOL=/home/jack/bin/ectool-cec sudo $0" exit 1 fi # 7bit 地址范围(0x00-0x07 保留,0x78-0x7f 多为 10bit) for port in $PORTS; do found="" for addr in $(seq 8 119); do hexaddr=$(printf "0x%02x" "$addr") if "$ECTOOL" i2cxfer "$port" "$hexaddr" 1 >/dev/null 2>&1; then found="$found $hexaddr" fi done if [ -n "$found" ]; then echo "EC I2C port $port:$found" else echo "EC I2C port $port: (无设备)" fi done