当前位置: 首页 > news >正文

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-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、cdromsnapshot=snapshot           # 指定当前硬盘设备是否支持快照功能:on或offcache=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                   # 启用SDLVNC-vnc display [option,option]   # 默认情况下,qemu使用SDL显示VGA输出;使用-vnc选项,可以让qemu监听在vnc上,并将VGA输出重定向至vnc会话,使用此选项时,必须使用-k选项指定键盘布局类型;其中有许多子选项,具体请参考qemu的手册display1、host:N                                # N为控制台号192.168.1.1:1               # 5900为起始端口2、unix:/path/to/socket_file                                     # 监听在套接字3、none                                  # 不显示optionpassword                                # 连接时需要验证密码,设定密码通过monitor接口使用changereverse                                 # “反向”连接至某处于监听状态的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 virtioname                # 设备名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=0name=name               # 指定接口的显示名称,常用于监控模式中net=addr[/mask] # 设定GuestOS中可见的IP网络,掩码可选,默认为10.0.2.0/8host=addr               # 指定GuestOS中看到的物理机的IP地址,默认为指定网络中的第二个,即x.x.x.2dhcpstart=addr  # 指定DHCP服务地址池中16个地址的起始IP,默认为第16个至第31个,即x.x.x.16-x.x.x.31dns=addr                # 指定GuestOS可见的dns服务器地址,默认为GuestOS网络中的第3个地址,即x.x.x.3tftp=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: 2renderer: NetworkManagerethernets:ens33:dhcp4: yesens37:dhcp4: nobridges:br0:dhcp4: yesinterfaces:- 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/bashswitch=$(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 interfacenametunctl -d $1#release TAP interface from bridgebrctl delif ${switch} $1#shutdown the TAP interfaceip link set $1 downexit 0
elseecho "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     = dgramprotocol                = udpwait                    = yesuser                    = rootserver          = /usr/sbin/in.tftpdserver_args     = -s /home/ema/tftpboot/ -cdisable         = noper_source      = 11cps                     = 100 2flags                   = 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搭建ARM Vexpress开发环境

Qemu搭建ARM Vexpress开发环境 文章目录 Qemu搭建ARM Vexpress开发环境Qemu简介QEMU安装前的准备工作QEMU 安装的两种方式通过网络在线安装源码编译安装源码获取QEMU依赖库安装编译安装 命令选项qemu的标准选项qemu显示选项网络属性相关选项kvm的网络模型 Ubuntu 双网卡&#x…...

JMM如何实现volatile写/读的内存语义

内存屏障类型表 StoreLoad Barriers是一个“全能型”的屏障,它同时具有其他3个屏障的效果。现代的多处理器大多支持该屏障(其他类型的屏障不一定被所有处理器支持)。执行该屏障开销会很昂贵,因为当前处理器通常要把写缓冲区中的数…...

Smali的使用技巧:快速定位Android应用程序中的关键代码

简述 Smali是一种Android应用程序的Dalvik虚拟机指令集汇编语言,用于编写和修改应用程序的DEX文件。通过编写和修改Smali代码,可以实现对Android应用程序的定制化和逆向分析。Smali语言类似于汇编语言,直接操作Dalvik虚拟机指令集。 Smali代…...

04_两种常见的网页反爬措施及应对方法

一、封禁IP地址反爬 1、应对思路: 理解这种反爬方法的含义:当我们用自己电脑的ip地址短时间,高频率访问某个具有此类反爬设置的网站,这种网站就会把我们的ip地址封禁,一般都是封24小时或者其他时间。解决方案:通过代理ip访问,这种方式只不过就是让你有了重新访问网页的…...

安装docker环境,并制作docker镜像

docker环境安装 进入linux虚机后,安装docker环境,制作docker镜像并运行,进入运行中的容器,查看挂载的日志或报告 1.安装docker sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 2.使用docker仓库安装…...

MySQL数据库 – node使用

1 MySQL查询对象 2 MySQL查询数组 3 mysql2库介绍使用 4 mysql2预处理语句 5 mysql2连接池使用 6 mysql2的Promi 这里仅说明如何使用服务器连接数据库并进行操作。 预处理语句就是可以输入变量的语句(表现形式是有符号:?)。需…...

JAVA使用HTTP代码示例模板

以下是一个使用Java发送HTTP请求的示例代码: java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class HttpExample { public static void main(String[] args) { try…...

elementui tree 支持虚拟滚动和treeLine (下)

​ 由于我之前没有发布过npm 包,这里还得现学一下。 参考资料: 链接: 如何写一个vue组件发布到npm,包教包会,保姆级教学链接: vue组件发布npm最佳实践 按照上面的步骤,我通过 vue-sfc-rollup 生成了项目,…...

富人父母都教给孩子什么样的财富思维?

1.认清金钱的价值和作用,不要否认或忽视它对生活的影响。 2.提高社交能力,学会与不同的人沟通和合作,扩大人脉和资源。 3.理性消费,让钱在流动中产生效益,而不是囤积或浪费。 4.释放自己的欲望,追求自己想要…...

国内比较火的报表工具测评——Smartbi电子表格软件和Finereport

最近在学习BI软件,因为最近工作中需要开发报表,因此选用了国内市场比较热门的报表工具——Finereport和Spreadsheet进行学习。 BI软件经常会定期发布新的版本,增加新的功能模块,或者对现有功能进行增强,提升运行效率。…...

变电所运维云平台在电力系统中的应用

安科瑞虞佳豪 变电所运维云平台可以看做是电力监控系统的网络应用延伸,变电所运维云平台通过互联网,电力运维人员通过手机可以随时随地了解工厂配电系统的运行情况,做到无人值守或者少人值守,同时可以监测用能状况、漏电、线缆异…...

【51单片机】AT24C20数据帧(I2C总线)

🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Love Story】 🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰 小吉先向大家道个歉,因为最近在期末…...

Python内置函数isinstance()函数介绍

Python内置函数isinstance()函数介绍 isinstance() 函数是Python内置函数,来判断一个对象是否是一个已知的类型,返回值为布尔值True或False。其语法格式: isinstance(object, classinfo) 【官方说法https://docs.python.org/zh-cn/3/librar…...

QxRibbon 知:搭建 CMake 构建环境

文章目录 前言安装 cmake问题处理qtcreator 检测 CMake 异常 参考资料 前言 高版本的 QtCreator 已经集成了 cmake 工具,并支持以 CMakelists.txt 文件作为工程开发项目。 https://www.qt.io/blog/2019/07/30/update-on-cmake-project-support-in-qt-creator 安装…...

Spring框架-面试题核心概念

目录 1.Spring框架的作用是什么? 2. 什么是DI? 3.什么是AOP? 4.Spring常用注解 5.Spring中的设计模式 6.Spring支持的几种bean的作用域 7.Spring中Bean的生命周期? 8.Spring中的事务管理 9.Spring中的依赖注入方式有几种 10.Sprin…...

Tomcat部署及优化

Tomcat部署及优化 一、Tomcat的介绍1.Tomcat核心组件2.Tomcat 功能组件结构3.Container 结构分析:4.Tomcat处理请求过程 二、Tomcat 部署步骤1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下2.安装JDK3.设置JDK环境变量4.编写一个java 简易的源代码…...

C++/C按照时间命名保存bin文件

背景 在Linux应用编程过程中,使用C或者C语言保存、读取bin文件是比较常见的需求。这里详细记录一下使用C保存bin文件,也可以使用C语言实现。 代码 C/C语言保存bin文件函数,C中也能使用 正确写入返回0,错误返回-1 // C 保存bi…...

面向多告警源,如何构建统一告警管理体系?

本文介绍告警统一管理的最佳实践,以帮助企业更好地处理异构监控系统所带来的挑战和问题。 背景信息 在云原生时代,企业IT基础设施的规模越来越大,越来越多的系统和服务被部署在云环境中。为了监控这些复杂的IT环境,企业通常会选…...

python 面向对象 -- 简单理解版

一、什么是面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。除了Python,Java也是一门面向对象的编程语言。 先来简单的了解下面向对象的一些基本特征。 类(Class): 用来描述具有相…...

SpringMVC 程序开发

✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录 什么是 Spring MVCMVC 定义 怎么学 Spring MVCSpring MVC 创建和连接创建 Spring MVC 项目RequestMapping 注解介绍PostMappi…...

使用单片机遇到的几个问题及解决方案1

1.为什么我跟着视频学习的过程中,我没有找到“端口"的选项呢?我甚至没有出现“其他插口”。 想要找到设备管理器最快的方法就是: 首先如果把输入法调为大写形式,然后按下“WINX”,再按“M”就会出现一个设备管理…...

vue项目中el-upload 组件添加token的方法

在使用el-upload的时候&#xff0c;上传文件到服务器&#xff0c;有时候后台要求上传token&#xff0c;怎么处理呢&#xff1f;以下是一个示例。 效果图 template中片段 <el-dialog :modal-append-to-body"false" title"上传文件" :visible.sync"…...

独立按键检测短按、长按,松手后响应操作

背景 有项目使用独立按键检测&#xff0c;短按、长按。根据使用效果&#xff0c;发现松手后&#xff0c;也就是按键弹起后响应操作比较好操作。 记得之前&#xff0c;博主写过一篇关于按键的检测的文章&#xff0c;但是过于复杂了。可能很难懂&#xff0c;这里就简单一点&…...

BurpSuite2023测试越权漏洞

BurpSuite2023测试越权漏洞 BurpSuite安装创建项目 - 打开内置浏览器越权漏洞测试问题处理 BurpSuite安装 官网下载社区版并安装&#xff0c;下载地址&#xff1a;链接: https://portswigger.net/burp 安装成功后图标 创建项目 - 打开内置浏览器 打开BurpSuite&#xff0c…...

申请国家标准项目管理专业人员能力评级(CSPM)报名条件有哪些?

2021年10月&#xff0c;中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系&#xff0c;开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会&#xff08;CAS&#xff09;组织开展的项…...

代码随想录算法训练营第五十二天|300.最长递增子序列|674. 最长连续递增序列|718. 最长重复子数组

LeetCode300.最长递增子序列 动态规划五部曲&#xff1a; 1&#xff0c;dp[i]的定义&#xff1a;本题中&#xff0c;正确定义dp数组的含义十分重要。dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度。为什么一定表示 “以nums[i]结尾的最长递增子序” &#xff0c…...

完全卸载mysql教程

引言 很多人因为第一次安装mysql导致安装错误&#xff0c;或者安装的数据库版本太高&#xff0c;比如mysql8.0版本&#xff0c;出现了很多问题&#xff0c;导致数据库无法使用&#xff0c;或者一些图形界面无法操作&#xff0c;想要卸载&#xff0c;重装稳定的mysql数据库&…...

4G开发板-安卓手机开发套件-MTK主板开发板定制

开发板是一种用于嵌入式系统开发的电路板&#xff0c;它包含了各种硬件组件&#xff0c;如中央处理器、存储器、输入设备、输出设备、数据通路/总线以及外部资源接口等。为了满足特定的开发需求&#xff0c;嵌入式系统开发者通常会根据项目要求来定制开发板&#xff0c;当然用户…...

人工智能十大新星揭晓,华人学者占90%

人工智能领域著名杂志 IEEE Intelligent Systems发布了 2022 年度“人工智能十大新星”&#xff08;AIs 10 to Watch&#xff09;名单 &#xff0c;其中有九位都是华人研究者。知识人网小编推荐给大家。 近日&#xff0c;人工智能领域著名杂志 IEEE Intelligent Systems公布了 …...

ROS学习——通信机制(话题通信①—发布方实现)

2.1 话题通信 Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 040话题通信(C)1_发布方框架_Chapter2-ROS通信机制_哔哩哔哩_bilibili 一、ROS 中的基本通信机制主要有如下三种实现策略 话题通信(发布订阅模式服务通信(请求响应模式)参数服务器(参数共享模式) 二、…...

取消网站备案/附近有学电脑培训班吗

简介 htmlcss提示框/弹窗公告实例 演示 实例代码 <!-- 弹窗代码开始 --> <div class"web_notice" style"position: fixed;top: 0;left: 0;width: 100%;height: 100%;background: rgba(0,0,0,0.3);z-index: 99999;"> <div style"pos…...

网站开发如何让图片加载的更快/深圳网站建设系统

常量的定义 常量的值在编译时就已经确定常量的定义格式与变量基本相同等号右侧必须是常量或者常量表达式常量表达式中的函数必须是内置函数常量的初始化规则与枚举 在定义常量组时&#xff0c;如果不提供初始值&#xff0c;则表示将使用上行的表达式使用相同的表达式不代表具有…...

网页设计模板网站/东莞做网站公司

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼BSRAM(Burst pipelined synchronous static RAM&#xff0c;突发式管道同步静态存储器)CAS(Column Address Strobe&#xff0c;列地址控制器)CCT(Clock Cycle Time&#xff0c;时钟周期)DB(Deep Buffer&#xff0c;深度缓冲)DDR SD…...

wordpress财付通/网络营销方案设计范文

本篇文章小编给大家分享一下Python箱型图绘制与特征值获取过程代码实例&#xff0c;小编觉得挺不错的&#xff0c;现在分享给大家供大家参考&#xff0c;有需要的小伙伴们可以来看看。它主要用于反映原始数据分布的特征&#xff0c;还可以进行多组数据分布特征的比较如何利用Py…...

wordpress如何添加视频/枸橼酸西地那非片

我去年毕业&#xff0c;从事PHP学习和开发一年多。 background:medical muti-media electric web; 先讲一下我的背景吧&#xff0c;我大学的学校是一个医科学校&#xff0c;然而专业是计算机动漫设计方向。我是理科生而且中学也没有学会画画之类的。当年大一想将来能成为动画家…...

游戏币销售网站建设/互联网精准营销

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼程序:ORG 0000HLJMP MAINORG 000BHLJMP TIMEORG 1000HHOUR1 EQU 10hHOUR2 EQU 12hMIN1 EQU 14hMIN2 EQU 16hSEC1 EQU 18HCOUNT EQU 20HNUM1 EQU 22HNUM2 EQU 24HLL4 EQU 26Hs1 bit P1.0s2 bit P1.1s3 bit P1.2s4 bit P1.3A1 EQU 36…...