第2章:Linux开发环境搭建

好,咱们直接进入正题。

做摄像头驱动开发,Linux环境是绕不开的。我见过不少新手,一上来就想着在Windows上搞,结果折腾半天连编译都过不了。说实话,我早期也踩过这个坑——那时候图省事,用了个Cygwin,结果各种库不兼容,浪费了两天时间。后来我学乖了,老老实实装虚拟机。

2.1 虚拟机安装:选哪个?

市面上主流的虚拟机软件就两个:VMware Workstation 和 VirtualBox。我个人习惯用 VMware,稳定,性能也好。VirtualBox 免费开源,但我在项目中遇到过几次 USB 设备透传的问题,摄像头死活认不出来。所以,如果你预算允许,我建议用 VMware。

小提示: 如果你用的是 Linux 主机,其实可以直接用 KVM/QEMU,性能损失更小。但考虑到大部分同学是 Windows 环境,咱们还是以 VMware 为例。

安装过程很简单,一路 Next 就行。唯一要注意的是,安装完后记得去 BIOS 里开启虚拟化技术(VT-x/AMD-V)。嗯,这一步很多人会忘,结果虚拟机启动时提示「此主机不支持虚拟化」,然后一脸懵。

2.2 Ubuntu 系统配置

我推荐用 Ubuntu 20.04 LTS 或 22.04 LTS。为什么?因为摄像头驱动开发经常需要用到 v4l2 框架,而 Ubuntu 对这些内核模块的支持最成熟。你想想看,要是用个冷门发行版,遇到问题连百度都搜不到几条结果,多难受。

安装时,磁盘分区我建议这样搞:

  • /boot:分配 1GB 就够了,放内核和引导文件
  • /:分配 30-50GB,系统核心文件
  • /home:剩下的全给它,你的代码、项目都放这里
  • swap:如果你的内存小于 8GB,建议分 4GB 交换分区

我曾经因为 /boot 分区太小,内核升级几次后空间不够,导致新内核装不上。那次折腾了整整一个下午才搞定。所以,分区这事儿别马虎。

2.3 基础开发工具链安装

系统装好后,第一件事就是装工具链。别急着装图形界面那些花里胡哨的东西,先把吃饭的家伙备齐。

打开终端,执行以下命令:

sudo apt update
sudo apt upgrade -y
sudo apt install -y build-essential
sudo apt install -y git vim curl wget
sudo apt install -y linux-headers-$(uname -r)
sudo apt install -y libncurses-dev flex bison
sudo apt install -y libssl-dev libelf-dev

这里我解释一下每个包的作用:

包名 作用
build-essential 包含 gcc、g++、make 等编译工具
linux-headers 当前内核的头文件,编译内核模块必备
libncurses-dev 用于内核配置时的菜单界面
flex/bison 词法分析和语法分析工具,编译内核时需要
libssl-dev 支持内核的加密模块编译
注意: linux-headers 的版本必须和当前内核版本一致。你可以用 uname -r 查看当前内核版本。如果不一致,编译驱动时会报错,提示找不到 linux/version.h

装完这些,你可以验证一下:

gcc --version
make --version

看到版本号输出,说明工具链就绪了。

2.4 配置交叉编译环境(可选)

如果你打算在 x86 主机上编译 ARM 平台的驱动,那就需要交叉编译工具链。我常用的方案是 Linaro 的 gcc-arm-linux-gnueabihf。

安装命令:

sudo apt install -y gcc-arm-linux-gnueabihf

然后写个简单的测试程序:

#include <stdio.h>
int main() {
    printf("Hello, Camera Driver!\n");
    return 0;
}

用交叉编译器编译:

arm-linux-gnueabihf-gcc -o hello hello.c
file hello

如果输出显示「ELF 32-bit LSB executable, ARM」,说明交叉编译环境配置成功。

核心要点: 交叉编译时,别忘了指定 -I-L 路径,指向目标板的内核头文件和库文件。否则链接时会报一堆 undefined reference 错误。我刚开始做嵌入式时,就因为这个卡了三天。

2.5 配置 Git 和版本管理

做驱动开发,代码版本管理是基本功。我习惯用 Git,配合 GitHub 或 Gitee 远程仓库。

基本配置:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global core.editor vim

然后创建一个测试仓库:

mkdir camera_driver_project
cd camera_driver_project
git init
echo "# Camera Driver Project" > README.md
git add .
git commit -m "Initial commit"

嗯,到这里,你的开发环境基本就搭好了。说白了,就是一台虚拟机 + Ubuntu + 编译工具链 + Git。别小看这几步,我见过太多人因为环境没配好,后面写代码时各种报错,最后心态崩了。

下一章,咱们开始真正接触摄像头驱动——先搞懂 V4L2 框架是怎么工作的。

避坑指南: 我曾经在 Ubuntu 22.04 上遇到过内核头文件安装失败的问题,原因是软件源里没有对应版本。解决办法是手动去 http://kernel.ubuntu.com/~kernel-ppa/mainline/ 下载对应版本的头文件 deb 包,然后用 sudo dpkg -i 安装。

好了,环境搭好了,咱们下章见。