Qemu搭建ARM Vexpress开发环境

news2024/11/27 19:40:42

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-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模式

在这里插入图片描述

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

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

当前网络信息如图:
在这里插入图片描述

# 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

在这里插入图片描述

sudo netplan apply
或直接 reboot

查看IP:
在这里插入图片描述

起动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前按任意键
在这里插入图片描述

测试网络

在提示符处输入

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

在这里插入图片描述
在这里插入图片描述

如上图所示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、根文件系统的编译和制作后面会单独出编译制做。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/626959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里高级工程师纯手打造的Spring Cloud Alibaba微服务全彩手册,限时分享

Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。 Springcloud 和 Srpingcloud Alibaba 区别? SpringCloud: 部分组件停止维护和更新,给开发带来不便;SpringC…

msvcr120.dll丢失怎样修复,快速修复msvcr120.dll的方法分享

msvcr120.dll是Microsoft Visual C Redistributable for Visual Studio 2013的一个组件,是一个动态链接库文件。它包含了许多函数和程序,可以被其他程序调用,这些程序使用了Visual C 2013运行时库。在Windows操作系统中,许多软件和…

vxe-table 列表过滤踩坑

vxet-table 官网给的案例:https://vxetable.cn/#/table/base/filter 通过设置 filters 属性和 filter-method 方法可以开启列筛选功能,通过 filter-multiplefalse 设置为单选 如果是服务端筛选,只需加上 filter-config{remote: true} 和 fi…

vue页面缓存失效问题解决

文章目录 一、问题背景二、问题排查三、问题解决 一、问题背景 前端技术栈用的是vue,然后用keep-alive组件进行缓存页面【切换页面不进行刷新页面,保留之前的查询条件及状态等等】 测试提bug:部分页面突然缓存失效了,每次切换都…

易基因:全基因组DNA甲基化和小RNA分析揭示甘蓝型油菜种子的基因组不对称性 | 植物发育

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 多倍体是被子植物基因组进化中的一种持续现象,有助于现存开花植物的多样性。甘蓝型油菜(Brassica napus)是世界上最重要的被子植物油料作物品种之一&a…

2023年系统分析师上午题

全国计算机技术与软件专业技术资格(水平)考试 2023年上半年 系统分析师 上午试卷 (考试时间 9 : 00~11 : 30 共 150 分钟) 1. 在答题卡的指定位置上正确写入你的姓名和准考证号,并用正规 2B 铅笔在你写入…

重命名文件名也可以很优雅,看看这些技巧

文件重命名对于许多工作场景来说是非常重要的。比如,当你需要整理大量文件时,一个好的文件命名系统可以帮助你更轻松地管理和查找文件。但是,当需要重命名大量文件时,逐个重命名显然是非常耗时和繁琐的。这时,批量重命…

mysql-8.0.32 数据库的安装 (Linux)

Linux 中 mysql-8.0.32 数据库的安装 缘步骤常见问题解决方案问题一. mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory解决方案:方案一(推荐):方案二&a…

【6 微信小程序学习 - 小程序的组件化开发,通信】

1 小程序组件化开发 2 创建一个组件 1 创建 1,在根目录创建components文件夹,自定义组件都放在此处 2,右键新建component,输入名称后悔创建四个文件 3.其中.json中的"component": true,表示这是一个组件 4,编写代码,和其他代码逻辑相同 2 使用 1,要使用组件的父组…

1:操作系统导论

1.1操作系统的定义 •Anoperatingsystemactsanintermediarybetweenuserofacomputerandthecomputer hardware. ◦ 操作系统充当计算机⽤⼾和计算机硬件之间的中介 •Thepurposeofanoperatingsystemistoprovideanenvironmentinwhichausercanexecute programsinaconvenientandeff…

小红书平台,“松弛感”生活十大趋势报告出炉

放眼时尚、教育、情感、职场等各大领域,继氛围感、仪式感、精致感后,今年都在谈论一个词——松弛感。包括现下轻户外、轻运动、轻解压等风口,也都呼应着年轻人对松弛感的追求。 千瓜数据显示,2023年1月-5月,“松弛感”…

Vue全局事件总线简明笔记

1、作用: 全局事件总线是一种组件间通信的方式,并不是插件,适用于任意组件间通信、实现组件间的通信。 让所有的组件都能访问得到全局事件总线,那么创建的思路就是,全局事件总线一定要让VC或者VM访问得到。 结合组件的…

leetcode24. 两两交换链表中的节点(java)

两两交换链表中的节点 leetcode24. 两两交换链表中的节点題目描述 迭代法.解题思路代码演示 递归法解题思路代码演示 二叉树专题 leetcode24. 两两交换链表中的节点 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/swap-…

全志V3S嵌入式驱动开发(看门狗驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 大家如果做过工业级别的嵌入式设备,那么对看门狗应该不陌生。很多工业级的设备,其应用环境很多时候是非常糟糕的&#xff0…

抖音seo矩阵系统源码开发及部署配置文档分享

一、开发要求及实现流程 :Scope: video.create 需要申请权限 需要用户授权 该接口用于上传视频文件到文件服务器,获取视频文件video_id(该 ID 为加密后的 ID)。该接口适用于抖音。 注意: 抖音的OAuth API以https://…

阿里云弹性公网ip(EIP)是什么?eip详细介绍

阿里云eip是什么?阿里云百科分享弹性公网IP详细介绍,阿里云弹性公网EIP是什么意思?EIP是可以独立持有的公网IP地址,EIP可以和阿里云专有网络VPC类型的云服务器ECS、NAT网关、ENI网卡、私网负载均衡SLB等绑定,通过EIP可…

chatgpt赋能python:Python是什么

Python是什么 Python是一门高级编程语言,由Guido van Rossum于1991年发明并开发。它具有简单易学、可读性强、跨平台等特点,在Web开发、数据分析、机器学习等领域广泛应用。 Python的文档 Python的文档非常全面,包括官方文档、第三方文档、…

SimSwap复现指引及代码分析【2023有更新】

SimSwap复现指引及代码分析【2023有更新】 0、前言1、复现指引环境配置指引Inference for image or video face swappingInference参数解析Inference用法示例图像视频 2、结果分析3、代码分析 0、前言 论文讲解在:https://blog.csdn.net/qq_45934285/article/detail…

33、js - 事件循环 微任务 宏任务

1、事件循环♻️(EventLoop) js是单线程语言,也就是某一刻只能执行一行代码,为了让耗时代码不阻塞其他代码运行,设计了事件循环模型。 事件循环是一个并发模型,负责执行代码、收集异步任务的模型&#xff0…

容器(第四篇)创建镜像-dockerfile

创建镜像有三种方法,分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。 基于现有镜像创建: ①先使用现有镜像创建容器 docker run ②再进入容器进行内容更新 docker exec ③最后提交成新的镜像 docker commit 或 docker…