参考文章

  • qemu 源码编译 qemu-system-aarch64 的方法
  • RT-Thread 5.0.1 qemu-virt64-aarch64 解决编译问题

前言

  • 最近需要使用 RT-Thread qemu-virt64-aarch64,验证 aarch64 平台,也就是 ARM64 平台的一些网络功能,需要开启 qemu-virt64-aarch64 的网络功能
  • 开发环境使用的 ubuntu 20.04,发现开启网络驱动与组件后,无法正常的初始化 qemu 网络设备
  • 经过验证,发现需要更新 qemu qemu-system-aarch64,更新方法 参考上篇文章:
    qemu 源码编译 qemu-system-aarch64 的方法

开发环境

  • 编译 qemu-virt64-aarch64,建议使用 ubuntu 20.04 Linux 环境,而不是 windows 环境。
  • 具体编译环境参考: RT-Thread 5.0.1 qemu-virt64-aarch64 解决编译问题
  • set_env.sh
#!/bin/bash

export RTT_CC=gcc
#export RTT_EXEC_PATH=/home/zhangsz/linux/tools/gcc-arm-10.2-2020.11-x86_64-aarch64-none-elf/bin
export RTT_EXEC_PATH=/home/zhangsz/linux/tools/gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf/bin
export RTT_CC_PREFIX=aarch64-none-elf-

export PATH=$PATH:$RTT_EXEC_PATH

echo "CC        => ${RTT_CC}"
echo "PREFIX    => ${RTT_CC_PREFIX}"
echo "EXEC_PATH => ${RTT_EXEC_PATH}"
  • source set_env.sh,注意使用 aarch64-none-elf- 工具链,否则可能编译失败

开启 qemu-virt64-aarch64 网络

  • 默认 RT-Thread BSP qemu-virt64-aarch64 为开启网络功能,需要手动开启
  • scons --menuconfig 进入图形配置界面
.config - RT-Thread Project Configuration
     > AARCH64 qemu virt64 configs
        [*] Using VirtIO NET

RT-Thread 5.0.1 qemu-virt64-aarch64 解决网络问题_qemu

  • 开启网络组件: SAL、net device、 LWIP
  • RT-Thread 5.0.1 qemu-virt64-aarch64 解决网络问题_qemu_02

  • 适当增加 tcp 与 lwip 线程的栈大小
  • RT-Thread 5.0.1 qemu-virt64-aarch64 解决网络问题_网络_03

  • 确认 Using VirtIO NET 的驱动框架使能
.config - RT-Thread Project Configuration
 > RT-Thread Components 
     > Device Drivers 
         > Using VirtIO device drivers

            --- Using VirtIO device drivers 
            VirtIO Version (VirtIO v1.0)  ---> 

                -*-   Using VirtIO NET

RT-Thread 5.0.1 qemu-virt64-aarch64 解决网络问题_网络设备_04

编译与运行

  • scons 即可编译,当前确认使用 工具链 gcc-arm-10.2-2020.11-x86_64-aarch64-none-elf.tar.xzgcc-arm-11.2-2022.02-x86_64-aarch64-none-elf.tar.xz 均可以正常运行 qemu
  • 运行效果

RT-Thread 5.0.1 qemu-virt64-aarch64 解决网络问题_aarch64_05

小结

  • 如果 开启 qemu 后,没有发现网络设备:如 virtio-net0 Network Interface 1,需要更新 qemu 的版本,也就是 qemu-system-aarch64 的版本,如 7.0 以上,当前最新应该是 8.0
  • 开启了 qemu 网络组件,还需要进一步使用网络组件,实现相应的网络功能,如 wget https