Qemu搭建ARM Vexpress开发环境

Qemu搭建ARM Vexpress开发环境


文章目录

  • Qemu搭建ARM Vexpress开发环境
    • Qemu简介
    • QEMU安装前的准备工作
      • QEMU 安装的两种方式
        • 通过网络在线安装
        • 源码编译安装
          • 源码获取
          • QEMU依赖库安装
          • 编译安装
    • 命令选项
      • qemu的标准选项
      • qemu显示选项
      • 网络属性相关选项
      • kvm的网络模型
    • Ubuntu 双网卡:qemu桥接+上网配置
      • 添加网卡 NAT模式
    • 起动u-boot
      • 起动
      • 报错处理
        • 新建`qemu-ifup`
        • 新建`qemu-ifdown`
        • 把`qemu-ifup`与`qemu-ifdown`两脚本放入配置文件径
        • 重新起动u-boot
      • 测试网络
    • 在主机上搭建TFTP
      • 简介
      • 1、安装依赖包
      • 2、第二步, 配置/etc/xinetd.conf
      • 3、第三步,配置/etc/default/tftpd-hpa
      • 4.、第四步,配置/etc/xinetd.d/tftp
      • 5、创建文件夹 mkdir /tftpboot
      • 6、给权限 chmod 777 /tftpboot -R
      • 7、启动服务器 sudo service tftpd-hpa start
      • 8、调试服务器 在/tftpboot  下 touch test.txt
      • 9、核心板 使用tftp下载文件
    • 在主机上搭建NFS
      • 安装NFS服务器
      • 创建共享目录
      • 配置NFS服务器
      • 启动NFS服务器
      • 测试NFS服务器


Qemu简介

QEMU是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以GPL许可证分发源码的模拟处理器软件,在GNU/Linux平台上使用广泛。可以在没有硬件开发板的情况下调试验证问题。最初搭建Qemu时遇到一些问题,新版Qemu的教程网上少之又少,向大佬请教时得到的答复是用别人验证过的东西靠谱,Qemu很少有人源码级debug。这回答有点颠覆三观,一个开源认可度很高的软件怎么可能会因为编译安装而需要源码级debug,于是便有了后续……

QEMU安装前的准备工作

QEMU 安装的两种方式

通过网络在线安装

优点:安装方便
缺点:linux发行版支持在线包的版本都比较低

sudo apt-get install qemu
sudo apt-get install qemu-arm
sudo apt-get install qemu
sudo apt-get install qemu-system
sudo apt-get install qemu-user

源码编译安装

优点:QEMU可以是最新稳定版本,根据自己的需求安装
缺点:编译时需要各种依赖,比较繁琐

源码获取
git clone https://gitlab.com/qemu-project/qemu.git
cd qemu
git submodule init
git submodule update --recursive
QEMU依赖库安装
sudo apt install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build
sudo apt install git-email
sudo apt install libaio-dev libbluetooth-dev libcapstone-dev libbrlapi-dev libbz2-dev
sudo apt install libcap-ng-dev libcurl4-gnutls-dev libgtk-3-dev
sudo apt install libibverbs-dev libjpeg8-dev libncurses5-dev libnuma-dev
sudo apt install librbd-dev librdmacm-dev
sudo apt install libsasl2-dev libsdl2-dev libseccomp-dev libsnappy-dev libssh-dev
sudo apt install libvde-dev libvdeplug-dev libvte-2.91-dev libxen-dev liblzo2-dev
sudo apt install valgrind xfslibs-dev
sudo apt install libslirp-dev

详见官方wiki:
qemu install

编译安装
cd qemu
mkdir build
cd build
../configure --enable-slirp
make -j16
sudo make install

Qemu搭建ARM Vexpress开发环境_第1张图片
Qemu搭建ARM Vexpress开发环境_第2张图片
Qemu搭建ARM Vexpress开发环境_第3张图片

qemu-system-aarch64 --version
QEMU emulator version 8.0.2 (v8.0.2)
Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers
emu-system-aarch64 -M ? help
Supported machines are:
akita                Sharp SL-C1000 (Akita) PDA (PXA270)
ast1030-evb          Aspeed AST1030 MiniBMC (Cortex-M4)
ast2500-evb          Aspeed AST2500 EVB (ARM1176)
ast2600-evb          Aspeed AST2600 EVB (Cortex-A7)
bletchley-bmc        Facebook Bletchley BMC (Cortex-A7)
borzoi               Sharp SL-C3100 (Borzoi) PDA (PXA270)
canon-a1100          Canon PowerShot A1100 IS (ARM946)
cheetah              Palm Tungsten|E aka. Cheetah PDA (OMAP310)
collie               Sharp SL-5500 (Collie) PDA (SA-1110)
connex               Gumstix Connex (PXA255)
cubieboard           cubietech cubieboard (Cortex-A8)
emcraft-sf2          SmartFusion2 SOM kit from Emcraft (M2S010)
fby35-bmc            Facebook fby35 BMC (Cortex-A7)
fby35                Meta Platforms fby35
fp5280g2-bmc         Inspur FP5280G2 BMC (ARM1176)
fuji-bmc             Facebook Fuji BMC (Cortex-A7)
g220a-bmc            Bytedance G220A BMC (ARM1176)
highbank             Calxeda Highbank (ECX-1000)
imx25-pdk            ARM i.MX25 PDK board (ARM926)
integratorcp         ARM Integrator/CP (ARM926EJ-S)
kudo-bmc             Kudo BMC (Cortex-A9)
kzm                  ARM KZM Emulation Baseboard (ARM1136)
lm3s6965evb          Stellaris LM3S6965EVB (Cortex-M3)
lm3s811evb           Stellaris LM3S811EVB (Cortex-M3)
mainstone            Mainstone II (PXA27x)
mcimx6ul-evk         Freescale i.MX6UL Evaluation Kit (Cortex-A7)
mcimx7d-sabre        Freescale i.MX7 DUAL SABRE (Cortex-A7)
microbit             BBC micro:bit (Cortex-M0)
midway               Calxeda Midway (ECX-2000)
mori-bmc             Mori BMC (Cortex-A9)
mps2-an385           ARM MPS2 with AN385 FPGA image for Cortex-M3
mps2-an386           ARM MPS2 with AN386 FPGA image for Cortex-M4
mps2-an500           ARM MPS2 with AN500 FPGA image for Cortex-M7
mps2-an505           ARM MPS2 with AN505 FPGA image for Cortex-M33
mps2-an511           ARM MPS2 with AN511 DesignStart FPGA image for Cortex-M3
mps2-an521           ARM MPS2 with AN521 FPGA image for dual Cortex-M33
mps3-an524           ARM MPS3 with AN524 FPGA image for dual Cortex-M33
mps3-an547           ARM MPS3 with AN547 FPGA image for Cortex-M55
musca-a              ARM Musca-A board (dual Cortex-M33)
musca-b1             ARM Musca-B1 board (dual Cortex-M33)
musicpal             Marvell 88w8618 / MusicPal (ARM926EJ-S)
n800                 Nokia N800 tablet aka. RX-34 (OMAP2420)
n810                 Nokia N810 tablet aka. RX-44 (OMAP2420)
netduino2            Netduino 2 Machine (Cortex-M3)
netduinoplus2        Netduino Plus 2 Machine (Cortex-M4)
none                 empty machine
npcm750-evb          Nuvoton NPCM750 Evaluation Board (Cortex-A9)
nuri                 Samsung NURI board (Exynos4210)
olimex-stm32-h405    Olimex STM32-H405 (Cortex-M4)
orangepi-pc          Orange Pi PC (Cortex-A7)
palmetto-bmc         OpenPOWER Palmetto BMC (ARM926EJ-S)
qcom-dc-scm-v1-bmc   Qualcomm DC-SCM V1 BMC (Cortex A7)
qcom-firework-bmc    Qualcomm DC-SCM V1/Firework BMC (Cortex A7)
quanta-gbs-bmc       Quanta GBS (Cortex-A9)
quanta-gsj           Quanta GSJ (Cortex-A9)
quanta-q71l-bmc      Quanta-Q71l BMC (ARM926EJ-S)
rainier-bmc          IBM Rainier BMC (Cortex-A7)
raspi0               Raspberry Pi Zero (revision 1.2)
raspi1ap             Raspberry Pi A+ (revision 1.1)
raspi2b              Raspberry Pi 2B (revision 1.1)
raspi3ap             Raspberry Pi 3A+ (revision 1.0)
raspi3b              Raspberry Pi 3B (revision 1.2)
realview-eb          ARM RealView Emulation Baseboard (ARM926EJ-S)
realview-eb-mpcore   ARM RealView Emulation Baseboard (ARM11MPCore)
realview-pb-a8       ARM RealView Platform Baseboard for Cortex-A8
realview-pbx-a9      ARM RealView Platform Baseboard Explore for Cortex-A9
romulus-bmc          OpenPOWER Romulus BMC (ARM1176)
sabrelite            Freescale i.MX6 Quad SABRE Lite Board (Cortex-A9)
sbsa-ref             QEMU 'SBSA Reference' ARM Virtual Machine
smdkc210             Samsung SMDKC210 board (Exynos4210)
sonorapass-bmc       OCP SonoraPass BMC (ARM1176)
spitz                Sharp SL-C3000 (Spitz) PDA (PXA270)
stm32vldiscovery     ST STM32VLDISCOVERY (Cortex-M3)
supermicro-x11spi-bmc Supermicro X11 SPI BMC (ARM1176)
supermicrox11-bmc    Supermicro X11 BMC (ARM926EJ-S)
sx1                  Siemens SX1 (OMAP310) V2
sx1-v1               Siemens SX1 (OMAP310) V1
tacoma-bmc           OpenPOWER Tacoma BMC (Cortex-A7)
terrier              Sharp SL-C3200 (Terrier) PDA (PXA270)
tiogapass-bmc        Facebook Tiogapass BMC (ARM1176)
tosa                 Sharp SL-6000 (Tosa) PDA (PXA255)
verdex               Gumstix Verdex Pro XL6P COMs (PXA270)
versatileab          ARM Versatile/AB (ARM926EJ-S)
versatilepb          ARM Versatile/PB (ARM926EJ-S)
vexpress-a15         ARM Versatile Express for Cortex-A15
vexpress-a9          ARM Versatile Express for Cortex-A9
virt-2.10            QEMU 2.10 ARM Virtual Machine
virt-2.11            QEMU 2.11 ARM Virtual Machine
virt-2.12            QEMU 2.12 ARM Virtual Machine
virt-2.6             QEMU 2.6 ARM Virtual Machine
virt-2.7             QEMU 2.7 ARM Virtual Machine
virt-2.8             QEMU 2.8 ARM Virtual Machine
virt-2.9             QEMU 2.9 ARM Virtual Machine
virt-3.0             QEMU 3.0 ARM Virtual Machine
virt-3.1             QEMU 3.1 ARM Virtual Machine
virt-4.0             QEMU 4.0 ARM Virtual Machine
virt-4.1             QEMU 4.1 ARM Virtual Machine
virt-4.2             QEMU 4.2 ARM Virtual Machine
virt-5.0             QEMU 5.0 ARM Virtual Machine
virt-5.1             QEMU 5.1 ARM Virtual Machine
virt-5.2             QEMU 5.2 ARM Virtual Machine
virt-6.0             QEMU 6.0 ARM Virtual Machine
virt-6.1             QEMU 6.1 ARM Virtual Machine
virt-6.2             QEMU 6.2 ARM Virtual Machine
virt-7.0             QEMU 7.0 ARM Virtual Machine
virt-7.1             QEMU 7.1 ARM Virtual Machine
virt-7.2             QEMU 7.2 ARM Virtual Machine
virt                 QEMU 8.0 ARM Virtual Machine (alias of virt-8.0)
virt-8.0             QEMU 8.0 ARM Virtual Machine
witherspoon-bmc      OpenPOWER Witherspoon BMC (ARM1176)
xilinx-zynq-a9       Xilinx Zynq Platform Baseboard for Cortex-A9
xlnx-versal-virt     Xilinx Versal Virtual development board
xlnx-zcu102          Xilinx ZynqMP ZCU102 board with 4xA53s and 2xR5Fs based on the value of smp
yosemitev2-bmc       Facebook YosemiteV2 BMC (ARM1176)
z2                   Zipit Z2 (PXA27x)

命令选项

qemu的标准选项

# qemu的标准选项主要涉及指定主机类型、CPU模式、NUMA、软驱设备、光驱设备及硬件设备等。
-name name              # 虚拟机名称
-M machine              # 指定要模拟的主机类型,如standard PC,ISA-only PC或Intel-Mac等,可以使用“qemu-kvm -M ?”获取所支持的所有类型
-m megs                 # 设定虚拟机的RAM大小
-cpu model              # 设定CPU模型,如coreduo、qemu64等,可以使用"qemu-kvm -cpu ?"获取所支持的所有模型
-smp n                  # 设定模拟的SMP架构中CPU的个数
    [,cores=cores]              # 每个CPU的核心数
    [,threads=threads]  # 线程数
    [,sockets=sockets]  # CPU的socket数目
    [,maxcpus=maxcpus]  # 用于指定热插入的CPU个数上限
-numa   非一致内存访问
-numa opts:指定模拟多节点的numa设备
 
-fda file:
-fdb file:使用指定文件(file)作为软盘镜像,file为/dev/fd0表示使用物理软驱
-hda file:
-hdb file:
-hdc file:
-hdd file:使用指定file作为硬盘镜像
-cdrom file:使用指定file作为CD-ROM镜像,需要注意的是-cdrom和-hdc不能同时使用:将file指定为/dev/cdrom可以直接使用物理光驱
 
-drive                                          # 定义一个硬盘设备:可用子选项有很多
    file=/path/to/somefile      # 硬盘映像文件
    if=interface                        # 硬盘设备接口类型 ide、scsi、sd、virtio(半虚拟化)
    index=index                         # 设定同一种控制器类型中不同设备的索引号,即标识号
    media=media                         # 定义介质类型为硬盘还是光盘disk、cdrom
    snapshot=snapshot           # 指定当前硬盘设备是否支持快照功能:on或off
    cache=cache                         # 定义如何使用物理机缓存来访问块数据,其可用值有none、writeback、unsafe和writethrough四个
    format=format                       # 指定映像文件的格式,具体格式可参见qemu-img命令
 
-boot [order=drives][,once=drives][,menu=on|off]        # 定义启动设备的引导次序,每种设备使用一个字符表示:不同的架构所支持的设备及其表示字符不尽相同,在x86 PC架构上,a、b表示软驱,c表示第一个光驱设备,n-p表示网络适配器,默认为硬盘设备。例如:-boot order=dc,once=d

示例:

qemu-system-x86_64 --name censtos -smp 2 -m 2048 -cpu host -drive file=/data/iso/CentOS-7-x86_64-Minimal-1804.iso,media=cdrom -drive file=centos.qcow2,media=disk -boot order=dc,once=d

qemu显示选项

显示选项用于定义虚拟机启动后的显示接口相关类型及属性等。

SDL 
 -sdl                   # 启用SDL
 
VNC
 -vnc display [option,option]   # 默认情况下,qemu使用SDL显示VGA输出;使用-vnc选项,可以让qemu监听在vnc上,并将VGA输出重定向至vnc会话,使用此选项时,必须使用-k选项指定键盘布局类型;其中有许多子选项,具体请参考qemu的手册
    display
        1、host:N                                # N为控制台号
            192.168.1.1:1               # 5900为起始端口
        2、unix:/path/to/socket_file                                     # 监听在套接字
        3、none                                  # 不显示
    option
        password                                # 连接时需要验证密码,设定密码通过monitor接口使用change
        reverse                                 # “反向”连接至某处于监听状态的vncview上
 
-vga type               # 指定要仿真的VGA接口类型,常见的类型有:
        cirrus: Cirrus Logic GD5446显示卡
        std:带有Bochs VBI扩展的标准VGA显示卡
        vmware:VMware SVGA-II兼容的显示适配器
        qxl:QXL半虚拟化显示卡:与VGA兼容,在Guest中安装qxl驱动后能以很好的方式工作,在使用spice协议时推荐使用此类型
        none:禁用VGA卡
 
-monitor stdio  # 在标准输入输出上显示monitor界面
-nographic              # 默认情况下,qemu使用SDL来显示VGA输出,而此选项用于禁止图形接口,此时,qemu类似一个简单的命令行程序,其仿真串口设备将被重定向到控制台
-curses                 # 禁止图形接口,并使用curses/ncurses作为交互接口
-alt-grab               # 使用Ctrl+Alt+Shift组合键释放鼠标
-ctrl-grab              # 使用右Ctrl键释放鼠标
-spice option[,option[,...]]    # 启用spice远程桌面协议:其中有许多子选项,具体请参照qemu-kvm手册。

网络属性相关选项

网络属性相关选项用于定义网络设备接口类型及其相关的各属性等信息。这里只介绍nic、tap和user三种类型网络接口的属性,其他类型请参考qemu手册9


nic     #定义网络接口
-net nic [,vlan=n,macaddr=n,model=type,name=name,addr=addr,vectors=v]           # 创建一个新的网卡设备并连接至vlan n中:PC架构上默认的NIC为e1000,macaddr用于为其制定mac地址,name用于指定一个在监控时显示的网上设备名称;qemu可以模拟多个类型的网卡设备,如virtio、i82557b、i82559er、ne2k_isa、pcnet、rtl8139、e1000、smc91c111、lance及mcf_fec等;不过,不同平台架构上,其支持的类型可能只包含前述列表中的一部分,可以使用qemu-system-x86_64 -net nic,model=?来获取当前平台支持的类型。
    vlan                # vlan号
    macaddr             # mac地址(mac 默认不变)
    model               # e1000 virtio
    name                # 设备名
    addr                # ip地址
 
tap     #nic管理虚拟机中的接口,tap就是管理宿主机上的对应接口
-net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile]             # 通过物理机的TAP网络接口连接至vlan n中,使用script=file指定的脚本(默认为/etc/qemu-ifup)来配置当前网络接口,并使用downscript=file指定的脚本(默认为/etc/qemu-ifdown)来撤销接口配置;使用script=no和downscript=no可分别用来禁止执行脚本。
 
user
-net user[,option][,option][,...]:在用户模式配置网络栈,其不依赖于管理权限;有效选项有:
        vlan=n                  # 连接至vlan n,默认n=0
        name=name               # 指定接口的显示名称,常用于监控模式中
        net=addr[/mask] # 设定GuestOS中可见的IP网络,掩码可选,默认为10.0.2.0/8
        host=addr               # 指定GuestOS中看到的物理机的IP地址,默认为指定网络中的第二个,即x.x.x.2
        dhcpstart=addr  # 指定DHCP服务地址池中16个地址的起始IP,默认为第16个至第31个,即x.x.x.16-x.x.x.31
        dns=addr                # 指定GuestOS可见的dns服务器地址,默认为GuestOS网络中的第3个地址,即x.x.x.3
        tftp=dir                # 激活内置的tftp服务器,并使用指定的dir作为tftp服务器的默认根目录
        bootfile=file   # BOOTP文件名称,用于实现网络引导GuestOS,如:qemu -hda linux.img -boot n -net user,tftp=/tftpserver/pub,bootfile=/pexlinux.0

kvm的网络模型

1、隔离模型
    使用bridge连接各个虚拟机但不关联物理网卡
2、nat模型
    在路由模型上添加nat规则 iptables
3、路由模型
    在隔离模型的基础之上添加一个虚拟网卡,开启路由转发功能。
    需要虚拟机指定虚拟网卡的ip为网关
    需要在要通信的主机或路由添加回复报文的路由条目
4、桥接模型
    在隔离模型的bridge上添加物理网卡
    将物理网卡变为bridge,将原来的IP放到一张虚拟网卡并添加到桥上
dhcp        服务器
namespace   名称空间

Ubuntu 双网卡:qemu桥接+上网配置

添加网卡 NAT模式

Qemu搭建ARM Vexpress开发环境_第4张图片

添加好网卡后,重洗启动虚拟机,很多朋友使用 ifconfig 命令时可能发现,新添加的网卡无法识别出来,只能识别一个网卡ens33,需要更改配置文件,

sudo vim /etc/netplan/01-network-manager-all.yaml 

当前网络信息如图:
Qemu搭建ARM Vexpress开发环境_第5张图片

# Let NetworkManager manage all devices on this system
network:
    version: 2
    renderer: NetworkManager
    ethernets:
        ens33:
            dhcp4: yes
        ens37:
            dhcp4: no
    bridges:
        br0:
            dhcp4: yes
            interfaces:
                - ens37

Qemu搭建ARM Vexpress开发环境_第6张图片

sudo netplan apply
或直接 reboot

查看IP:
Qemu搭建ARM Vexpress开发环境_第7张图片

起动u-boot

起动

sudo qemu-system-aarch64 \
-machine virt \
-cpu cortex-a57 \
-bios ./u-boot.bin \
-nographic \
-nic tap,model=e1000

对于u-boot的编译后面细说

报错处理

在这里插入图片描述

新建qemu-ifup

`
#!/bin/bash

switch=$(brctl show | sed -n 2p |awk '{print $1}')
/sbin/ifconfig $1 0.0.0.0 up
/usr/sbin/brctl addif ${switch} $1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JoPLef8G-1686285608277)(en-resource://database/27643:1)]

新建qemu-ifdown


#!/bin/bash
#This is a qemu-ifdown script for bridging.
#You can use it when starting a KVM guest with bridge mode network.
#Don't use this script in most cases; QEMU will handle it automatically.

switch=$(brctl show| sed -n 2p |awk '{print $1}')
if [ -n "$1" ]; then
        # Delete the specified interfacename
        tunctl -d $1
        #release TAP interface from bridge
        brctl delif ${switch} $1
        #shutdown the TAP interface
        ip link set $1 down
        exit 0
else
        echo "Error: no interface specified"
        exit 1
fi

qemu-ifupqemu-ifdown两脚本放入配置文件径

sudo mv qemu-if* /usr/local/bin/../etc/
sudo chmod 777  /usr/local/bin/../etc/qemu-if* 

重新起动u-boot

倒计时为0前按任意键
Qemu搭建ARM Vexpress开发环境_第8张图片

测试网络

在提示符处输入

setenv ipaddr   192.168.218.200   #设置u-boot这边的地址(和br0同一网段即可)
setenv serverip 192.168.218.129   #//设置服务器地址(br0网桥的地址

Qemu搭建ARM Vexpress开发环境_第9张图片
Qemu搭建ARM Vexpress开发环境_第10张图片

如上图所示QEMU与主机网络互通

在主机上搭建TFTP

简介

TFTP(Trivial File Transfer Protocol,简单文件传输协议),是一个基于 UDP 协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大、不复杂的应用场合。TFTP协议专门为小文件传输而设计,只能从服务器上获取文件,或者向服务器写入文件,不能列出目录,也不能进行认证。

根据上面关于 TFTP 的介绍,实现TFTP, 搭建一个TFTP 的服务器,ARM开发板当做客户端。
使用虚拟机 Ubuntu来当做服务器,下面我们先讲解一下服务器端的配置。

1、安装依赖包

sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd

2、第二步, 配置/etc/xinetd.conf

vi /etc/xinetd.conf

# Simple configuration file for xinetd
#
#Some defaults, and include /etc/xinetd.d/
defaults
{
#Please note that you need a log_type line to be able to use log_on_success
#and log_on_failure. The default is the following :
#log_type = SYSLOG daemon info
}
includedir /etc/xinetd.d

查看是否有 xinetd.conf 查看内容是否一致, 如果没有创建一个,并输入如下内容

3、第三步,配置/etc/default/tftpd-hpa

sudo vim /etc/default/tftpd-hpa

内容修改成 ,其中工作目录TFTP_DIRECTORY=“/tftpboot” 如果根目录下没有tftpboot,需要自己创建------>这个很关键,不然tfp会启动失败,这个根据自己的路径

#/etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/work/tftpboot/"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"    // 这里是 -L 的小写 -l

4.、第四步,配置/etc/xinetd.d/tftp

vim /etc/xinetd.d/tftp //pathname 不存在时自己创建
打开文件后,对比如下,保持一致

{
        socket_type     = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server          = /usr/sbin/in.tftpd
        server_args     = -s /home/ema/tftpboot/ -c
        disable         = no
        per_source      = 11
        cps                     = 100 2
        flags                   = IPv4
}

5、创建文件夹 mkdir /tftpboot

6、给权限 chmod 777 /tftpboot -R

7、启动服务器 sudo service tftpd-hpa start

8、调试服务器 在/tftpboot  下 touch test.txt

9、核心板 使用tftp下载文件

在主机上搭建NFS

NFS(Network File System)是一种允许不同计算机之间共享文件的网络文件系统。

安装NFS服务器

sudo apt update
sudo apt install nfs-kernel-server

创建共享目录

mkdir /work/nfsroot  -p
chmod 777 /work/nfsroot -R

这将创建一个名为“shared”的目录,并将其权限设置为777,这样所有用户都可以访问它

配置NFS服务器

配置NFS服务器。在Ubuntu 22.04 LTS中,NFS服务器的配置文件位于“/etc/exports”文件中。您可以使用以下命令打开该文件进行编辑:

vim /etc/exports

在该文件中,添加要共享的目录及其权限设置。例如,要将“/work/nfsroot”目录共享给本地网络中的所有计算机,可以添加以下行:

/work/nfsroot  *(rw, sync, no_subtree_check)

在此示例中,“*”表示该目录将共享给本地网络中的所有计算机,“rw”表示该目录可读写,“sync”表示写操作将同步到磁盘上,“no_subtree_check”表示不进行子目录检查。保存并关闭该文件。

启动NFS服务器

配置NFS服务器后,您需要启动NFS服务器以开始共享目录。您可以使用以下命令启动NFS服务器:

sudo systemctl start nfs-kernel-server

如果您想要NFS服务器在系统启动时自动启动,则可以使用以下命令启用该服务:

sudo systemctl enable nfs-kernel-server

测试NFS服务器

可以使用其他计算机上的NFS客户端来测试您的NFS服务器是否正常工作。在NFS客户端上,您可以使用以下命令挂载NFS共享:

sudo mount server_ip:/shared /mnt

在该命令中,server_ip是您的NFS服务器的IP地址,/shared是您要共享的目录,/mnt是您要将共享目录挂载到的本地目录。如果一切正常,您应该能够访问共享目录并进行读写操作。

也可通过如下命令查看配置:

# sudo showmount -e
Export list for ubuntu22:
/work/nfsroot *

对于u-boot、kernel、根文件系统的编译和制作后面会单独出编译制做。


你可能感兴趣的:(Qemu的故事,linux,git,github)