三星S22U内核编译报错求助:解决cam_actuator_i2c_read重定义问题
三星S22U(SM-S908U)内核编译问题解决及完整指南
一、解决cam_actuator_i2c_read重定义错误
错误根源是cam_actuator_core.c文件中同一函数被两次定义,具体修复步骤:
- 打开目标文件:
/home/ulis/kernel13/vendor/qcom/opensource/camera-kernel/drivers/cam_sensor_module/cam_actuator/cam_actuator_core.c - 定位到1636行的
cam_actuator_i2c_read函数:- 若该函数与149行的版本逻辑完全一致,直接删除1636行开始的整个函数代码块
- 若函数存在功能差异(属于源码bug,C语言不支持函数重载),修改其中一个函数的名称(例如改为
cam_actuator_i2c_read_ext),同时全局替换所有调用该函数的位置
- 保存文件后重新执行编译脚本
二、三星S22U内核完整编译步骤
- 环境准备
- 使用Ubuntu 20.04/22.04系统,安装编译依赖:
sudo apt install build-essential libssl-dev flex bison libncurses-dev libelf-dev dwarves
- 使用Ubuntu 20.04/22.04系统,安装编译依赖:
- 源码与工具链配置
- 解压三星开源包
SM-S908U_NA_13_Opensource.zip到工作目录(如~/kernel13) - 下载对应ARM64交叉编译工具链(推荐gcc 11.x版本),解压后添加到环境变量:
export PATH=$PATH:/path/to/your/toolchain/bin
- 解压三星开源包
- 内核配置
- 进入内核主目录:
cd ~/kernel13/kernel_platform/msm-kernel - 加载SM-S908U的默认配置(确认配置文件名,通常在
arch/arm64/configs目录下):make ARCH=arm64 smsmaxq_eur_open_defconfig
- 进入内核主目录:
- 编译内核
- 执行编译命令(
-j$(nproc)利用全部CPU核心加速):make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc) - 若需编译单独模块,切换到模块目录执行对应编译指令即可
- 执行编译命令(
- 获取编译产物
- 内核镜像:
arch/arm64/boot/Image - 设备树文件:
arch/arm64/boot/dts/qcom/目录下的对应dtb文件
- 内核镜像:
内容的提问来源于stack exchange,提问作者ULis3h
相关产品推荐
相关产品推荐

