QEMU模拟开发板系列3——通过uboot启动kernel+rootfs

通过uboot启动kernel+rootfs

QEMU支持网络通信方法

QEMU支持四种网络功能,分别是

  1. 用户协议栈方式
  2. socket方式
  3. TAP/Bridge方式
  4. VDE方式

以下主要采用桥接方式
安装必要模块支持

apt install uml-utilities
apt install bridge-utils

查看/dev/net/tun文件
如果该文件存在,则表明内核已经支持Tun,如果不存在,则需要加载tun模块,并创建该文件

ls -l /dev/net/tun

创建br0网桥

ifconfig <你的网卡名称(能上网的那张)> down	# 首先关闭宿主机网卡接口
brctl addbr br0                     		# 添加一座名为 br0 的网桥
brctl addif br0 <你的网卡名称>        		# 在 br0 中添加一个接口
brctl stp br0 off                   		# 如果只有一个网桥,则关闭生成树协议
brctl setfd br0 1                   		# 设置 br0 的转发延迟
brctl sethello br0 1                		# 设置 br0 的 hello 时间
ifconfig br0 0.0.0.0 promisc up     		# 启用 br0 接口
ifconfig <你的网卡名称> 0.0.0.0 promisc up	# 启用网卡接口
dhclient br0                        		# 从 dhcp 服务器获得 br0 的 IP 地址
brctl show br0                      		# 查看虚拟网桥列表
brctl showstp br0                   		# 查看 br0 的各接口信息

创建TAP设备

modprobe tun
tunctl -t tap0 -u root              		# 创建一个 tap0 接口,只允许 root 用户访问
brctl addif br0 tap0                		# 在虚拟网桥中增加一个 tap0 接口
ifconfig tap0 0.0.0.0 promisc up    		# 启用 tap0 接口
brctl showstp br0                   		# 显示 br0 的各个接口

测试运行

qemu-system-arm \
		-M vexpress-a9 \
		-nographic \
		-m 512M \
		-kernel u-boot \
		-net nic,vlan=0 \
		-net tap,vlan=0,ifname=tap0

在uboot命令行下,设置ip和netmask,ping主机

setenv ipaddr 10.0.219.100
setenv serverip 10.0.219.20
setenv netmask 255.255.0.0
saveenv

ping 10.0.219.20

测试结果
在这里插入图片描述
可以看到主机host is alive,表示QEMU已经支持网络功能。

配置u-boot

主要是修改include/configs/vexpress_common.h,并重新编译u-boot

添加默认环境变量

/* netmask */
#define CONFIG_IPADDR   10.0.219.100
#define CONFIG_NETMASK  255.255.0.0
#define CONFIG_SERVERIP 10.0.219.20

修改CONFIG_BOOTCOMMAND参数

#define CONFIG_BOOTCOMMAND		"run bootflash;"
修改为:
#define CONFIG_BOOTCOMMAND		"tftp 0x60003000 uImage; setenv bootargs 'root=/dev/mmcblk0 console=ttyAMA0'; bootm 0x60003000"

测试运行

qemu-system-arm \
		-M vexpress-a9 \
		-nographic \
		-m 512M \
		-kernel u-boot \
		-net nic,vlan=0 \
		-net tap,vlan=0,ifname=tap0

测试结果
在这里插入图片描述
可以看到uboot已经可以自动从TFTP服务器上下载uImage文件。

配置kernel

因为要用u-boot引导,所以需要把kernel编译成uImage格式

export ARCH=arm
export CROSS_COMPILE=arm-linux-
export LOADADDR=0x60003000

make vexpress_defconfig
make zImage
make uImage
make modules
make

将在arch/arm/boot/生成的uImage拷贝到TFTP服务器目录下,启动TFTP服务器
测试

qemu-system-arm \
		-M vexpress-a9 \
		-nographic \
		-m 512M \
		-kernel u-boot \
		-net nic,vlan=0 \
		-net tap,vlan=0,ifname=tap0

测试结果
在这里插入图片描述
可以看到Starting kernel,内核已经成功启动

制作rootfs

qemu-img create -f raw vexpress.ext3 100M				#生成镜像
mkfs.ext3 vexpress.ext3									#格式化为ext3文件系统
mount -t ext3 vexpress.ext3 /mnt -o loop				#挂载ext3文件系统到/mnt目录
cp -r rootfs/* /mnt										#拷贝文件系统
umount /mnt												#卸载ext3文件系统

测试

qemu-system-arm \
		-M vexpress-a9 \
		-nographic \
		-m 512M \
		-kernel u-boot \
		-sd vexpress.ext3 \
		-net nic,vlan=0 \
		-net tap,vlan=0,ifname=tap0

测试结果
在这里插入图片描述
可以看到已经正常进入到文件系统中。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是在QEMU模拟ARM开发板并使用U-Boot引导系统镜像进行系统移植的详细步骤: 1. 安装QEMU:首先,你需要安装QEMU模拟器。根据你的操作系统选择适合的版本,并按照官方文档的指导进行安装。 2. 获取ARM开发板固件:你需要获取一个ARM开发板的固件镜像,这包括U-Boot引导加载器和操作系统映像文件。通常可以从开发板供应商或开源社区获取这些镜像。 3. 创建虚拟机:打开终端或命令提示符窗口,运行以下命令来创建一个虚拟机实例,其中`path_to_uboot_image`是指向U-Boot镜像文件的路径,`path_to_kernel_image`是指向内核映像文件的路径,`path_to_rootfs_image`是指向根文件系统映像文件的路径: ``` qemu-system-arm -M <machine> -m <memory> -kernel <path_to_uboot_image> -dtb <path_to_dtb_file> -append "console=ttyAMA0" -sd <path_to_rootfs_image> ``` 其中,`machine`是指定要模拟的ARM开发板型号(例如`versatilepb`),`memory`是指定虚拟机的内存大小(例如`256M`),`path_to_dtb_file`是指向设备树二进制文件(DTB)的路径。 4. 启动虚拟机:运行上述命令后,QEMU启动虚拟机,并加载U-Boot引导加载器。你将在终端或命令提示符窗口中看到U-Boot的输出信息。 5. 进行系统移植:一旦虚拟机启动成功,你可以在U-Boot的命令行界面中输入命令来配置和加载操作系统。你可能需要设置环境变量、加载内核映像和设备树,以及设置启动参数等。 6. 测试和调试:完成系统移植后,你可以在虚拟机中进行测试和调试。你可以运行应用程序,测试系统的功能和性能。 需要注意的是,U-Boot的配置和使用可能因不同的开发板和需求而有所不同。确保阅读U-Boot的文档以了解更多配置和使用细节。 希望这些详细步骤能够帮助你在QEMU模拟ARM开发板,并使用U-Boot引导系统镜像进行系统移植。如果你有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值