BB-black开发板[Linux arm-v8]

ubuntu18.04配置网桥支持qemu模拟开发板挂载NFS启

2021-01-10  本文已影响0人  applecai

一,前言

之前拿出10年前的TQ2440折腾了2周的主要目的就是因为我怀疑OLED屏不支持的原因是电流太小。也就是硬件不支持。而TQ2440自带LCD屏幕的,虽然线很多都断了,但是我家有电烙铁,可以焊接,这个不是问题。但是TQ2440文件系统无法挂载,导致我只能另觅方案了,qemu之前也玩过的,但是我记得是无法联网的。这样的话我添加模块或者添加APP都不方便,网上搜索了下其实是可以通过为qemu添加网桥来支持网络的。就是qemu就等于vmware虚拟机。

二,ubuntu18.04配置网桥

配置网桥的目的是qemu虚拟机的时候可以使用网桥来挂载主机的nfs文件系统
ubuntu设置网桥,我一开始我网上搜索很多资料尝试配置后,有2处不对,一个是开机变慢很多,另外一个是bridge_ports没有显示出来。后来无意中发现ubuntu从17开始就用yaml配置了。不是修改/etc/network/interfaces,因为它并不一定起作用的。
1.查看网卡名
sudo ls /proc/sys/net/ipv4/conf
2.设置网桥
我看到被人用ens33等,我的网卡名称为eno1
我看别人是修改/etc/netplan/50-cloud-init.yaml。我在/etc/netplan下面只有一个01-network-manager-all.yaml
所以我就修改此文件,内容如下,格式需要保持对齐

network:
  version: 2
  renderer: networkd #NetworkManager
  ethernets:
    eno1:
      dhcp4: no
      dhcp6: no
  
  bridges:
    br0:
      interfaces: [eno1]
      dhcp4: no
      addresses: [192.168.0.110/24]
      gateway4: 192.168.0.254
      nameservers:
        addresses: [114.114.114.114,8.8.8.8]
  1. 启动命令
    netplan apply
    如果想看到日志
    netplan --debug apply
  2. 运行命令ifconfig可以看到网桥br0和eno1网卡。
  3. 编辑在etc文件夹下创建qemu-up,其实就是创建tap0虚拟网卡。
#!/bin/sh

echo sudo tunctl -u $(id -un) -t $1
sudo tunctl -u $(id -un) -t $1

echo sudo ifconfig $1 0.0.0.0 promisc up
sudo ifconfig $1 0.0.0.0 promisc up

echo sudo brctl addif br0 $1
sudo brctl addif br0 $1

echo brctl show
brctl show

sudo ifconfig br0 192.168.0.110

三,qemu模拟开发板通过uboot挂载文件系统(失败)

  1. 通过uboot启动来挂载失败
    仿真Vexpress V9开发板,uboot的cmd等修改重新编译下。
    qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot -nographic -net nic -net tap,ifname=tap0
    运行qemu虚拟机,可是smc911x依然无法模拟,No ethernet found奇怪。
root@applecaiHP:/home/applecai/myuboot/u-boot-2020.10-rc4_qemu# qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot -nographic  -net nic -net tap,ifname=tap0
sudo tunctl -u root -t tap0
TUNSETIFF: Device or resource busy
sudo ifconfig tap0 0.0.0.0 promisc up
sudo brctl addif br0 tap0
brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.a2da0d604a2a   no      eno1
                            tap0


U-Boot 2020.10-rc4 (Jan 09 2021 - 21:40:04 +0800)

DRAM:  512 MiB
WARNING: Caches not enabled
Flash: 128 MiB
MMC:   MMC: 0
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   smc911x: Invalid chip endian 0x00004321
No ethernet found.
Hit any key to stop autoboot:  0 
No ethernet found.
No ethernet found.
Wrong Image Format for bootm command
ERROR: can't get kernel image!

四,我换种方法,直接先进入文件系统后使用nfs(成功)

我在之前能成功启动图形界面中添加-net nic -net tap,ifname=tap0,这是新的qemu网络命令,我从官网help找到的方法,qemu旧版本的方法你们网上搜索吧,很多。

qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/applecai/mykernel/qemu/linux-5.4.61/arch/arm/boot/zImage -dtb /home/applecai/mykernel/qemu/linux-5.4.61/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -append "root=/dev/mmcblk0 console=tty0" -sd a9rootfs.ext3 -net nic -net tap,ifname=tap0
运行后成功启动,当然前提是我已经配置了网桥,ifconfig能看到br0和eno1了,而tap0是在qemu启动脚本中添加后会运行/etc/qeme-ifup脚本。

image.png
从上截图可以看出,我配置了eth0的ip为192.168.0.112然后可以ping通主机网桥地址192.168.0.110。然后我进行nfs挂载。

五,qemu访问nfs运行framebuffer的应用程序成功

接下来就都是一样了。在nfs挂载的文件系统中我添加了/work文件夹,在里面编译了framebuffer的应用层程序,在qemu中运行成功。这意味着我可以方便的在kernel中添加调试信息,通过qemu模拟开发板启动,调试framebuffer咯。


image.png
上一篇下一篇

猜你喜欢

热点阅读