2. 嵌入式Linux系统概览
做嵌入式Linux开发,第一件事就是把开发环境搭好。我见过不少新手,代码写得挺溜,结果卡在环境配置上,一卡就是好几天。说白了,环境就是你的工作台,台子不稳,活儿就没法干。
这一章,咱们就把虚拟机、Ubuntu系统、还有那些必备工具链,一个一个搞定。
2.1 为什么非要用虚拟机?
你可能会问:我直接在Windows上装个交叉编译链不行吗?嗯,理论上可以,但实际项目里你会遇到一堆麻烦。驱动编译依赖Linux内核头文件、特定的glibc版本、还有一堆只有Linux下才有的工具(比如menuconfig、dtc)。
我个人习惯用虚拟机,原因有三:
- 隔离性:搞崩了虚拟机,宿主机毫发无伤。我曾经在原生Linux上乱改内核模块,结果把显卡驱动搞挂了,屏幕都点不亮……
- 快照功能:装完一套工具链,打个快照。后面万一搞乱了,一分钟恢复,不用重装系统。
- 跨平台:Windows笔记本跑Linux虚拟机,出差、演示都方便。
2.2 虚拟机安装与Ubuntu系统配置
这里我以VMware Workstation Pro 17 + Ubuntu 22.04 LTS为例。步骤其实很简单,但有几个坑你得注意。
2.2.1 创建虚拟机
- 下载Ubuntu 22.04 LTS的ISO镜像(建议从清华镜像源下载,速度快)。
- 打开VMware,选择“创建新的虚拟机” → “典型(推荐)”。
- 选择“稍后安装操作系统”,别选“安装程序光盘映像文件”——我试过,有时候会卡在引导阶段。
- 客户机操作系统选“Linux”,版本选“Ubuntu 64位”。
- 处理器给2核,内存至少4GB(我一般给8GB)。
- 磁盘大小建议80GB以上,选择“将虚拟磁盘存储为单个文件”。
2.2.2 安装Ubuntu系统
启动虚拟机,挂载ISO镜像,按提示安装。这里我提几个关键点:
- 分区方案:新手直接选“清除整个磁盘并安装Ubuntu”就行。如果你有洁癖,可以手动分区:
/boot1GB,/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 本章知识体系
下面这张图把开发环境搭建的整个流程串起来了。你可以对照着检查自己有没有漏掉哪一步。
环境搭好了,后面咱们就可以开始搞真正的驱动移植了。记住,这一步别着急,慢慢来,把基础打牢。我当年就是急着写代码,结果环境没配好,编译报错查了半天,最后发现是工具链版本不对——白白浪费一整天。