建设银行官方网站面试详细信息/营业推广策略有哪些
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-ifup
与qemu-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的时候,上传文件到服务器,有时候后台要求上传token,怎么处理呢?以下是一个示例。 效果图 template中片段 <el-dialog :modal-append-to-body"false" title"上传文件" :visible.sync"…...

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

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

申请国家标准项目管理专业人员能力评级(CSPM)报名条件有哪些?
2021年10月,中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会(CAS)组织开展的项…...

代码随想录算法训练营第五十二天|300.最长递增子序列|674. 最长连续递增序列|718. 最长重复子数组
LeetCode300.最长递增子序列 动态规划五部曲: 1,dp[i]的定义:本题中,正确定义dp数组的含义十分重要。dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度。为什么一定表示 “以nums[i]结尾的最长递增子序” ,…...

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

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

人工智能十大新星揭晓,华人学者占90%
人工智能领域著名杂志 IEEE Intelligent Systems发布了 2022 年度“人工智能十大新星”(AIs 10 to Watch)名单 ,其中有九位都是华人研究者。知识人网小编推荐给大家。 近日,人工智能领域著名杂志 IEEE Intelligent Systems公布了 …...

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