2、开发环境搭建:虚拟机安装与系统配置

说实话,做嵌入式Linux开发,第一道坎就是环境搭建。

我记得刚入行那会儿,直接在Windows上装了个双系统,结果切换来切换去,烦得不行。后来用了虚拟机,才发现——嗯,这才是正道。你想想看,开发过程中要频繁测试内核、编译驱动,万一搞崩了系统,虚拟机里直接回滚快照就行,省心太多了。

2.1 虚拟机选型:VirtualBox 还是 VMware?

我个人习惯用 VirtualBox,原因很简单:免费、轻量、够用。但如果你公司有预算,或者你需要更稳定的性能(比如跑大型内核编译),VMware Workstation 确实更稳。

我列个对比表,你一看就明白:

特性 VirtualBox VMware Workstation
价格 免费(开源) 付费(有免费版 Player)
性能 中等 较好
快照功能 支持 支持
3D加速 一般 较好
社区支持 非常活跃 官方文档完善

我的建议是:如果你是初学者,直接用 VirtualBox 就行。等你后面做大型项目,再考虑 VMware。

小技巧: 安装 VirtualBox 后,记得去官网下载「Extension Pack」,不然 USB 设备和共享剪贴板用不了。我曾经因为这个折腾了半天,后来才发现是扩展包没装。

2.2 Ubuntu 系统安装与配置

选哪个版本?我个人推荐 Ubuntu 22.04 LTS。为什么?LTS 版本有 5 年支持,稳定,而且社区资源多。你遇到问题,随便一搜就有答案。

安装步骤其实很简单,但我还是把关键点列出来:

  1. 下载 ISO:去 Ubuntu 官网下载 22.04 LTS 桌面版。
  2. 新建虚拟机:内存建议给 4GB 以上,硬盘 40GB 起步(动态分配)。
  3. 挂载 ISO:启动虚拟机,选择你下载的 ISO 文件。
  4. 安装系统:一路默认,但注意「安装类型」选「清除整个磁盘并安装 Ubuntu」——别怕,这只是虚拟磁盘。
  5. 设置用户名和密码:我习惯用 developer 作为用户名,方便记忆。
注意: 安装过程中,网络一定要连上。因为安装程序会下载更新和第三方驱动。如果网速慢,可以跳过更新,但驱动建议装。

装完之后,第一件事是什么?不是急着装工具,而是先做两件事:

  • 安装增强功能(Guest Additions):在 VirtualBox 菜单栏点击「设备」→「安装增强功能」。这样你才能用共享剪贴板、拖拽文件、自适应窗口。
  • 换源:把 apt 源换成国内的(比如阿里云、清华源)。不然你装个 gcc 都要等半天。

换源的方法很简单:

sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo apt update

嗯,这一步做完,你的 Ubuntu 才算真正「能用」。

2.3 基础开发工具安装

做内核开发,有几个工具是必须装的。我按重要程度排个序:

工具 用途 安装命令
gcc C 语言编译器 sudo apt install gcc
make 构建工具 sudo apt install make
git 版本控制 sudo apt install git
vim 文本编辑器 sudo apt install vim
build-essential 编译必备包 sudo apt install build-essential

你可以一次性装完:

sudo apt update
sudo apt install -y gcc make git vim build-essential

装完之后,验证一下:

gcc --version
make --version
git --version
vim --version

看到版本号输出,就说明装好了。

为什么 build-essential 这么重要? 它包含了 gcc、g++、make 等一堆编译工具。说白了,你装了这个包,基本就不用一个个去装别的了。我刚开始学的时候,不知道这个包,一个一个装,装到怀疑人生。

2.4 额外推荐工具

除了上面这些「必修课」,我还推荐你装几个「选修课」:

  • tree:查看目录结构,非常直观。sudo apt install tree
  • htop:比 top 更好用的进程管理器。sudo apt install htop
  • curl / wget:下载文件必备。sudo apt install curl wget
  • net-tools:包含 ifconfig 等网络工具。sudo apt install net-tools

我个人习惯还会装个 tmux,终端分屏神器。做内核开发时,经常要同时看日志、改代码、跑编译,一个 tmux 全搞定。

2.5 环境验证:写个 Hello Kernel

工具装完了,怎么知道环境没问题?写个最简单的内核模块试试。

创建一个文件 hello.c

#include <linux/module.h>
#include <linux/kernel.h>

int init_module(void) {
    printk(KERN_INFO "Hello, Kernel!\n");
    return 0;
}

void cleanup_module(void) {
    printk(KERN_INFO "Goodbye, Kernel!\n");
}

MODULE_LICENSE("GPL");

再写个 Makefile

obj-m += hello.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

然后编译:

make

如果没报错,说明你的 gcc、make、内核头文件都正常。接着加载模块:

sudo insmod hello.ko
dmesg | tail

看到 Hello, Kernel! 了吗?嗯,环境搭建成功了。

避坑指南: 如果编译时报错 No such file or directory,多半是没装内核头文件。执行 sudo apt install linux-headers-$(uname -r) 即可。我曾经在这个坑里摔了两次,后来学乖了,装完系统第一件事就是装头文件。

2.6 本章知识体系

下面这张图,帮你理清本章的核心逻辑:

开发环境搭建知识体系 开发环境搭建 虚拟机选型 Ubuntu系统 VirtualBox VMware 安装配置 换源优化 开发工具安装 gcc / make git / vim build-essential

这张图把本章内容串起来了:先选虚拟机,再装系统,最后装工具。每一步都有坑,但只要你按这个流程走,基本不会出大问题。


好了,环境搭好了,下一章我们开始真正接触内核源码。不过在那之前,我建议你先熟悉一下 Ubuntu 的基本操作,至少学会用终端、apt 包管理、vim 编辑文件。这些基本功,后面会反复用到。

最后说一句: 环境搭建是最枯燥的部分,但也是最值得花时间的。我见过太多人因为环境没配好,后面编译内核时各种报错,心态直接崩了。所以,慢慢来,别急。

专注资料整理