2026-02-09
RT-thread
00

目录

实验环境
实验步骤
1. 配置menuconfig,开启网卡驱动,LWIP组件
2. 编译RT-thread工程
3. 修改qemu.sh文件
4. 运行qemu.sh,在msh中配置网络并测试
参考

本文描述了在Ubuntu22.04的环境下利用QEMU模拟开发板,通过RT-thread以及该系统自带的软件包实现网络通信的过程。

实验环境

  • Ubuntu 22.04.5 LTS
  • Rt-thread 5.3.0
  • QEMU emulator version 6.2.0

实验步骤

1. 配置menuconfig,开启网卡驱动,LWIP组件

shell
scons --menuconfig

开启网卡驱动 图1 开启网卡驱动

开启网卡驱动 图2 开启LWIP组件

事实上我发现开启网卡驱动后会自动开启LWIP组件

2. 编译RT-thread工程

shell
scons

编译结果 图3 编译结果

3. 修改qemu.sh文件

在执行脚本前先安装相关工具

shell
sudo apt-get install bridge-utils sudo apt-get install uml-utilities

br0和tap0的ip要和无线网卡处在同一网段下,并且br0的ip作为tap0的网关

shell
#!/bin/bash # 1. 初始化sd.bin文件(保留原逻辑) if [ ! -f "sd.bin" ]; then dd if=/dev/zero of=sd.bin bs=1024 count=65536 fi # 2. 检测是否可上网(保留原逻辑,优化返回值注释) function network() { local ret_code=`curl -I -s --connect-timeout 1 www.baidu.com -w %{http_code} | tail -n1` if [ "x$ret_code" = "x200" ]; then return 1 # 网络畅通 else return 0 # 网络不通 fi } # 3. 核心网络配置(统一逻辑,放弃绑定无线网卡到网桥,改用静态IP+NAT) network if [ $? -eq 0 ]; then echo "网络不通畅,使用静态IP+NAT配置网桥" else echo "网络畅通,使用静态IP+NAT配置网桥" fi # 4. 清理原有可能存在的网桥/接口(避免冲突) sudo ifconfig br0 down 2>/dev/null sudo brctl delbr br0 2>/dev/null sudo ifconfig tap0 down 2>/dev/null sudo tunctl -d tap0 2>/dev/null # 5. 创建并配置br0网桥(关键:不绑定无线网卡,仅作为内网桥接) sudo brctl addbr br0 # 创建br0网桥 sudo brctl stp br0 off # 关闭生成树协议 sudo brctl setfd br0 1 # 设置转发延迟 sudo brctl sethello br0 1 # 设置hello时间 sudo ifconfig br0 192.168.10.100 netmask 255.255.255.0 promisc up # 给br0配置静态内网IP # 6. 启用内核IP转发(NAT必需) sudo sysctl -w net.ipv4.ip_forward=1 >/dev/null 2>&1 # 7. 配置NAT规则(让br0的流量通过无线网卡wlp0s20f3转发) # 清除原有同类型规则,避免重复 sudo iptables -t nat -F POSTROUTING 2>/dev/null sudo iptables -F FORWARD 2>/dev/null # 添加NAT转发规则 sudo iptables -t nat -A POSTROUTING -o wlp0s20f3 -j MASQUERADE sudo iptables -A FORWARD -i br0 -o wlp0s20f3 -j ACCEPT sudo iptables -A FORWARD -i wlp0s20f3 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT # 8. 创建tap0并加入br0(供QEMU使用) sudo tunctl -t tap0 -u root sudo brctl addif br0 tap0 sudo ifconfig tap0 0.0.0.0 promisc up # 9. 打印网桥信息(验证配置) echo "=== 网桥br0配置信息 ===" sudo brctl show br0 sudo brctl showstp br0 echo "=== br0 IP配置 ===" ip addr show br0 | grep inet echo "=== NAT规则 ===" sudo iptables -t nat -L POSTROUTING -n # 10. 启动QEMU虚拟机(保留原参数,网络已通过br0/tap0+NAT配置) sudo qemu-system-arm \ -M vexpress-a9 \ -smp cpus=2 \ -kernel rtthread.bin \ -serial stdio \ -sd sd.bin \ -net nic -net tap,ifname=tap0

由于我的电脑目前只用了无线网卡,于是采用让br0的流量通过无线网卡wlp0s20f3转发的方案。如果有网线连接路由器,可以采用绑定有线网卡到网桥的方案具体参考https://www.bilibili.com/read/cv24368022/?opus_fallback=1

4. 运行qemu.sh,在msh中配置网络并测试

msh
ifconfig e0 192.168.10.200 192.168.10.100 255.255.255.0 #设置ip 网关(br0) 子网掩码 dns e0 0 114.114.114.114 #设置DNS服务器

配置网络并测试 图4 配置网络并测试

参考