You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译LineageOS android_kernel_xiaomi_sdm845内核遇DTB错误求助

编译LineageOS sdm845内核时遇到DTB引用错误

环境与操作步骤

  1. 克隆内核仓库:
git clone https://github.com/LineageOS/android_kernel_xiaomi_sdm845.git
  1. 编写的编译脚本如下:
#!/bin/bash

# TODO: 增加选择菜单

# 计时器
START_SEC=$(date +%s)

# 获取当前路径
CURRENT_DIR=$(pwd)

# 设置目标内核
TARGET_KERNEL="android_kernel_xiaomi_sdm845"

# 设置编译目录
TARGET_KERNEL_DIR="$CURRENT_DIR/$TARGET_KERNEL"
CLANG_DIR="$HOME/toolchains/neutron-clang"
# CLANG_DIR="$CURRENT_DIR/toolchains/tc-build/install"
ANYKERNEL_DIR="$CURRENT_DIR/AnyKernel3"

# 参数设定
CC="$CLANG_DIR/bin/clang"

THREAD=$(($(nproc --all) / 2))
ARCH=arm64
OUT_DIR="$CURRENT_DIR/out/${TARGET_KERNEL}"

# 使用 neutron-clang 无需使用 Triple
CROSS_COMPILE=aarch64-linux-gnu-
# CROSS_COMPILE_COMPAT=arm-linux-gnueabi-
CC_ADDITION_FLAGS="AR=llvm-ar NM=llvm-nm OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump STRIP=llvm-strip LLVM_IAS=1 LLVM=1"

# 编译参数
args="-j$THREAD \
    O=$OUT_DIR \
    ARCH=$ARCH \
    CROSS_COMPILE=$CROSS_COMPILE \
    CROSS_COMPILE_COMPAT=$CROSS_COMPILE_COMPAT \
    $CC_ADDITION_FLAGS \
    CC=$CC"

# 添加proton-clang到路径搜索目录中
export PATH="$CLANG_DIR/bin:$PATH"

#export DEFCONFIG_PATH=arch/arm64/configs
DEFCONFIG_NAME=sdm845_defconfig

# 准备KernelSU


# 构建默认配置
make_defconfig() {
    echo "------------------------------"
    echo "  Building Kernel Defconfig   "
    echo "------------------------------"

    cd $TARGET_KERNEL_DIR
    echo ${args}
    make ${args} $DEFCONFIG_NAME

    cd ${TARGET_KERNEL_DIR} || exit
}

# 内核构建
build_kernel() {
    echo "------------------------------"
    echo "       Building Kernel        "
    echo "------------------------------"

    cd $TARGET_KERNEL_DIR

    make ${args}

    END_SEC=$(date +%s)
    COST_SEC=$(($END_SEC - $START_SEC))
    echo "Kernel Build Costed $(($COST_SEC / 60))min $(($COST_SEC % 60))s"

    #find ${OUT_DIR}/$dts_source -name '*.dtb' -exec cat {} + >${OUT_DIR}/arch/arm64/boot/dtb

    cd $CURRENT_DIR
}



# 构建AnyKernel3包
buildAnyKernel() {
    echo "------------------------------"
    echo "    Build flashable zip       "
    echo "------------------------------"

    cd $CURRENT_DIR
    cp -rf $OUT_DIR/arch/arm64/boot/Image $ANYKERNEL_DIR/Image
    #cp -rf $OUT_DIR/arch/arm64/boot/dtb $ANYKERNEL_DIR/dtb;
    #cp -rf $OUT_DIR/arch/arm64/boot/dtbo.img $ANYKERNEL_DIR/dtbo.img;
    cd $ANYKERNEL_DIR
    OUTPUT_FILE=KSU_${TARGET_KERNEL}-Thyme-$(date +"%y.%m.%d").zip
    zip -r $OUTPUT_FILE *
    mv $OUTPUT_FILE $CURRENT_DIR/$OUTPUT_FILE
    rm -rf $OUTPUT_FILE

    echo "The output is $OUTPUT_FILE"
    cd $CURRENT_DIR
}

main() {
    make_defconfig && \
    build_kernel 
    # && \
    # buildAnyKernel


}

# 构建工具链
buildCBL(){
    cd toolchains/tc-build
    ./build-llvm.py -I "$CURRENT_DIR/toolchains/CBL-Tools"
    cd $CURRENT_DIR
}

# 执行程序并输出日志
main 2>&1 | tee "$CURRENT_DIR/build_kernel.log"
  1. 执行./build.sh时出现错误:
arch/arm64/boot/dts/qcom/sdm845-v2-qvr-evt.dtb: ERROR (phandle_references): /soc/i2c@894000/synaptics_dsx@20: Reference to non-existent node or label "ts_int_active"

arch/arm64/boot/dts/qcom/sdm845-v2-qvr-evt.dtb: ERROR (phandle_references): /soc/i2c@894000/synaptics_dsx@20: Reference to non-existent node or label "ts_reset_active"

ERROR: Input tree has errors, aborting (use -f to force output)

解决方案

1. 禁用有问题的设备树文件

编辑内核目录下的arch/arm64/boot/dts/qcom/Makefile,找到包含sdm845-v2-qvr-evt.dtb的行,在行首添加#注释掉,跳过该设备树的编译。

2. 补全缺失的节点定义

打开arch/arm64/boot/dts/qcom/sdm845-v2-qvr-evt.dts文件,找到synaptics_dsx@20节点的引用部分,在同一文件或其依赖的头文件中添加缺失的节点定义,示例:

ts_int_active: ts-int-active {
    compatible = "gpio-active-high";
    gpios = <&tlmm 100 GPIO_ACTIVE_HIGH>; // 根据设备实际硬件调整GPIO编号
};

ts_reset_active: ts-reset-active {
    compatible = "gpio-active-high";
    gpios = <&tlmm 101 GPIO_ACTIVE_HIGH>; // 根据设备实际硬件调整GPIO编号
};

GPIO编号可参考同系列正常设备的树文件确认。

3. 强制编译(仅临时测试用)

在编译参数中添加DTC_FLAGS="-f"忽略错误,修改脚本中的args变量:

args="-j$THREAD \
    O=$OUT_DIR \
    ARCH=$ARCH \
    CROSS_COMPILE=$CROSS_COMPILE \
    CROSS_COMPILE_COMPAT=$CROSS_COMPILE_COMPAT \
    $CC_ADDITION_FLAGS \
    CC=$CC \
    DTC_FLAGS=\"-f\""

此方法仅能绕过编译错误,可能导致内核在对应设备上无法正常工作。

4. 切换到稳定分支

若当前为开发分支,尝试切换到LineageOS稳定分支重新编译:

cd android_kernel_xiaomi_sdm845
git checkout lineage-20.0 # 替换为对应版本的稳定分支

内容的提问来源于stack exchange,提问作者yg lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 07:38:10