2. 开发环境搭建:高通LE/LA内核源码下载、交叉编译工具链配置、ADB与fastboot调试环境准备

做Camera驱动开发,环境搭建是第一道坎。很多新手上来就急着看代码,结果编译都过不了,白白浪费时间。我刚开始带项目的时候也犯过这个错——花了两天时间折腾编译环境,最后发现是内核版本和工具链不匹配。

说白了,开发环境就是你的武器库。武器不趁手,上了战场也是白搭。这一章咱们就把高通平台的开发环境彻底捋一遍。

2.1 高通LE/LA内核源码获取

高通的内核分两个分支:LE(Linux Embedded)和LA(Linux Android)。怎么选?看你的产品形态。

分支 适用场景 特点
LE IoT、车载、非Android嵌入式设备 轻量、无Android HAL层依赖
LA 手机、平板等Android设备 包含Android驱动框架、Camera HAL

我个人习惯用LA分支做Camera开发,因为大部分客户项目都是Android平台。源码获取通常有两种方式:

  1. 高通Codeaurora仓库(公开):https://source.codeaurora.org
  2. 高通芯片厂商提供的BSP包(签NDA后获取)

举个例子,拉取SM8450(骁龙8 Gen1)的LA内核:

git clone https://source.codeaurora.org/quic/la/kernel/msm-5.10 -b LA.UM.9.14.r1-08000-KAMORTA.QSSI12.0
注意:分支名里的LA.UM.9.14代表Android版本和芯片平台代号。选错分支会导致编译失败。我曾经因为看错一个数字,折腾了整整一个下午。

2.2 交叉编译工具链配置

高通平台用aarch64-linux-android-或aarch64-linux-gnu-工具链。别搞混了——Android和纯Linux的工具链不通用。

我推荐两种配置方式:

方式一:使用高通预编译工具链(推荐)

高通在Codeaurora上提供了预编译的gcc工具链:

git clone https://source.codeaurora.org/quic/la/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9

配置环境变量:

export CROSS_COMPILE=$(pwd)/aarch64-linux-android-4.9/bin/aarch64-linux-android-
export ARCH=arm64

方式二:使用Linaro工具链

如果你做的是LE分支(非Android),用Linaro的更合适:

wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
tar -xf gcc-linaro-*.tar.xz
export CROSS_COMPILE=$(pwd)/gcc-linaro-*/bin/aarch64-linux-gnu-
小技巧:把工具链路径写到~/.bashrc里,每次开终端就不用重新export了。我习惯在.bashrc里加一行别名:alias setarm='export CROSS_COMPILE=...'。

2.3 编译内核与Camera驱动模块

环境配好了,咱们编译一下试试。以LA分支为例:

cd msm-5.10
make defconfig vendor/xxxx_defconfig  # 加载厂商默认配置
make menuconfig                        # 可选:手动配置Camera驱动
make -j$(nproc)                        # 编译内核
make modules                           # 编译模块

编译完成后,内核镜像在arch/arm64/boot/Image,驱动模块在drivers/media/platform/msm/camera/下。

嗯,这里要注意:Camera驱动通常编译为模块(.ko),方便调试时单独加载卸载。我一般会在menuconfig里把CONFIG_MSM_CAMERA设为m。

2.4 ADB与fastboot调试环境准备

驱动写好了,怎么跑起来?靠ADB和fastboot。这两个工具是Android调试的左右手。

ADB(Android Debug Bridge)

ADB用于设备运行时调试。常用场景:

  • push/pull驱动模块到设备
  • 查看dmesg日志
  • 执行shell命令

安装ADB:

sudo apt install adb
adb devices  # 检查设备是否连接

加载Camera驱动模块的典型流程:

adb root
adb remount
adb push camera_sensor.ko /vendor/lib/modules/
adb shell insmod /vendor/lib/modules/camera_sensor.ko
adb shell dmesg | grep "camera"  # 查看驱动加载日志

fastboot(刷机模式)

fastboot用于烧写内核、bootloader等底层镜像。当你把设备搞死机了(相信我,这很常见),fastboot是你的救命稻草。

安装fastboot:

sudo apt install fastboot

常用命令:

fastboot flash boot boot.img       # 烧写boot分区
fastboot flash vendor vendor.img   # 烧写vendor分区(含驱动模块)
fastboot reboot                    # 重启设备
避坑指南:我曾经在调试时忘了adb root,结果push文件一直报Permission denied。折腾了半小时才发现是权限问题。记住:每次adb连接后,先执行adb root提权。

2.5 环境验证:一个完整的调试闭环

环境搭好了,怎么确认一切正常?我建议走一遍完整的流程:

  1. 编译内核和Camera驱动模块
  2. 通过fastboot烧写新内核
  3. 设备重启后,adb连接
  4. insmod加载驱动模块
  5. dmesg查看驱动初始化日志
  6. 检查/dev/video*节点是否生成

如果每一步都走通了,恭喜你——开发环境已经就绪。

核心要点:
  • LA分支用于Android,LE分支用于非Android
  • 工具链必须与内核版本匹配
  • Camera驱动建议编译为模块(.ko)
  • adb root是调试的第一步
  • fastboot是救砖的最后防线
高通Camera驱动开发环境搭建流程 1. 获取内核源码 2. 配置交叉编译工具链 3. 编译内核 + Camera模块 4. fastboot烧写 / adb push 5. dmesg / dev节点验证 关键工具 • git / repo • aarch64-linux-android-gcc • make / menuconfig 调试工具 • adb (push/shell/dmesg) • fastboot (flash/reboot) • insmod / lsmod 验证指标 • /dev/video* 节点存在 • dmesg无错误

环境搭建这件事,说白了就是一次性的投入。花半天时间把工具链、ADB、fastboot都配好,后面调试的时候就能省下大把时间。我见过太多工程师在环境上反复踩坑,其实只要按这个流程走一遍,后面就顺了。