2. 嵌入式Linux系统概览

做嵌入式Linux开发,第一件事就是把开发环境搭好。我见过不少新手,代码写得挺溜,结果卡在环境配置上,一卡就是好几天。说白了,环境就是你的工作台,台子不稳,活儿就没法干。

这一章,咱们就把虚拟机、Ubuntu系统、还有那些必备工具链,一个一个搞定。

2.1 为什么非要用虚拟机?

你可能会问:我直接在Windows上装个交叉编译链不行吗?嗯,理论上可以,但实际项目里你会遇到一堆麻烦。驱动编译依赖Linux内核头文件、特定的glibc版本、还有一堆只有Linux下才有的工具(比如menuconfig、dtc)。

我个人习惯用虚拟机,原因有三:

  • 隔离性:搞崩了虚拟机,宿主机毫发无伤。我曾经在原生Linux上乱改内核模块,结果把显卡驱动搞挂了,屏幕都点不亮……
  • 快照功能:装完一套工具链,打个快照。后面万一搞乱了,一分钟恢复,不用重装系统。
  • 跨平台:Windows笔记本跑Linux虚拟机,出差、演示都方便。
我的建议:如果你硬盘空间够(至少100GB空闲),用VMware Workstation Pro或者VirtualBox都行。VMware性能好一点,VirtualBox免费。我个人偏向VMware,快照管理更顺手。

2.2 虚拟机安装与Ubuntu系统配置

这里我以VMware Workstation Pro 17 + Ubuntu 22.04 LTS为例。步骤其实很简单,但有几个坑你得注意。

2.2.1 创建虚拟机

  1. 下载Ubuntu 22.04 LTS的ISO镜像(建议从清华镜像源下载,速度快)。
  2. 打开VMware,选择“创建新的虚拟机” → “典型(推荐)”。
  3. 选择“稍后安装操作系统”,别选“安装程序光盘映像文件”——我试过,有时候会卡在引导阶段。
  4. 客户机操作系统选“Linux”,版本选“Ubuntu 64位”。
  5. 处理器给2核,内存至少4GB(我一般给8GB)。
  6. 磁盘大小建议80GB以上,选择“将虚拟磁盘存储为单个文件”。
避坑指南:我曾经图省事选了20GB磁盘,结果编译一次内核就爆了。嵌入式开发,内核源码、交叉编译链、根文件系统,随便一个都是几个GB。80GB起步,别省。

2.2.2 安装Ubuntu系统

启动虚拟机,挂载ISO镜像,按提示安装。这里我提几个关键点:

  • 分区方案:新手直接选“清除整个磁盘并安装Ubuntu”就行。如果你有洁癖,可以手动分区:/boot 1GB,/ 40GB,/home 剩余全部。
  • 用户名和密码:别设太复杂,但也不能太简单。我习惯用embed作为用户名,方便记忆。
  • 安装过程中断网:安装时建议拔掉网线或断开虚拟机网络。为什么?因为Ubuntu安装器会去下载更新,慢得要死,而且有时候会卡住。装完系统再更新也不迟。

2.2.3 系统初始化配置

系统装好后,第一件事就是换源。Ubuntu默认的源在国外,下载速度感人。换成国内镜像源,比如阿里云或清华的。

# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 替换为清华源(Ubuntu 22.04)
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list

# 更新
sudo apt update
sudo apt upgrade -y

然后安装VMware Tools(或open-vm-tools),这样才能实现宿主机和虚拟机之间的文件拖拽、剪贴板共享。

sudo apt install open-vm-tools open-vm-tools-desktop -y
sudo reboot

2.3 必备工具链安装

环境搭好了,接下来装干活用的家伙。这些工具是嵌入式Linux开发的标配,缺一不可。

工具 用途 安装命令
git 版本控制,拉取内核源码、驱动代码 sudo apt install git -y
vim 代码编辑器,看代码、改配置 sudo apt install vim -y
build-essential 编译工具链(gcc、g++、make等) sudo apt install build-essential -y
ncurses-dev 内核配置界面menuconfig依赖 sudo apt install libncurses-dev -y
flex & bison 内核解析设备树、配置文件的工具 sudo apt install flex bison -y
openssl-dev 内核模块签名、HTTPS支持 sudo apt install libssl-dev -y

一次性安装所有工具:

sudo apt install -y git vim build-essential libncurses-dev flex bison libssl-dev

装完这些,你的开发环境就算基本成型了。

2.3.1 配置git

git装完后,记得配一下用户名和邮箱。不然提交代码时会报错。

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

# 可选:配置别名,提高效率
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status

我个人习惯把git log美化一下,看着舒服:

git config --global alias.lg "log --oneline --graph --all --decorate"

2.3.2 vim的小优化

vim默认配置比较朴素,我建议至少打开语法高亮和行号:

echo "syntax on" >> ~/.vimrc
echo "set number" >> ~/.vimrc
echo "set tabstop=4" >> ~/.vimrc
echo "set shiftwidth=4" >> ~/.vimrc

这样看内核代码时,缩进和结构一目了然。

2.4 验证环境是否可用

工具装完了,咱们写个简单的C程序测试一下编译链是否正常。

// hello.c
#include <stdio.h>

int main() {
    printf("Hello, Embedded Linux!\n");
    return 0;
}
gcc hello.c -o hello
./hello

如果输出Hello, Embedded Linux!,说明环境没问题。

小技巧:你也可以用which gcc和gcc --version确认gcc的路径和版本。后面装交叉编译链时,这个习惯能帮你快速定位问题。

2.5 本章知识体系

下面这张图把开发环境搭建的整个流程串起来了。你可以对照着检查自己有没有漏掉哪一步。

开发环境搭建流程 宿主机 (Windows/Linux) 虚拟机 (VMware/VirtualBox) Ubuntu 22.04 LTS 系统配置 (换源/工具) 必备工具链 (git/vim/gcc) 环境验证 (编译测试) 说明:三个分支可以并行进行,但建议先完成系统配置,再装工具链 最后用编译测试验证整个环境是否可用

环境搭好了,后面咱们就可以开始搞真正的驱动移植了。记住,这一步别着急,慢慢来,把基础打牢。我当年就是急着写代码,结果环境没配好,编译报错查了半天,最后发现是工具链版本不对——白白浪费一整天。