Linux Lab 进阶: Qemu 模拟器 & Toolchain 工具链
Qemu 模拟器
内置的 qemu 或许不能和最新的 Linux 内核配套工作,为此我们有时不得不自己编译 qemu,自行编译 qemu 的方法在 vexpress-a9 和 virt 开发板上已经验证通过。
首先,编译 qemu-system-ARCH:
qemu-ARCH-static 和 qemu-system-ARCH 是不能一起编译的,为了制作 qemu-ARCH-static,请在开发板的 Makefile 中首先使能 QEMU_US=1
然后再重新编译。
如果指定了 QEMU 和 QTOOL,那么实验环境会优先使用 bsp 子模块中的 QEMU 和 QTOOL,而不是已经安装在本地系统中的版本,但会优先使用最近编译的版本,如果最近有编译过的话。
在为新的内核实现移植时,如果使用 2.5 版本的 QEMU,Linux 5.0 在运行过程中会挂起,将 QEMU 升级到 2.12.0 后,问题消失。请在以后内核升级过程中注意相关的问题。
Qemu 每次编译都会检查子仓库是否较新,但是下载通常没那么顺利。如果下载过一次子仓库以后不想再更新,可以通过如下方式禁止更新:
Toolchain 工具链
Linux 内核主线的升级非常迅速,内置的工具链可能无法与其保持同步,为了减少维护上的压力,环境支持添加外部工具链。譬如 ARM64/virt, CCVER 和 CCPATH。
列出支持的预编译工具链:
下载,解压缩和使能外部工具链:
切换编译器版本,例子如下:
如果未指定外部工具链,则缺省使用内置的工具链。
如果不存在内置的工具链,则必须指定外部工具链。当前对该特性已经支持 aarch64, arm, riscv, mipsel, ppc, i386, x86_64 多个体系架构。
GCC 的版本可以分别在开发板特定的 Makefile 中针对 Linux, Uboot, Qemu 和 Root 分别指定:
采用以上配置方法,在编译 v2.6.11.12 版本的 Linux 内核时会在 defconfig 时自动切换为使用指定的 GCC 版本。
在编译主机(host)的软件时,也需要做相应配置(需要显式指定 b=i386/pc
):
评论