第2章:Linux开发环境搭建
好,咱们直接进入正题。
做摄像头驱动开发,Linux环境是绕不开的。我见过不少新手,一上来就想着在Windows上搞,结果折腾半天连编译都过不了。说实话,我早期也踩过这个坑——那时候图省事,用了个Cygwin,结果各种库不兼容,浪费了两天时间。后来我学乖了,老老实实装虚拟机。
2.1 虚拟机安装:选哪个?
市面上主流的虚拟机软件就两个:VMware Workstation 和 VirtualBox。我个人习惯用 VMware,稳定,性能也好。VirtualBox 免费开源,但我在项目中遇到过几次 USB 设备透传的问题,摄像头死活认不出来。所以,如果你预算允许,我建议用 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 | 支持内核的加密模块编译 |
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 框架是怎么工作的。
http://kernel.ubuntu.com/~kernel-ppa/mainline/ 下载对应版本的头文件 deb 包,然后用 sudo dpkg -i 安装。
好了,环境搭好了,咱们下章见。