写点什么

Linux Lab 进阶: Qemu 模拟器 & Toolchain 工具链

用户头像
贾献华
关注
发布于: 2021 年 02 月 06 日
Linux Lab 进阶: Qemu 模拟器 & Toolchain 工具链

Qemu 模拟器


内置的 qemu 或许不能和最新的 Linux 内核配套工作,为此我们有时不得不自己编译 qemu,自行编译 qemu 的方法在 vexpress-a9 和 virt 开发板上已经验证通过。


首先,编译 qemu-system-ARCH:


make B=vexpress-a9
make qemu-downloadmake qemu-checkoutmake qemu-patchmake qemu-defconfigmake qemumake qemu-save
复制代码

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 每次编译都会检查子仓库是否较新,但是下载通常没那么顺利。如果下载过一次子仓库以后不想再更新,可以通过如下方式禁止更新:


make qemu git_module_status=0
复制代码

Toolchain 工具链


Linux 内核主线的升级非常迅速,内置的工具链可能无法与其保持同步,为了减少维护上的压力,环境支持添加外部工具链。譬如 ARM64/virt, CCVER 和 CCPATH。


列出支持的预编译工具链:


make gcc-list
复制代码

下载,解压缩和使能外部工具链:


make gcc
复制代码

切换编译器版本,例子如下:


make gcc-switch CCORI=internal GCC=4.7
make gcc-switch CCORI=linaro
复制代码

如果未指定外部工具链,则缺省使用内置的工具链。


如果不存在内置的工具链,则必须指定外部工具链。当前对该特性已经支持 aarch64, arm, riscv, mipsel, ppc, i386, x86_64 多个体系架构。


GCC 的版本可以分别在开发板特定的 Makefile 中针对 Linux, Uboot, Qemu 和 Root 分别指定:


GCC[LINUX_v2.6.11.12] = 4.4
复制代码

采用以上配置方法,在编译 v2.6.11.12 版本的 Linux 内核时会在 defconfig 时自动切换为使用指定的 GCC 版本。


在编译主机(host)的软件时,也需要做相应配置(需要显式指定 b=i386/pc):


make gcc-list b=i386/pcmake gcc-switch CCORI=internal GCC=4.8 b=i386/pc
复制代码


用户头像

贾献华

关注

及时当勉励 岁月不待人 2018.06.04 加入

https://2020.iosdevlog.com

评论

发布
暂无评论
Linux Lab 进阶: Qemu 模拟器 & Toolchain 工具链