2. 宿主机环境准备:Ubuntu/Debian系统安装、基础开发工具链安装、网络环境配置
好,咱们正式开始动手。这一章说白了就是搭台子——把开发用的“根据地”建起来。很多初学者急着跑QEMU,结果卡在环境上,一卡就是半天。我刚开始搞RISC-V移植那会儿,就因为gcc版本不对,折腾了整整一个周末。嗯,咱们别走弯路。
2.1 操作系统选择:Ubuntu还是Debian?
我个人习惯用Ubuntu LTS版本。为什么?社区活跃,遇到问题随便一搜就有答案。Debian当然更稳定,但包稍微旧一点。如果你跟我一样是“出了问题想马上解决”的性格,选Ubuntu 22.04 LTS或24.04 LTS准没错。
| 特性 | Ubuntu 22.04 LTS | Debian 12 |
|---|---|---|
| 内核版本 | 5.15 | 6.1 |
| GCC默认版本 | 11.2 | 12.2 |
| 软件包新鲜度 | 较高 | 较保守 |
| 适合场景 | 快速原型、学习 | 生产环境、服务器 |
我的建议: 如果你是虚拟机里装,直接上Ubuntu 22.04。硬盘至少分80GB,内存给4GB以上。别抠门,后面编译工具链和QEMU源码很吃空间。
2.2 基础开发工具链安装
系统装好之后,第一件事就是装工具。你想想看,没有git你怎么拉代码?没有make你怎么编译?没有gdb你怎么调试?这些都是嵌入式开发的“手脚”。
2.2.1 一键安装核心工具
打开终端,直接跑下面这条命令。我习惯把它叫做“开工仪式”:
sudo apt update
sudo apt upgrade -y
sudo apt install -y \
build-essential \
git \
make \
gcc \
gdb \
cmake \
autoconf \
libtool \
pkg-config \
flex \
bison \
libglib2.0-dev \
libpixman-1-dev \
libncurses5-dev \
libssl-dev \
python3 \
python3-pip \
ninja-build
注意: 千万别跳过
build-essential。这个包包含了gcc、g++、make等核心编译工具。我曾经帮一个同事排查问题,搞了半天发现他没装这个包,编译什么都报“缺少头文件”。
2.2.2 验证安装结果
装完之后,我习惯逐个检查一下版本。别嫌麻烦,这一步能帮你提前发现版本不兼容的问题:
gcc --version
gdb --version
git --version
make --version
python3 --version
输出应该类似这样:
gcc (Ubuntu 11.2.0-19ubuntu1) 11.2.0
GNU gdb (Ubuntu) 12.0.90
git version 2.34.1
GNU Make 4.3
Python 3.10.12
关键点: gcc版本最好在10以上,gdb在12以上。太老的版本对RISC-V的支持不完整,后面调试的时候会出一些莫名其妙的问题。
2.3 网络环境配置
搞嵌入式开发,网络环境很重要。你要从GitHub拉代码,要下载工具链,要更新包。网络不通,寸步难行。
2.3.1 代理配置(如果你在公司内网)
我在大厂待过,内网机器通常要走代理。配置方法很简单:
# 设置HTTP代理
export http_proxy=http://your-proxy-ip:port
export https_proxy=http://your-proxy-ip:port
# 如果代理需要认证
export http_proxy=http://username:password@your-proxy-ip:port
# 让git也走代理
git config --global http.proxy http://your-proxy-ip:port
git config --global https.proxy http://your-proxy-ip:port
小技巧: 把这些export命令写到
~/.bashrc 里,这样每次打开终端就不用重新设置了。我一般还会加个 alias unproxy='unset http_proxy https_proxy',方便临时取消代理。
2.3.2 测试网络连通性
配置完代理,先测试一下能不能访问外网:
# 测试网络连通性
ping -c 4 github.com
# 测试能否拉取代码
git clone https://github.com/qemu/qemu.git --depth 1
# 测试apt源
sudo apt update
如果ping不通,先检查DNS:
cat /etc/resolv.conf
# 应该能看到 nameserver 8.8.8.8 或类似配置
2.3.3 配置国内镜像源(可选)
如果你在国内,apt源和pip源建议换成国内的。速度能快10倍不止:
# 备份原源
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
注意: 不同Ubuntu版本的源地址不一样。22.04用jammy,20.04用focal。别搞混了,否则apt update会报404。
2.4 本章知识体系总览
下面这张图把本章的核心逻辑串起来了。你可以把它当作一个检查清单:
2.5 常见问题与避坑指南
环境准备这一步,我踩过的坑比走过的路还多。挑几个典型的说说:
- apt update报错404: 多半是源地址写错了。检查一下Ubuntu版本代号,22.04是jammy,不是focal。
- git clone超时: 要么是代理没配,要么是DNS解析慢。试试
git config --global http.lowSpeedLimit 0关掉限速。 - gcc编译报错“找不到头文件”: 大概率没装build-essential。别问我怎么知道的——我当年也犯过这个错。
- gdb无法调试RISC-V程序: 版本太老。Ubuntu 20.04自带的gdb 9.x对RISC-V支持不完整,建议升级到12以上。
总结一下: 环境准备其实就三件事——装系统、装工具、配网络。每一步做完都验证一下,别一口气装完再回头查。我现在的习惯是每装一个包就跑一次 --version,虽然啰嗦,但省心。