Qemu开发ARM篇-7、uboot以及系统网络连接及配置

devtools/2024/10/19 9:38:07/

文章目录

  • 1、uboot及linux版本网络设置
    • 1、宿主机虚拟网卡创建
    • 2、uboot使用tap0网卡
    • 3、启动测试
  • 2、访问外网设置

在上一篇Qemu开发ARM篇-6、emmc/SD卡AB分区镜像制作并通过uboot进行挂载启动中,我们制作了AB分区系统镜像,并成功通过uboot加载kernel以及dtb并引导进入了系统,但目前uboot和系统还无法进行网络,这对于我们开发非常不便,在本节中,我们将讲解如何对uboot以及系统进行网络连接。

linux_3">1、uboot及linux版本网络设置

1、宿主机虚拟网卡创建

uboot联网这里我们使用tap进行连接,在使用之前,我们需要通过下面命令安装相应工具:

sudo apt install uml-utilities

安装成功之后我们就可以使用如下命令创建tap0网卡:

sudo tunctl -u root -t tap0

在这里插入图片描述
然后通过ifconfig -a即可查看到我们已经创建了tap0网卡了。
在这里插入图片描述
但是目前还没有ip,并且还未启动,我们通过如下命令设置ip并启动tap0网卡。

sudo ifconfig tap0 172.16.0.3 promisc up

通过上面配置,我们在宿主机上创建了虚拟网卡,接下来,我们将在uboot中使用该网卡。

2、uboot使用tap0网卡

修改./script/run_uboot_with_img.sh启动脚本,将原内容修改为如下启动命令:

ROOT_PATH=$(pwd)
qemu-system-arm  -M vexpress-a9 -m 512M  \
-kernel $ROOT_PATH/out/u-boot-arm/u-boot \
-net tap,ifname=tap0,script=no,downscript=no \
-net nic,macaddr=00:16:3e:00:00:01 \
-nographic \
-no-reboot \
-sd out/ab_img/vexpress_ab.img

上面主要就是加了-net tap,ifname=tap0,script=no,downscript=no,该语句用来指定使用那个网卡,以及网卡的类型,这里使用tap网卡。
以及-net nic,macaddr=00:16:3e:00:00:01用来设置mac地址。

然后在我们之前做环境变量的文件/etc/uboot_env.txt文件内容修改为如下:

bootcmd=mmc read 0x60003000 0x3800 0x10000;mmc read 0x60500000 0x1800 0x400;bootm 0x60003000 - 0x60500000
bootargs=root=/dev/mmcblk0p9 init=/usr/sbin/init console=ttyAMA0 ip=172.16.0.6:172.16.0.3:172.16.0.3:255.255.0.0::eth0:off
ipaddr=172.16.0.5
netmask=255.255.0.0

这里需要就是添加了uboot的ip以及掩码设置,同时在bootargs中添加了ip=172.16.0.6:172.16.0.3:172.16.0.3:255.255.0.0::eth0:off,用来设置开发板ip地址。
其中:各字段含义为:
ip=开发板 IP 地址:宿主机IP 地址:网关地址:子网掩码::开发板网口:off
这里我们设置开发板网卡eth0的ip为172.16.0.6,掩码为:255.255.0.0,同时设置默认网关为:172.16.0.3,因为我们宿主机的网卡ip为172.16.0.3。

上述工作做好之后,我们需要重新运行./script/make_AB_img.sh脚本进行镜像制作,因为我们修改了uboot镜像的值。

3、启动测试

进行做好之后,我们通过运行sudo ./script/run_uboot_with_img.sh 启动uboot,注意这里需要加sudo,因为tap0网卡需要root权限进行访问

在uboot界面我们按下回车,进入uboot控制台,使用ping命令查看uboot网络是否正常。
在这里插入图片描述
可以看到,uboot网络是可以正常ping通宿主机的。
然后我们运行run bootcmd启动kernel.
linux中使用ping命令查看是否能正常ping通宿主机。
在这里插入图片描述
可以可以正常ping通宿主机,并且网卡ip也是正常的。

然后查看linux系统中默认网关是否正常:route -n
在这里插入图片描述
可以参考默认网关也是正常的。

2、访问外网设置

有时,我们还需要能访问外网,以模拟tox相关功能,那开发板如何鞥通过宿主机网络访问外网呢?
这里我们需要再宿主机中开启网络转发的功能,将tapo的网络请求转发到宿主机能上网的这张网卡,并通过该网卡进行上网。

我的主机网卡情况如下:
在这里插入图片描述
其中:enp6s18是我主机的网卡,用以访问外网,tap0是虚拟网卡,用以连接qemu开发板。现在我们需要配置将tap0的外网请求转发到enp6s18以进行外网访问:

1、首先开启ubuntu内核转发功能:
临时生效:
echo "1" > /proc/sys/net/ipv4/ip_forward
永久生效的话,需要修改/etc/sysctl.conf
net.ipv4.ip_forward = 1
执行sysctl -p马上生效
查看是否开启成功:
执行该条命令,cat /proc/sys/net/ipv4/ip_forward
如果输出1则说明开启成功!

2、配置iptables
在终端输入如下命令:

sudo iptables -A FORWARD -i tap0 -o enp6s18 -j ACCEPT
sudo iptables -A FORWARD -i enp6s18 -o tap0 -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o enp6s18 -j MASQUERADE

注意上面tap0网卡和enp6s18 网卡需要根据自己物理机情况修改为自己网卡名字即可。
执行之后,只会临时起效,重启之后就失效了。
永久保存:
iptables-save > /etc/sysconfig/iptables
3、修改其他电脑的网关
将局域网中想要访问外网的电脑的网关改成服务器的局域网IP:172.16.0.3
这一步我们已经做过了,就是前面uboot传递bootargs的时候设置的网关地址。
上面工作做好之后,我们就可以启动开发板,看能否正常上网了。
在这里插入图片描述
可以看到,现在开发板已经可以成功访问外网网络了。


http://www.ppmy.cn/devtools/120496.html

相关文章

在2核2G服务器安装部署MySQL数据库可以稳定运行吗?

阿里云2核2G服务器可以安装MySQL数据库吗?当然可以,并且可以稳定运行MySQL数据库,目前阿里云服务器网aliyunfuwuqi.com使用的就是阿里云2核2G服务器,在云服务器上安装MySQL数据库,可以稳定运行。 目前阿腾云用于运行M…

ElementPlus---Timeline 时间线组件使用示例

介绍 使用ElementPlus时间线组件在后台首页实现通知公告列表展示&#xff0c;使用Vue3开发。 实现代码 Vue3代码 <el-timeline><el-timeline-itemstyle"max-width: 600px"v-for"(activity, index) in activities":key"index":times…

MySQL基础篇 - 多表查询

01 多表关系 【1】概念&#xff1a;项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各表结构之间也存在着各种联系&#xff0c;基本上分为三种…

【深度学习】—线性回归 线性回归的基本元素 线性模型 损失函数 解析解 随机梯度下降

【深度学习】— 线性回归 线性回归的基本元素 线性模型 损失函数 解析解 随机梯度下降 线性回归线性回归的基本元素 线性模型损失函数解析解随机梯度下降小批量随机梯度下降梯度下降算法的详细步骤解释公式 线性回归 回归&#xff08;regression&#xff09;是能为⼀个或多个⾃…

Android-Handle消息传递和线程通信

本文为作者学习笔记&#xff0c;如有误&#xff0c;请各位大佬指点 目录 一、同步异步 二、Java多线程通信 三、Handler是什么 四、Handler相关的类 五、Handler常用方法 1. 发送消息 2. 接收处理消息 3. 切换线程 六、使用Handler 使用Handler更新UI 使用Handler延…

JavaScript for循环语句

for循环 循环语句用于重复执行某个操作&#xff0c;for语句就是循环命令&#xff0c;可以指定循环的起点、终点和终止条件。它的格式如下 for(初始化表达式;条件;迭代因子){语句} for语句后面的括号里面&#xff0c;有三个表达式 初始化表达式(initialize):确定循环变量的初始…

java 解析excel (本地资源)

在Java中解析Excel文件&#xff0c;可以使用Apache POI库。以下是一个简单的例子&#xff0c;展示如何使用Apache POI读取一个Excel文件&#xff08;假设为.xlsx格式&#xff09;的内容。 首先&#xff0c;确保你的项目中包含了Apache POI的依赖。如果你使用Maven&#xff0c;…

机器学习(6):机器学习项目步骤(三)——选择算法并建立模型

1. 选择算法 a. 数据集里的某些特征和标签之间&#xff0c;存在着近似线性的关系. b. 这个数据集的标签是连续变量 因此选择回归分析算法 c. 我们在上一讲的可视化过程中&#xff0c;推测特征和标签可能存在线性关系 因此选择线性回归算法 2. 选择算法工具包 我们一般选算法包的…