2. RISC-V架构基础

好,咱们正式开始动手。这一章说白了就是搭台子——把开发用的“根据地”建起来。很多初学者急着跑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 本章知识体系总览

下面这张图把本章的核心逻辑串起来了。你可以把它当作一个检查清单:

宿主机环境准备核心流程 1. 系统安装 Ubuntu 22.04 LTS 2. 基础工具链 git / gcc / gdb / make 3. 网络配置 代理 / 镜像源 验证:版本检查 + 网络连通性测试 核心工具 build-essential cmake / ninja 依赖库 glib2.0 / pixman ncurses / openssl 脚本语言 Python 3 pip ⚠️ 避坑提醒 gcc版本 ≥ 10,gdb版本 ≥ 12,硬盘空间 ≥ 80GB

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,虽然啰嗦,但省心。