VirtualBox安装虚拟机
安装Centos7
网络连接
VirtualBox 提供多种网络连接模式,每种模式对应不同的网络拓扑和通信能力。以下是 桥接模式、NAT模式、Host-Only模式 的核心区别:
| 特性 | 桥接模式 (Bridged) | NAT模式 (NAT) | Host-Only模式 (Host-Only) |
|---|---|---|---|
| 网络位置 | 与宿主机同级,在同一个局域网 | 宿主机后方,独立子网 | 宿主机私有的隔离网络 |
| IP分配 | 由路由器分配(与宿主机同网段) | 由VirtualBox虚拟路由器分配(10.0.2.x) | 由VirtualBox DHCP分配(192.168.56.x) |
| 访问外网 | ✅ 直接访问 | ✅ 通过宿主机NAT转换访问 | ❌ 无法访问外网 |
| 宿主机访问虚拟机 | ✅ 直接访问 | ❌ 默认不可访问(需端口转发) | ✅ 直接访问 |
| 虚拟机互访 | ✅(同一局域网内) | ❌(各虚拟机隔离) | ✅(所有Host-Only虚拟机互通) |
| 局域网设备访问虚拟机 | ✅ | ❌ | ❌(仅宿主机可访问) |
| 安全级别 | 中(暴露在局域网) | 高(隔离在NAT后) | 高(完全隔离) |
| 典型应用场景 | 服务器对外服务 | 浏览器上网、下载软件 | 搭建封闭测试环境 |
本机采用NAT + Host-only模式搭建网络,使用NAT访问外网,使用Host-only来访问Samba、SSH。
配置步骤:
-
在VirtualBox中配置两个网卡,如下:
-
启动虚拟机后,可以看到两个有两个网卡,我们使用enp0s8网卡来访问ssh和samba。
-
配置enp0s8网卡的IP为静态IP
# 进入/etc/sysconfig/network-scripts目录 cd /etc/sysconfig/network-scripts # 创建一个文件ifcfg-enp0s8,文件内容如下 [root@vbox network-scripts]# cat ifcfg-enp0s8 OTPROTO=static NAME=enp0s8 DEVICE=enp0s8 ONBOOT=yes IPADDR=192.168.56.101 NETMASK=255.255.255.0 GATEWAY=192.168.56.1 DNS1=8.8.8.8 -
如果只配置一个网卡,并采用NAT模式,可以通过添加端口转发来连接SSH,但是无法访问Samba。配置完成后,使用ssh登录127.0.0.1的5555端口即可。
更新镜像
直接使用Centos7默认带的镜像下载不了,需要更新镜像,更新方式如下:CentOS 7 yum无法使用解决方法Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch= - 愚生浅末 - 博客园
安装Samba服务
默认Centos7 minimal没有安装Samba
解决方式:
-
下载samba应用
yum -y install samba samba-client -
查看samba状态并启动服务
systemctl status smb systemctl start smb nmb systemctl status smb -
Samba服务器安装完毕,生成配置文件目录在
/etc/samba,/etc/samba/smb.conf是samba的核心配置文件 -
新增samba用户,grace用户之前已经创建
[root@vbox yum.repos.d]# smbpasswd -a grace New SMB password: Retype new SMB password: Added user grace. -
在虚拟机中测试samba是否正常
[root@vbox samba]# smbclient //192.168.56.101/grace -U grace Enter SAMBA\grace's password: Try "help" to get a list of possible commands. smb: \> ls . D 0 Mon Jun 23 16:39:47 2025 .. D 0 Mon Jun 23 14:40:05 2025 .bash_logout H 18 Thu Nov 25 00:33:26 2021 .bash_profile H 193 Thu Nov 25 00:33:26 2021 .bashrc H 231 Thu Nov 25 00:33:26 2021 .bash_history H 68 Mon Jun 23 15:49:30 2025 a.txt N 0 Mon Jun 23 16:39:47 2025 17811456 blocks of size 1024. 15983264 blocks available smb: \> exit -
设置samba服务自启动
systemctl enable samba -
如果连接提示没有权限问题,比如:
,解决方式:setenforce 0 # 临时关闭selinux# 永久关闭方式 vi /etc/selinux/config # 永久禁用(需修改为 SELINUX=disabled) # 查看当前模式 getenforce
安装卸载软件
-
查看已经安装的软件
yum list installed -
安装软件
yun install 软件包名 -
卸载已经安装的软件
yum remove 软件包名
扩展磁盘空间
参考:如何在virtualbox中对虚拟机进行磁盘扩容? - yinhuachen - 博客园
-
选择虚拟介质管理
-
配置要扩展的内存大小
-
启动虚拟机,这时候磁盘只是虚拟分配了,并未实际分配,要用fdisk命令增加新分区来使用。先查看当前的大小,可以看到虚拟内存是分配了。
-
接下来使用fdisk命令来新建分区
[root@vbox grace]# fdisk /dev/sda 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 命令(输入 m 获取帮助):m # 查看帮助信息 命令操作 a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) 命令(输入 m 获取帮助):n # 新建一个分区 Partition type: p primary (2 primary, 0 extended, 2 free) e extended Select (default p): p # 配置分区类型 分区号 (3,4,默认 3): # 配置分区号,这里使用默认值3 起始 扇区 (41943040-125829119,默认为 41943040): 将使用默认值 41943040 Last 扇区, +扇区 or +size{K,M,G} (41943040-125829119,默认为 125829119): 将使用默认值 125829119 分区 3 已设置为 Linux 类型,大小设为 40 GiB 命令(输入 m 获取帮助):p 磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x000b1502 设备 Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 41943039 19921920 8e Linux LVM /dev/sda3 41943040 125829119 41943040 83 Linux # 可以看到分区号已经增加 命令(输入 m 获取帮助):w # 写入并退出 The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: 设备或资源忙. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) 正在同步磁盘。 -
根据上面的提示可以看出,新建分区后,需要执行reboot重启。
-
重启完成后,将新建分区格式化一个ext4文件系统
[root@vbox grace]# mkfs -t ext4 /dev/sda3 mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type: Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 2621440 inodes, 10485760 blocks 524288 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=2157969408 320 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 -
接下来需要挂载新的分区到一个路径,我这里选择的是/home/grace/sda3
# 先获取新建分区的uuid [root@vbox grace]# lsblk -f | grep ext4 └─sda3 ext4 f91deefe-f56e-41ec-8906-305ef802fe5b # 更改/etc/fstab 文件,目的是每次启动可以自动挂载,在文件末新增一行 [grace@vbox ~]$ cat /etc/fstab # # /etc/fstab # Created by anaconda on Mon Jun 23 14:36:09 2025 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=8a6eefc7-2b65-4fe7-8e4f-2b54c14a6aef /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 UUID=f91deefe-f56e-41ec-8906-305ef802fe5b /home/grace/sda3 ext4 defaults 0 0 -
执行reboot重启,然后使用df -h命令可以看到新分区已经分配成功
[grace@vbox ~]$ df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 908M 0 908M 0% /dev tmpfs 919M 0 919M 0% /dev/shm tmpfs 919M 8.6M 911M 1% /run tmpfs 919M 0 919M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 3.2G 14G 19% / /dev/sda3 40G 49M 38G 1% /home/grace/sda3 /dev/sda1 1014M 152M 863M 15% /boot tmpfs 184M 0 184M 0% /run/user/1000 -
由于我之前的操作都是root权限操作的,因此新区分是只有root账户权限,我需要更改为grace用户使用,更改命令如下
sudo chown -R grace:grace /home/grace/sda3
安装Ubuntu
镜像下载地址:Index of /ubuntu-releases/,我下载的是18.04。
配置双网卡
virtualBOX的配置步骤和centos7一样,但是启动之后,第二个网卡不会默认配置ip,因此需要更改/etc/netplan/00-installer-config.yaml文件的配置。
root@grace:/home/grace# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
enp0s3:
dhcp4: true
enp0s8:
dhcp4: false
addresses: [192.168.56.102/24]
version: 2
新增了enp0s8的网络配置。更改完之后,应用配置:
sudo netplan apply
ip addr
网络配置
DNS配置文件在: /etc/resolv.conf,一般如下:
nameserver 8.8.8.8
nameserver 8.8.4.4
网络配置文件在: /etc/netplan/00-installer-config.yaml,该文件在系统启动时会自动加载,不需要单独的命令启用。但修改配置后需要手动应用才能使更改生效。
安装Samba服务
默认没有安装Samba
# 安装服务
apt install samba
# 查看服务状态
systemctl status smbd
# 设置开机启动
systemctl enable smbd
# 新增samba用户
smbpasswd -a grace
需要更改/etc/samba/smb.conf文件,新增下面的内容:
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes
[global]
map to guest = never
security = user
安装卸载软件
# 卸载软件
apt remove qemu-system-mips
QEMU仿真
目的:在Ubuntu中同时使用两个qemu虚拟机,一个是aarch64架构(小端),一个是mips64架构(大端)。
网络连接:两个qemu虚拟机和宿主机之间的通信方式如下
MIPS64
版本:
-
使用的是buildroot + qemu自己进行编译
-
buildroot:buildroot-2022.02.2
-
qemu:qemu-7.2.0
-
编译:
-
buildroot:
make qemu_mips64_malta_defconfig make编译完成后,输出文件在output目录,使用到的一些文件夹说明:
- build/linux-6.12.27:编译后的内核源码
- host/bin/mips64-buildroot-linux-gnu-:编译使用的工具链
-
qemu:
../configure --target-list=mips64el-softmmu,mips64-softmmu --enable-debug --enable-vnc --enable-kvm --enable-tools --disable-curl make make install编译完成后,生成的qemu-system-aarch64 在bin目录
运行:
-
将生成的 qemu-system-mips64 拷贝到buildroot的output/images目录
-
更改output/images/start-qemu.sh启动脚本,主要新增了网络相关配置,如下:
./qemu-system-mips64 -M malta -kernel vmlinux -drive file=rootfs.ext2,format=raw -append "rootwait root=/dev/sda" -nographic \ -net nic,macaddr=00:16:3e:00:00:01 -net tap,ifname=tap1,script=no,downscript=no -
启动时,可能会遇到一些找不到文件问题,参考网上的方式解决即可
AARCH64
版本:
-
使用的是buildroot + qemu自己进行编译
-
buildroot:buildroot-2022.02.2
-
qemu:qemu-7.2.0
-
编译:
-
buildroot:
make qemu_aarch64_virt_defconfig make编译完成后,输出文件在output目录,使用到的一些文件夹说明:
- build/linux-5.15.18/:编译后的内核源码
- host/bin/aarch64-buildroot-linux-uclibc-:编译使用的工具链
-
qemu:
./configure --prefix=$PWD --target-list=aarch64-softmmu --enable-debug --enable-vnc --enable-kvm --enable-tools --disable-curl make make install编译完成后,生成的qemu-system-aarch64 在bin目录
运行:
-
将生成的qemu-system-aarch64 拷贝到buildroot的output/images目录
-
更改output/images/start-qemu.sh启动脚本,主要新增了网络相关配置,如下:
./qemu-system-aarch64 -M virt -cpu cortex-a53 -nographic -smp 1 -kernel Image -append "rootwait root=/dev/vda console=ttyAMA0" \ -drive file=rootfs.ext4,if=none,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 -nographic -device edu \ -net nic,model=virtio -net tap,ifname=tap0,script=no -
启动时遇到的问题:
root@grace:/home/grace/sda4/qemu+aarch64/buildroot-2022.02.2/output/images# ./start-qemu.sh qemu-system-aarch64: failed to find romfile "efi-virtio.rom" qemu-system-aarch64: network script /home/grace/sda4/qemu+aarch64/buildroot-2022.02.2/output/images/../etc/qemu-ifdown failed with status 256解决方式:下载一个efi-virtio.rom文件
wget https://github.com/qemu/qemu/raw/master/pc-bios/efi-virtio.rom sudo mkdir -p /usr/share/qemu sudo cp efi-virtio.rom /usr/share/qemu/
网络配置
单个qemu虚拟机网络配置
如果是单个qemu虚拟机,可以按照下面的拓扑配置:
[ 互联网 ]
↑↓
[物理网卡 enp0s3]
↑↓ ←bridge→
[主机网桥 br0 ]
↑↓ ←tap→
[虚拟机网卡 eth0]
配置步骤:
-
宿主机上配置下面的命令,注意:我的宿主机网卡名是enp0s3,并且在10.0.2.1/24网段
# 1.1 创建TAP设备(提前创建,避免QEMU自动脚本) ip tuntap add tap0 mode tap ip link set tap0 up # 1.2 创建网络桥接设备 ip link add br0 type bridge ip link set br0 up # 1.3 将物理网卡(如eth0)和TAP设备加入网桥 ip link set enp0s3 master br0 ip link set tap0 master br0 # 1.4 配置IP地址(示例使用192.168.100.0/24网段) ip addr add 10.0.2.1/24 dev br0 ip addr flush dev enp0s3 # 清除物理网卡IP # 1.5 启用IP转发(用于NAT上网) sysctl -w net.ipv4.ip_forward=1 iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE iptables -I FORWARD -i br0 -j ACCEPT # 验证: ip addr show br0 ping 192.168.100.1 # 应通$ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000 link/ether 08:00:27:f6:ba:60 brd ff:ff:ff:ff:ff:ff 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:42:75:92 brd ff:ff:ff:ff:ff:ff inet 192.168.56.102/24 brd 192.168.56.255 scope global enp0s8 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe42:7592/64 scope link valid_lft forever preferred_lft forever 4: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel master br0 state DOWN group default qlen 1000 link/ether 86:b0:b9:41:ee:87 brd ff:ff:ff:ff:ff:ff 5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 08:00:27:f6:ba:60 brd ff:ff:ff:ff:ff:ff inet 10.0.2.1/24 scope global br0 valid_lft forever preferred_lft forever inet6 fd17:625c:f037:2:1083:aed:7fc7:4d31/64 scope global temporary dynamic valid_lft 86332sec preferred_lft 14332sec inet6 fd17:625c:f037:2:a00:27ff:fef6:ba60/64 scope global dynamic mngtmpaddr valid_lft 86332sec preferred_lft 14332sec inet6 fe80::82a:f8ff:fe2c:6a78/64 scope link valid_lft forever preferred_lft forever -
启动qemu虚拟机,会自动分配IP。同时也可以访问外网,因为宿主机的enp0s3和外网是联通的。
# ifconfig eth0 Link encap:Ethernet HWaddr 52:54:00:12:34:56 inet addr:10.0.2.16 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::5054:ff:fe12:3456/64 Scope:Link inet6 addr: fd17:625c:f037:2:5054:ff:fe12:3456/64 Scope:Global UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:9 errors:0 dropped:0 overruns:0 frame:0 TX packets:9 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1826 (1.7 KiB) TX bytes:1290 (1.2 KiB) # ping 10.0.2.1 PING 10.0.2.1 (10.0.2.1): 56 data bytes 64 bytes from 10.0.2.1: seq=0 ttl=64 time=8.292 ms 64 bytes from 10.0.2.1: seq=1 ttl=64 time=2.754 ms 64 bytes from 10.0.2.1: seq=2 ttl=64 time=2.094 ms # ping www.baidu.com PING www.baidu.com (183.2.172.177): 56 data bytes 64 bytes from 183.2.172.177: seq=0 ttl=255 time=37.433 ms 64 bytes from 183.2.172.177: seq=1 ttl=255 time=37.211 ms 64 bytes from 183.2.172.177: seq=2 ttl=255 time=37.342 ms
-
优化,将宿主机的网络配置写到脚本中去,然后每次上电启动时自动加载,配置方式如下:
-
在/usr/local/bin目录下放置启动脚本,当前我命名为qemu_host_config.sh
-
给脚本添加可执行权限:
chmod +x qemu_host_config.sh -
创建 systemd 服务文件,放在/etc/systemd/system/qemu_host_config.service,内容如下:
[Unit] Description=Custom Startup Script After=network.target Requires=network.target [Service] Type=oneshot ExecStart=/usr/local/bin/qemu_host_config.sh RemainAfterExit=yes TimeoutSec=0 [Install] WantedBy=multi-user.target -
启动并测试服务
# 重新加载 systemd root@grace:/usr/local/bin# systemctl daemon-reload # 启用服务(开机自启) root@grace:/usr/local/bin# systemctl enable qemu_host_config.service Created symlink /etc/systemd/system/multi-user.target.wants/qemu_host_config.service → /etc/systemd/system/qemu_host_config.service. # 立即启动测试 root@grace:/usr/local/bin# systemctl start qemu_host_config.service # 检查状态 root@grace:/usr/local/bin# systemctl status qemu_host_config.service ● qemu_host_config.service - Custom Startup Script Loaded: loaded (/etc/systemd/system/qemu_host_config.service; enabled; vendor preset: enabled) Active: active (exited) since Fri 2025-06-27 03:34:18 UTC; 1s ago Process: 2409 ExecStart=/usr/local/bin/qemu_host_config.sh (code=exited, status=0/SUCCESS) Main PID: 2409 (code=exited, status=0/SUCCESS) Jun 27 03:34:18 grace qemu_host_config.sh[2409]: link/ether 08:00:27:f6:ba:60 brd ff:ff:ff:ff:ff:ff Jun 27 03:34:18 grace qemu_host_config.sh[2409]: inet 10.0.2.1/24 scope global br0 Jun 27 03:34:18 grace qemu_host_config.sh[2409]: valid_lft forever preferred_lft forever Jun 27 03:34:18 grace qemu_host_config.sh[2409]: inet6 fd17:625c:f037:2:3dd2:1087:68e9:7af4/64 scope global temporary dynamic Jun 27 03:34:18 grace qemu_host_config.sh[2409]: valid_lft 86139sec preferred_lft 14139sec Jun 27 03:34:18 grace qemu_host_config.sh[2409]: inet6 fd17:625c:f037:2:a00:27ff:fef6:ba60/64 scope global dynamic mngtmpaddr Jun 27 03:34:18 grace qemu_host_config.sh[2409]: valid_lft 86139sec preferred_lft 14139sec Jun 27 03:34:18 grace qemu_host_config.sh[2409]: inet6 fe80::9c03:beff:fe30:a85a/64 scope link Jun 27 03:34:18 grace qemu_host_config.sh[2409]: valid_lft forever preferred_lft forever Jun 27 03:34:18 grace systemd[1]: Started Custom Startup Script. -
reboot重启,查看是否已经自动加载
-
两个qemu虚拟机网络配置
只需要更改/usr/local/bin/qemu_host_config.sh文件,更改为下面的内容:
#!/bin/bash
# QEMU Network initialization script
# 创建网桥
ip link add br0 type bridge
ip link set br0 up
# 创建两个TAP设备
ip tuntap add tap0 mode tap
ip tuntap add tap1 mode tap
# 启用TAP设备
ip link set tap0 up
ip link set tap1 up
# 将TAP设备加入网桥
ip link set tap0 master br0
ip link set tap1 master br0
ip link set enp0s3 master br0
# 为网桥分配IP地址
ip addr add 10.0.2.4/24 dev br0
ip addr flush dev enp0s3
# 启用IP转发
sysctl -w net.ipv4.ip_forward=1
# 配置NAT转发规则(替换enp3s0为你的实际网卡名)
iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
iptables -A FORWARD -i br0 -o enp0s3 -j ACCEPT
iptables -A FORWARD -i enp0s3 -o br0 -j ACCEPT
# 重新配置物理网卡IP
ip link set enp0s3 up
ip addr add 10.0.2.15/24 dev enp0s3
ip route add default via 10.0.2.2
配置完成后的主机网络如下:
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
link/ether 08:00:27:f6:ba:60 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 scope global enp0s3
valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:42:75:92 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.102/24 brd 192.168.56.255 scope global enp0s8
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe42:7592/64 scope link
valid_lft forever preferred_lft forever
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:f6:ba:60 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.4/24 scope global br0
valid_lft forever preferred_lft forever
inet6 fd17:625c:f037:2:c1de:59e2:925:fe75/64 scope global temporary dynamic
valid_lft 86244sec preferred_lft 14244sec
inet6 fd17:625c:f037:2:a00:27ff:fef6:ba60/64 scope global dynamic mngtmpaddr
valid_lft 86244sec preferred_lft 14244sec
inet6 fe80::c42b:1fff:fe8e:6174/64 scope link
valid_lft forever preferred_lft forever
5: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
link/ether 3e:83:15:ee:ae:f5 brd ff:ff:ff:ff:ff:ff
inet6 fe80::3c83:15ff:feee:aef5/64 scope link
valid_lft forever preferred_lft forever
6: tap1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
link/ether 66:4c:13:d6:e7:cc brd ff:ff:ff:ff:ff:ff
inet6 fe80::644c:13ff:fed6:e7cc/64 scope link
valid_lft forever preferred_lft forever
启动qemu虚拟机时,会自动的分配ip,并且可以访问主机,qemu虚拟机之间也可以相互访问。
VirtualBox网络说明
NAT
在 VirtualBox 中使用 NAT(网络地址转换)模式时,网络配置信息如下:
| 配置项 | 值 | 说明 |
|---|---|---|
| 网关 (Gateway) | 10.0.2.2 |
虚拟机访问外网的出口 |
| DHCP 服务器 | 10.0.2.2 |
提供 IP 地址的服务器 |
| IP 分配范围 | 10.0.2.15 ~ 10.0.2.254 |
虚拟机获得的IP地址范围 |
| 子网掩码 | 255.255.255.0 |
网络掩码 |
| 宿主机 IP | 10.0.2.1 |
宿主机的内部通信地址 |
| DNS 代理 | 10.0.2.3 |
VirtualBox 内置的 DNS 代理 |
网络拓扑:
[ 虚拟机 ]
| (eth0: 10.0.2.15)
|
[ VirtualBox NAT 引擎 ]
| (网关: 10.0.2.2)
|
[ 宿主机 ]
|
[ 路由器/互联网 ]
自定义NAT地址
参考:修改 VirtualBox 中 NAT 网络的默认 IP 段 - 哔哩哔哩
VirtualBox默认的NAT地址为10.0.2.15,可能和其它网络冲突,可以使用下面的步骤进行更改:
-
修改 VirtualBox 的 NAT 网络配置
-
关闭所有相关虚拟机
-
打开 VirtualBox,进入 全局设置(菜单栏:管理 → 工具 → 网络管理器)。
-
在 主机网络管理器 中如果尚未创建:点击 创建 新建一个 NAT 网络,修改以下参数:
- IPv4网络掩码:设置新网段(例如 192.168.100.0/24)
- 启用 DHCP:勾选以自动分配 IP(或手动配置静态 IP)
-
点击 应用 保存配置

-
-
将虚拟机连接到新 NAT 网络
-
在 VirtualBox 中选择目标虚拟机,点击 设置 → 网络。
-
选择网卡(如 适配器 1),配置如下:
-
连接方式:选择 NAT 网络。注意不是 网络地址转换 (NAT)。
-
名称:选择刚创建的 NAT 网络
-
-
点击 确定 保存设置

-
启动虚拟机,如果使用的是DHCP获取IP地址,则会自动分配新的IP,如果使用的是静态IP,则需要进行相应的修改。
-
buildroot menuconfig
新增编译gdb
编译ssh
ssh配置,修改/etc/ssh/sshd_config文件,下面的必要配置需要打开:
PermitRootLogin yes # 允许root登录
PasswordAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys # 公钥路径正确
Subsystem sftp /usr/libexec/sftp-server # SFTP配置正常
配置完成后,可以使用ssh root@xx.xx.xx.xx登录,但是不能使用SecureCRT登录,暂未找到原因。
终端显示配置
默认终端显示格式为:
#
#
#
修改/etc/profile文件,在文件最后增加一行:
export PS1='[\u@\h: \w\a\]$ ' #注意要用(')
重新登录,效果如下:
[root@buildroot: ~]$
[root@buildroot: ~]$
编译gdb
如果使用 Buildroot,执行make menuconfig,需要打开下面的两个库:
Target packages → Libraries →
-> JSON/XML
[*] expat
-> Other
[*] gmp
编译步骤,执行下面的脚本即可:
#!/bin/bash
# 设置环境变量以及交叉工具链的路径,以及使用到的一些库的位置
export TOOLCHAIN_PATH="/home/grace/sda4/qemu+aarch64+buildroot20250204/buildroot-2025.02.4/output/host"
export PATH="$TOOLCHAIN_PATH/bin:$PATH"
export SYSROOT="$TOOLCHAIN_PATH/aarch64-buildroot-linux-gnu/sysroot"
# 显式声明工具链命令
export AR="$TOOLCHAIN_PATH/bin/aarch64-buildroot-linux-gnu-ar"
export RANLIB="$TOOLCHAIN_PATH/bin/aarch64-buildroot-linux-gnu-ranlib"
export STRIP="$TOOLCHAIN_PATH/bin/aarch64-buildroot-linux-gnu-strip"
export CC="$TOOLCHAIN_PATH/bin/aarch64-buildroot-linux-gnu-gcc"
export CXX="$TOOLCHAIN_PATH/bin/aarch64-buildroot-linux-gnu-g++"
# 检查工具链可执行性
chmod +x $TOOLCHAIN_PATH/bin/aarch64-buildroot-linux-gnu-*
# 配置
./configure \
--host=aarch64-buildroot-linux-gnu \
--prefix=/opt/cross-gdb \
--with-sysroot="$SYSROOT" \
CC="$CC" \
CXX="$CXX" \
AR="$AR" \
RANLIB="$RANLIB" \
--disable-werror \
--with-expat \
--with-gmp
# 编译安装
make -j$(nproc) && sudo make install
gdbserver使用
作用:用于 远程调试 目标设备上的程序。
(1) 在目标设备启动 gdbserver
# 调试已运行进程
gdbserver :<端口号> --attach <PID>
# 启动新程序调试
gdbserver :<端口号> <程序路径> [参数]
示例:
gdbserver :2345 /usr/bin/my_app arg1 arg2 # 在目标设备执行
(2) 本机连接远程gdbserver,要使用交叉工具链编译的gdb,比如/home/grace/sda4/qemu+aarch64/buildroot-2022.02.2-output/output/host/bin/aarch64-buildroot-linux-uclibc-gdb
/home/grace/sda4/qemu+aarch64/buildroot-2022.02.2-output/output/host/bin/aarch64-buildroot-linux-uclibc-gdb
(gdb) target remote <目标设备IP>:<端口号>
(gdb) continue
示例:
$ /home/grace/sda4/qemu+aarch64/buildroot-2022.02.2-output/output/host/bin/aarch64-buildroot-linux-uclibc-gdb
GNU gdb (GDB) 10.2
(gdb) target remote 10.0.2.20:1234
(gdb) continue
# 接着使用类似的命令调试即可
QEMU一些配置
扩展磁盘空间
qemu启动时,如何指定磁盘空间太小,如何扩大,默认分配的太小
# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 51.1M 49.9M 0 100% /
devtmpfs 55.8M 0 55.8M 0% /dev
tmpfs 56.4M 0 56.4M 0% /dev/shm
tmpfs 56.4M 20.0K 56.4M 0% /tmp
tmpfs 56.4M 28.0K 56.4M 0% /run
扩展方式:在主机上执行下面的命令
(1) 创建全新 1GB 镜像(跳过 dd 复制)
# 删除旧文件(先备份!)
mv rootfs.ext4 rootfs_large.ext4.bak
# 创建新的 1GB 空镜像
qemu-img create -f raw rootfs_large.ext4 1G
# 格式化为 ext4
mkfs.ext4 rootfs_large.ext4
(2) 挂载并复制数据
mkdir -p mnt/new mnt/old
# 挂载新旧镜像
mount -o loop rootfs_large.ext4 mnt/new
mount -o loop rootfs.ext4 mnt/old
# 保留权限复制所有文件
cp -a mnt/old/* mnt/new/
# 卸载
umount mnt/new mnt/old
(3) 验证镜像大小
qemu-img info rootfs_large.ext4
现在应显示:
$ qemu-img info rootfs_large.ext4
image: rootfs_large.ext4
file format: raw
virtual size: 1 GiB (1073741824 bytes)
disk size: 15 MiB
(4)更改qemu启动时挂载新的文件系统
./qemu-system-aarch64 -M virt -cpu cortex-a53 -nographic -smp 1 -kernel Image -append "rootwait root=/dev/vda console=ttyAMA0" \
-drive file=rootfs_large.ext4,if=none,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 -nographic -device edu \
-net nic,macaddr=00:16:3e:00:00:02 -net tap,ifname=tap0,script=no,downscript=no
(5)启动虚拟机,查看磁盘空间
# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 973.4M 13.9M 892.4M 2% /
devtmpfs 55.8M 0 55.8M 0% /dev
tmpfs 56.4M 0 56.4M 0% /dev/shm
tmpfs 56.4M 20.0K 56.4M 0% /tmp
tmpfs 56.4M 20.0K 56.4M 0% /run
(6)其它
-
如果挂载旧的文件系统失败,比如:
$ mount -t ext4 -o loop rootfs.ext4 mnt/old mount: /home/grace/sda4/qemu+aarch64+buildroot20250204/buildroot-2025.02.4/output/images/mnt/old: wrong fs type, bad option, bad superblock on /dev/loop1, missing codepage or helper program, or other error.解决方式,执行下面的命令:
losetup -fP rootfs.ext4 # 自动分配loop设备 LOOP_DEV=$(losetup -a | grep rootfs.ext4 | awk -F: '{print $1}') mount -t ext4 -o ro $LOOP_DEV mnt/old -
扩展:如果要拷贝某个文件到文件系统中,可以参考上面的方式,先挂载文件系统到某个目录,然后拷贝文件到文件系统中,再卸载即可,比如:
mount -o loop rootfs_large.ext4 mnt/new cp /home/grace/tftpboot/gdb mnt/new/usr/bin/ umount mnt/new

浙公网安备 33010602011771号