ARM:从裸机到操作系统01 —— 搭建仿真开发环境

ARM开发:搭建仿真开发环境

搭建仿真开发环境

学习ARM开发时,使用虚拟开发板(如QEMU模拟器)是一种高效且低成本的方式,尤其适合在没有硬件设备的情况下熟悉ARM架构、操作系统移植、驱动开发等内容。



一、开发环境

开发机器:Ubuntu24.04
虚拟硬件:QEMU-9.2.2
交叉编译工具链:gcc-arm-none-eabi
调试器(GDB):GDB是一个强大的调试工具,可以与QEMU配合使用

QEMU简介
QEMU(Quick Emulator)是一款开源的机器仿真与虚拟化工具,支持跨平台硬件模拟和高效的虚拟化方案。它通过动态二进制翻译技术,能够模拟多种CPU架构(如x86、ARM、RISC-V等),允许用户在本地运行不同指令集的操作系统或程序,适用于开发测试、嵌入式调试等场景。在虚拟化模式下,QEMU与KVM(Kernel-based Virtual Machine)结合,可直接调用宿主机的硬件资源,提供接近原生的性能。

QEMU支持全系统仿真(模拟整个计算机设备,包括CPU、内存、外设等)和用户模式仿真(运行单一跨架构程序),具备灵活的配置选项,如自定义虚拟硬件、网络设备、存储驱动等。


二、安装QEMU

1. 使用apt-get命令:

大多数 Linux 发行版已经为 QEMU(或 KVM)提供了二进制包。

sduo apt-get install qemu-system

这种方式安装的QEMU版本一般不是最新的,在Ubuntu20.04下安装的QEMU版本为4.2.1,Ubuntu24.04下安装的QEMU版本为8.2.2。

如果需要更新的版本的话,需要采用源码本地编译安装的办法。

2. QEMU源码安装

2.1 下载源码
QEMU官网下载地址:https://www.qemu.org/download/.
qemu所有releases版本下载地址:https://download.qemu.org/

wget https://download.qemu.org/qemu-9.2.2.tar.xz

解压命令:tar xvJf qemu-9.2.2.tar.xz

从git下载QEMU

git clone https://gitlab.com/qemu-project/qemu.git

2.2 安装编译依赖
参考文档:https://wiki.qemu.org/Hosts/Linux

必要依赖:

  • git, 版本管理器
  • glib2.0-dev,这会自动包含 zlib1g-dev
  • libfdt-devel
  • Flex(词法分析器生成器) Bison(语法分析器生成器)
sudo apt update
sudo apt-get install git build-essential libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build bison flex python3-pip

推荐额外依赖:

  • git-email,用于发送补丁
  • libsdl2-dev (libsdl2-devel),基于 SDL 的图形用户界面需要
  • libgtk-3-dev (gtk3-devel),用于简单的 UI 而不是 VNC
  • libvte-dev (vte291-devel),用于通过 GTK 接口访问 QEMU 监视器和串行/控制台设备
  • libcapstone-dev (capstone-devel),用于反汇编 CPU 指令
sudo apt-get install git-email
sudo apt-get install libaio-dev libbluetooth-dev libcapstone-dev libbrlapi-dev libbz2-dev
sudo apt-get install libcap-ng-dev libcurl4-gnutls-dev libgtk-3-dev
sudo apt-get install libibverbs-dev libjpeg8-dev libncurses5-dev libnuma-dev
sudo apt-get install librbd-dev librdmacm-dev
sudo apt-get install libsasl2-dev libsdl2-dev libseccomp-dev libsnappy-dev libssh-dev
sudo apt-get install libvde-dev libvdeplug-dev libvte-2.91-dev libxen-dev liblzo2-dev
sudo apt-get install valgrind xfslibs-dev libssl-dev
sudo apt-get install libnfs-dev libiscsi-dev

上述清单远远不够完整。为实现最大的代码覆盖率,应启用尽可能多的 QEMU 功能。在运行 configure 时,你会看到很多行是 “YES”,只有少数几行是 “NO”。

qemu9.0之后的版本要求:
glib>=2.66
python>=3.8
Ubuntu20.04在不升级glib和python3的情况下可以安装较新的9.0.x版本
查看glib版本:pkg-config --modversion glib-2.0

2.3 编译

进入qemu源码目录
mkdir build
cd build
../configure
不使用 --target-list ,会编译安装各种平台的Qemu模拟器(aarch64,riscv64等)
不指定 --prefix,一般会安装到 /usr/local
make

2.4 安装
make运行结束后使用以下命令安装:
sudo make install

检查qemu版本:
qemu-system-arm --version

查看支持的开发板
qemu-system-arm -M help

3. 删除QEMU

源码编译安装的qemu需要手动卸载:

可执行文件默认放在/usr/local/bin 
库文件默认存放在/usr/local/libexec
共享文件默认存放在/usr/local/share 
文档在 /usr/local/share/doc/qemu/

卸载源码只需将上面四个目录中相关文件或者目录删除

sudo rm -rf /usr/local/bin/qemu-* 
sudo rm -rf /usr/local/libexec/qemu-bridge-helper 
sudo rm -rf /usr/local/share/qemu
sudo rm -rf /usr/local/share/doc/qemu

三、交叉编译工具安装

GNU Arm Embedded Toolchain 是一套用于 C、C++ 和汇编编程的即用型开源工具。GNU Arm 嵌入式工具链面向 32 位 Arm Cortex-A、Arm Cortex-M 和 Arm Cortex-R 处理器系列。GNU Arm 嵌入式工具链包括 GNU 编译器 (GCC),可直接从 Arm 免费获得,用于 Windows、Linux 和 Mac OS X作系统上的嵌入式软件开发。

1. apt-get命令安装

使用 Ubuntu 自带的 apt 工具安装 gcc-arm-none-eabi。

sudo apt-get install gcc-arm-none-eabi

安装完成后,输入命令获取版本号。

arm-none-eabi-gcc --version

使用命令安装的工具链不包含arm-none-eabi-gdb调试工具,建议去官网下载。

2. 手动下载安装

GUN Arm官网下载:gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
下载之后解压到指定目录

sudo mkdir /opt/tool
sudo tar -jxf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 -C /opt/tool/

添加到环境变量:

export PATH=$PATH:/opt/tool/gcc-arm-none-eabi-10.3-2021.10/bin

命令 “PATH=$PATH:路径”可以把这个路径加入环境变量,但是退出这个命令行窗口就失效了。

永久有效配置如下:
在/home/用户名下/.bashrc文件末尾中添加下面的内容:
export PATH=$PATH:/opt/tool/gcc-arm-none-eabi-10.3-2021.10/bin,然后保存。

最后执行:source .bashrc 使其生效。

输入命令获取版本号:arm-none-eabi-gcc --version,验证安装成功。

3. arm-none-eabi-gdb问题记录:

在使用arm-none-eabi-gdb命令时,比如arm-none-eabi-gdb --version出现以下错误:

arm-none-eabi-gdb: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
和
arm-none-eabi-gdb: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

使用 find 命令查找库的路径:

sudo find / -name  libncurses.so*

输出:

/usr/lib/x86_64-linux-gnu/libncurses.so
/usr/lib/x86_64-linux-gnu/libncurses.so.6
/usr/lib/x86_64-linux-gnu/libncurses.so.6.4
/usr/lib/i386-linux-gnu/libncurses.so.6
/usr/lib/i386-linux-gnu/libncurses.so.6.4
find: ‘/run/user/1000/doc’: Permission denied
find: ‘/run/user/1000/gvfs’: Permission denied
/snap/core22/1748/usr/lib/x86_64-linux-gnu/libncurses.so.6
/snap/core22/1748/usr/lib/x86_64-linux-gnu/libncurses.so.6.3

说明库是安装了的。并且使用apt命令发现没有 libncurses5

# sudo apt search libncurses
Sorting... Done
Full Text Search... Done
libncurses-dev/noble,now 6.4+20240113-1ubuntu2 amd64 [installed]
  developer's libraries for ncurses

libncurses6/noble,now 6.4+20240113-1ubuntu2 amd64 [installed,automatic]
  shared libraries for terminal handling

libncursesada-dev/noble-updates,noble-security 6.3.20211021-11build1.1 amd64
  Ada binding to the ncurses text interface library: development

libncursesada6.2.4/noble-updates,noble-security 6.3.20211021-11build1.1 amd64
  Ada binding to the ncurses text interface library: shared library

libncursesw6/noble,now 6.4+20240113-1ubuntu2 amd64 [installed,automatic]
  shared libraries for terminal handling (wide character support)

查看系统库文件:

# ldconfig -p | grep libncurses
libncursesw.so.6 (libc6,x86-64) => /lib/x86_64-linux-gnu/libncursesw.so.6
libncurses.so.6 (libc6,x86-64) => /lib/x86_64-linux-gnu/libncurses.so.6
libncurses.so.6 (libc6) => /lib/i386-linux-gnu/libncurses.so.6

使用如下命令尝试创建符号链接:

sudo ln -s /lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/libncurses.so.5

用同样的方法解决libtinfo.so.5缺失问题

sudo ln -s /lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/libtinfo.so.5

再次运行arm-none-eabi-gdb --version,看到以下信息及安装完成。

GNU gdb (GNU Arm Embedded Toolchain 10.3-2021.10) 10.2.90.20210621-git
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

至此,开发环境和交叉编译工具链配置等相关准备工作已完成,接下来我们将正式开始ARM从裸机到操作系统的实现之路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uoscn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值