15AH, San Francisco

California, United States.

Send Your Mail At:

tianyingkejishe@sina.cn

Working Hours

Mon-Sat: 9.30am To 7.00pm

作者标题

Autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et dolore feugait.

Author Archive by stormwind

【网分】史密斯圆图调试天线阻抗匹配指导【网分】

一、引言

在现代无线通信系统中,天线阻抗匹配是确保信号高效传输的关键环节。阻抗失配不仅会导致信号反射、功率损耗,还可能影响整个系统的稳定性和性能。史密斯圆图(Smith Chart)作为一种经典的图形化工具,凭借其直观、高效的特点,成为射频工程师调试天线阻抗匹配的利器。它能够将复杂的复数阻抗变换过程可视化,帮助工程师快速完成阻抗匹配网络的设计与优化。
本文将介绍如何利用史密斯圆图分析和调整天线阻抗,涵盖基础理论、实际操作步骤,配合鼎阳的矢量网络分析仪为工程师提供天线阻抗匹配测试方案。

一、引言

在现代无线通信系统中,天线阻抗匹配是确保信号高效传输的关键环节。阻抗失配不仅会导致信号反射、功率损耗,还可能影响整个系统的稳定性和性能。史密斯圆图(Smith Chart)作为一种经典的图形化工具,凭借其直观、高效的特点,成为射频工程师调试天线阻抗匹配的利器。它能够将复杂的复数阻抗变换过程可视化,帮助工程师快速完成阻抗匹配网络的设计与优化。
本文将介绍如何利用史密斯圆图分析和调整天线阻抗,涵盖基础理论、实际操作步骤,配合鼎阳的矢量网络分析仪为工程师提供天线阻抗匹配测试方案。

图3 史密斯圆图阻抗圆

图4 史密斯圆图导纳圆

图5 左电导圆/并L/逆时针

图6 左电导圆/并C/顺时针

图7 右电阻圆/串L/顺时针

图7 右电阻圆/串L/顺时针

图8 右电阻圆/串C/逆时针

三、阻抗匹配步骤

1、软件仿真

使用鼎阳的矢网测试2.4G天线的S11,将显示格式切换为史密斯圆图,测得2.4G频点处的阻抗为10+10j,将数据点添加到仿真软件中。

图9 天线2.4G频点原始阻抗

为了将阻抗点匹配到史密斯圆图正中心的50Ω处,先串联L使得数据点沿着电阻圆顺时针移动到与50Ω等电导圆的交叉位置,之后再并联C使得数据点沿着电导圆顺时针移动到50Ω匹配点。

图10

图11 天线2.4G频点串联L并联C后阻抗

2、网分仿真

鼎阳的矢量网络分析仪不仅具备高精度的S参数测试能力,同样集成了阻抗匹配仿真功能,可帮助工程师快速优化天线、滤波器、功放等射频电路的阻抗匹配设计。该功能基于史密斯圆图可视化分析,结合自动化计算与仿真工具,显著提升调试效率。

点击CAL按键 > 夹具仿真 > 夹具仿真设置 > 选择相应port > Circuit Model。

选择合适的匹配电路,设置电容电感值,最后勾选“Enable Port Matching…”,同时打开夹具仿真应用。

注意,双击“电路模型”可以将阻抗匹配窗口最小化,便于调试。

以下图中的设置为例,选择“Shunt C-Series L”(并联C-串联L),注意阻抗匹配时是从DUT往负载端看,所以实际上是先串联了2.15nH的电感L,再并联了8.5Pf的电容C,其他未使用到的参数(R/G)不做设置即可。橙色迹线Tr1是未进行匹配仿真的原始迹线,蓝色迹线Tr2是经过匹配仿真后的迹线,可以看到对应频点经过匹配后已经十分接近50Ω匹配点。

图12 鼎阳矢网史密斯圆图阻抗匹配仿真

四、总结

本文简单介绍了史密斯圆图在阻抗匹配中的核心原理,配合”上感下容,左并右串”等实用口诀,提升匹配网络设计效率。同时介绍鼎阳矢量网络分析仪的阻抗匹配仿真功能,让工程师更加快速便捷的完成天线、放大器、滤波器等器件的阻抗匹配。

【Linux】Linux创建虚拟硬盘脚本

#!/bin/bash

echo $1

diskP1=p1
diskP2=p2

if [[ $1 = "-h" || $1 = "-H" ]]; then
	echo "===========虚拟磁盘使用说明==========="
	echo "参数一:命令字,C-创建磁盘 D-删除磁盘 F-格式化磁盘 S-烧写固件 H-帮助"
	echo "参数二:硬盘大小,单位MB,最小硬盘1MB"
	echo "参数三:硬盘名称,自定义"
	echo "======================================"
	exit 1

else
	if [[ -z "$1" || -z "$2" || -z "$3" ]]; then
        	echo "请输入有效的参数!"
        	exit 1
	elif [[ $1 = "-c" || $1 = "-C" ]]; then
		echo "开始创建虚拟磁盘!"
		dd if=/dev/zero of=$3 bs=1M count=$2
		# 非交互式执行 fdisk 命令
		# 这里的逻辑是:n(新建分区) -> p(主分区) -> 1(分区号) -> 回车(默认起始扇区) -> +10G(大小) -> w(保存)
		echo -e "n\np\n1\n\n+200M\nn\np\n\n\n\nw" | fdisk $3
		echo "创建磁盘完成!"
	elif [[ $1 = "-d" || $1 = "-D" ]]; then
		echo "开始删除虚拟磁盘!"
		sudo rm -rf $3

		echo "删除完成!"

	elif [[ $1 = "-f" || $1 = "-F" ]]; then
		echo "开始格式化虚拟磁盘!"
		sudo losetup -fP $3
		varInfo=$(losetup -l | grep $3)
		varInfo=(${varInfo//,/ })
		echo ${varInfo}

		sudo mkfs.fat ${varInfo}${diskP1}
		sudo mkfs.ext4 ${varInfo}${diskP2}

		sudo losetup -d $varInfo
		echo "格式化完成!"

	elif [[ $1 = "-s" || $1 = "-S" ]]; then
		echo "开始烧写固件!"
		sudo losetup -fP $3
		varInfo=$(losetup -l | grep $3)
                varInfo=(${varInfo//,/ })
                echo ${varInfo}
		sleep 1

		sudo mount ${varInfo}${diskP1} /mnt
		sudo cp Image s5000c-64c.dtb /mnt
		sync
		sudo umount /mnt
		sudo umount /mnt
		sleep 1

		sudo mount ${varInfo}${diskP2} /mnt
		sudo cp rootfs.tar /mnt
	        cd /mnt
		sudo tar -xvf rootfs.tar
		
		sleep 1	

		sync
		  
		sleep 5
		cd /
		sudo umount /mnt
		
		sudo umount /mnt
		sleep 1

		sudo losetup -d $varInfo
		echo "烧写完成!"

	fi


fi

【Linux】Linux创建虚拟磁盘并分区格式化

快速创建一个虚拟磁盘

你可以通过以下步骤在Linux上虚拟一个磁盘,并将其挂载到 /mnt/ 目录下:

步骤 1: 创建一个虚拟磁盘文件

使用 dd 命令创建一个虚拟磁盘文件(例如大小为1GB):

dd if=/dev/zero of=/root/virtual_disk.img bs=1M count=1024 

这将创建一个名为 virtual_disk.img 的1GB大小的文件。

步骤 2: 将虚拟磁盘文件格式化为ext4文件系统

使用 mkfs.ext4 命令将虚拟磁盘文件格式化为ext4文件系统:

mkfs.ext4 /root/virtual_disk.img 

步骤 3: 创建挂载点目录

创建一个挂载点,例如 /mnt/ 目录:

mkdir -p /mnt/virtual_disk 

步骤 4: 挂载虚拟磁盘文件

使用 mount 命令将虚拟磁盘挂载到 /mnt/virtual_disk

mount /root/virtual_disk.img /mnt/virtual_disk 

步骤 5: 检查挂载是否成功

使用 df -h 命令查看挂载是否成功:

df -h 

可选:开机自动挂载

如果希望在系统重启后自动挂载该虚拟磁盘,可以编辑 /etc/fstab 文件,添加以下内容:

/root/virtual_disk.img /mnt/virtual_disk ext4 defaults 0 0 

这样就成功在Linux系统上创建并挂载了一个虚拟磁盘文件。

单独挂载每个分区

在虚拟硬盘上创建分区并格式化后,可以单独挂载每个分区。具体步骤如下:

步骤 1: 使用 losetup 绑定虚拟硬盘到环回设备
假设你已经创建了一个虚拟硬盘文件,例如 /root/virtual_disk.img,并在其中创建了分区。首先,使用 losetup 将虚拟磁盘文件关联到一个环回设备(loop device):

losetup -fP /root/virtual_disk.img 
  • -f:自动选择一个未使用的环回设备。
  • -P:自动解析分区信息。

使用以下命令查看绑定的环回设备名(例如 /dev/loop0):

losetup -l 

步骤 2: 查看分区信息

使用 lsblk 或 fdisk -l 查看该环回设备的分区:

lsblk /dev/loop0 

或者:

fdisk -l /dev/loop0 

此时,你应该可以看到类似 /dev/loop0p1/dev/loop0p2 等分区。

步骤 3: 挂载单独的分区

假设你想挂载第一个分区 /dev/loop0p1,可以使用 mount 命令将其挂载到指定目录。例如,挂载到 /mnt/partition1

mkdir -p /mnt/partition1 
mount /dev/loop0p1 /mnt/partition1 

步骤 4: 检查挂载是否成功

使用 df -h 或 lsblk 检查分区是否成功挂载:

df -h 
lsblk 

可选:解除绑定环回设备

完成操作后,可以通过以下命令解除环回设备的绑定:

losetup -d /dev/loop0 

可选:开机自动挂载分区

如果希望分区在系统重启后自动挂载,可以在 /etc/fstab 中添加对应分区的挂载信息。例如:

/dev/loop0p1 /mnt/partition1 ext4 defaults 0 0 
/dev/loop0p2 /mnt/partition2 ext4 defaults 0 0 

通过上述步骤,你可以单独挂载虚拟磁盘中的每个分区。

losetup指令简介

losetup(set up and control loop devices) 是 Linux 中用于管理环回设备(loop devices)的命令。环回设备是一个虚拟设备,它将文件当作块设备来使用,从而可以像操作硬盘一样操作一个普通的文件。losetup 指令主要用于将文件与环回设备进行绑定或解除绑定,以及查看现有环回设备的状态。

基本用法

  1. 绑定一个文件到环回设备
losetup /dev/loopX /path/to/file.img 

将文件 /path/to/file.img 绑定到指定的环回设备 /dev/loopX,使其成为一个可以像物理硬盘一样操作的设备。

  1. 自动选择未使用的环回设备进行绑定
losetup -f /path/to/file.img 

-f 选项会自动查找并选择一个未使用的环回设备,避免手动指定。

3. 自动解析分区信息
losetup -fP /path/to/file.img 

-P 选项会自动扫描并解析文件中的分区表,使文件中的各个分区都能作为 /dev/loopXpN 设备挂载,类似于实际的硬盘分区。

4. 查看所有环回设备
losetup -a 

列出系统中所有已经绑定的环回设备及其关联的文件。

5. 查看特定环回设备的信息

losetup /dev/loopX

显示特定环回设备的详细信息。

6. 解除文件与环回设备的绑定
losetup -d /dev/loopX 

将环回设备 /dev/loopX 解除绑定,不再将其作为块设备使用。

7. 解除所有未使用的环回设备
losetup -D 

动解除所有未使用的环回设备的绑定。

常用选项
-f:自动查找一个未使用的环回设备。
-P:自动重新扫描分区表(适用于分区文件)。
-d:解除环回设备绑定。
-a:显示所有绑定的环回设备及其信息。
-l:列出系统中所有环回设备的详细信息。
-D:自动解除所有未使用的环回设备。

示例

  1. 创建并挂载一个虚拟磁盘:
dd if=/dev/zero of=/root/virtual_disk.img bs=1M count=100 
losetup -fP /root/virtual_disk.img 
mkfs.ext4 /dev/loop0 
mount /dev/loop0 /mnt 

2.解除虚拟磁盘的挂载和解除环回设备绑定:

umount /mnt 
losetup -d /dev/loop0 

用环回设备挂载虚拟磁盘和ISO文件的区别

主要区别如下:

  1. 分区处理:
    • 虚拟磁盘分区 需要通过 losetup 解析出每个分区,并为每个分区创建独立的环回设备。
    • 光盘文件 没有分区,只需将整个文件绑定到一个环回设备。
  2. 设备数量:
    • 虚拟磁盘 可能涉及多个环回设备(一个表示整个磁盘,其他表示各个分区)。
    • 光盘文件 通常只需要一个环回设备。
  3. 文件系统:
    • 虚拟磁盘 支持多种文件系统,每个分区可以使用不同的文件系统类型。
    • 光盘文件 通常使用 ISO 9660 或 UDF 文件系统,且是只读的。
  4. 操作复杂性:
    • 虚拟磁盘分区 需要先解析分区表并绑定多个环回设备。
    • 光盘文件 直接挂载整个文件,操作简单。

【NFS】Linux开发挂载远程NFS服务器

一、NFS服务器配置

见下一个文章

【NFS】Ubuntu安装nfs服务器及使用教程 – 天英科技创新协会

二、Uboot挂在NFS服务器

1、nfs指令是否支持

可以通过编译uboot源码,menuconfig勾选来实现,具体编译方法不在此描述。

2、nfs指令使用

nfs 80800000 192.168.1.200:/home/xiaobao/workspace/nfs/rootfs/Image

nfs指令通过挂在192.168.1.200远端NFS服务器,把镜像文件Image加载到内存80800000

3、NFS版本兼容

  • NFS 版本不兼容导致的共享文件找不到
    • U-Boot 中 NFS 为 V2 版本
    • 服务端 NFS 为 V3、V4 版本

解决方案:

【NFS】VFS: Unable to mount root fs via NFS. [ 115.256801] devtmpfs: mounted【NFS】 – 天英科技创新协会

4、加载超时一直打印TTTTTTTTTTTTTTT

解决方案:
编辑服务端 /etc/hosts 文件:

sudo vim /etc/hosts

添加开发板 IP 和服务端 NFS 共享文件目录:

再次重启 NFS 服务:

sudo service nfs-kernel-server restart

三、kernel挂在NFS服务器

1、支持nfs客户端及网络环境

配置网络部分

	Networking support 
		Networking options 
			TCP/IP networking
			IP: kernel level autoconfiguration
			[*] IP: DHCP support
			[*] IP: BOOTP support

配置开启nfs服务

File systems 
	Network File Systems 
	<*> NFS client support 
	[*] NFS client support for NFS version 3
	[*] NFS client support for the NFSv3 ACL protocol extension 
	[*] NFS client support for NFS version 4
	[*] Root file system on NFS 

uboot启动参数配置

setenv bootargs root=/dev/nfs nfsroot=172.16.27.200:/home/xiaobao/workspace/nfs/rootfs ip=dhcp console=ttyAMA1,115200 earlycon=pl011,0x20001000 rootdelay=10 rw

启动直接挂载远端NFS

【NFS】Ubuntu安装nfs服务器及使用教程

一、概述

nfs全称是network files system(网络文件系统),是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

正是因为nfs文件系统可以使客户端像访问本地文件一样地访问nfs服务器的文件,所以在嵌入式设备开发阶段常常用来挂载到开发板,执行正在开发的程序,这样可以避免频繁地将程序烧录到嵌入式开发板,极大地节省了开发时间。

二、在Ubuntu搭建nfs服务器

👉2.1 安装nfs服务器
在Ubuntu安装nfs服务器比较简单,只需要在命令行执行下面这个命令即可:

sudo apt install nfs-kernel-server

2.2 创建nfs服务器共享目录
创建一个目录用于nfs服务器将文件共享给客户端,这个目录将会写入到nfs配置文件中:

sudo mkdir /nfsroot

执行下面命令修改该目录的拥有者为当前用户,我的用户wkd,读者需要改为自己的用户组:用户名:

sudo chown wkd:wkd /nfsroot/

👉2.3 修改nfs服务器配置文件

使用vi命令打开nfs服务器配置文件/etc/exports

sudo vi /etc/exports

指定nfs服务器共享目录及其属性,内容如下:

/nfsroot  *(rw,sync,no_root_squash)

解析:
/nfsroot:指定/nfsroot为nfs服务器的共享目录
*:允许所有的网段访问,也可以使用具体的IP
rw:挂接此目录的客户端对该共享目录具有读写权限
sync:资料同步写入内存和硬盘
no_root_squash:root用户具有对根目录的完全管理访问权限
no_subtree_check:不检查父目录的权限

2.4 重启nfs服务器
执行下面两个命令其中一个可以重启nfs服务器:

sudo service nfs-kernel-server restart
或者
sudo /etc/init.d/nfs-kernel-server restart

到此,Ubuntu安装nfs服务器的过程就完成了,可以执行下面这个命令查看nfs服务器的共享目录:

showmount -e localhost

三、客户端访问nfs服务器共享目录
这一小节使用nfs客户端是嵌入式开发板系统自带的,一般嵌入式开发板移植了Linux系统后,都自带有nfs客户端,如果确实需要在Ubuntu安装,可以执行下面的命令安装:

sudo apt install nfs-common

3.1 在nfs客户端挂载服务器共享目录
下面是在客户端挂载服务器共享目录的命令,在嵌入式开发板或者Ubuntu的nfs客户端挂载都可以使用,需要将192.168.2.183换成自己的nfs服务器ip:

mount -t nfs -o nolock 192.168.2.183:/nfsroot /nfsroot

-t:挂载的文件系统类型
-o nolock:不要文件锁
192.168.xxx.xxx:/nfsroot:nfs服务器ip:服务器共享目录
nfsroot:客户端已存在的目录

-t:挂载的文件系统类型
-o nolock:不要文件锁
192.168.xxx.xxx:/nfsroot:nfs服务器ip:服务器共享目录
nfsroot:客户端已存在的目录

3.2 在nfs客户端卸载服务器共享目录

nfs客户端执行下面命令,可以查询挂载的·nfs·服务器目录

mount

在nfs客户端执行下面命令,可以卸载的·nfs·服务器目录

umount /nfsroot

至此,在客户端挂载、卸载服务器就演示完成。

【NFS】VFS: Unable to mount root fs via NFS. [ 115.256801] devtmpfs: mounted【NFS】

问题:

NFS配置没问题:NFS服务开启与使用、目录挂载与卸载
使用 NFS 挂载文件系统的时候报错:

[  101.800373] VFS: Unable to mount root fs via NFS, trying floppy.
[  101.807335] VFS: Cannot open root device "nfs" or unknown-block(2,0): error -6
[  101.814718] Please append a correct "root=" boot option; here are the available partitions:
[  101.823160] 0100           65536 ram0  (driver?)
[  101.827880] 0101           65536 ram1  (driver?)
[  101.832573] 0102           65536 ram2  (driver?)
[  101.837347] 0103           65536 ram3  (driver?)
[  101.841988] 0104           65536 ram4  (driver?)
[  101.846695] 0105           65536 ram5  (driver?)
[  101.851335] 0106           65536 ram6  (driver?)
[  101.856027] 0107           65536 ram7  (driver?)
[  101.860667] 0108           65536 ram8  (driver?)
[  101.865333] 0109           65536 ram9  (driver?)
[  101.869974] 010a           65536 ram10  (driver?)
[  101.874720] 010b           65536 ram11  (driver?)
[  101.879446] 010c           65536 ram12  (driver?)
[  101.884194] 010d           65536 ram13  (driver?)
[  101.888922] 010e           65536 ram14  (driver?)
[  101.893669] 010f           65536 ram15  (driver?)
[  101.898410] b300        15273984 mmcblk0  driver: mmcblk
[  101.903768]   b301        15269888 mmcblk0p1 9be55837-01
[  101.909104] b308         7634944 mmcblk1  driver: mmcblk
[  101.914503]   b309          131072 mmcblk1p1 5edd22ea-01
[  101.919862]   b30a         7493632 mmcblk1p2 5edd22ea-02
[  101.925247] b320             512 mmcblk1rpmb  (driver?)
[  101.930494] b318            4096 mmcblk1boot1  (driver?)
[  101.935857] b310            4096 mmcblk1boot0  (driver?)
[  101.941192] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
[  101.949470] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
[  112.942790] random: nonblocking pool is initialized

原因:
以前使用的16.04版本的ubuntu没问题,现在更换了18.04.4版本,开始报错。
从Ubuntu17.04开始,nfs默认只支持协议3和协议4,而kernel中默认支持协议2。

  1. 修改 NFS 配置文件:
sudo vim /etc/default/nfs-kernel-server

2.在末尾添加:

RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"

3.重启 NFS 服务:

sudo /etc/init.d/nfs-kernel-server restart

注:如果kernel版本较高支持nfs协议3的话,可以在Uboot传到Kernel的bootargs参数中加入’nfsvers=3’,使kernel使用nfs协议3。

【uboot】飞腾s5000的uboot环境变量

Environment size: 1420/4092 bytes
S5000C#
arch=arm
baudrate=115200
board=s5000c
board_name=s5000c
boot_fdt=booti 0x90000000 - 0x95000000
boot_usb_fdt=booti 0x90000000 - 0x95000000
bootargs=console=ttyAMA1,115200 earlycon=pl011,0x20001000 root=/dev/sda2 rootdelay=10 rw
bootcmd=run distro_bootcmd
bootdelay=3
cpu=armv8
distro_bootcmd=run load_kernel; run load_fdt; run boot_fdt
ethaddr=11:22:33:44:55:66
ext4_read_check=ext4load scsi 0:1 0x92000000 file_bake.txt
ext4_read_test=ext4load scsi 0:1 0x90000000 dtb/ft2004.dtb
ext4_write_test=ext4write scsi 0:1 0x90000000 /file_bake.txt 0x2DA8
fat_read_check=fatload usb 0:1 0x92000000 file_bake.txt
fat_read_test=fatload usb 0:1 0x90000000 md5sum.txt
fat_write_test=fatwrite usb 0:1 0x90000000 /file_bake.txt 0x5D4A
fdtcontroladdr=f9b40a70
fileaddr=95000000
filesize=87b7
gatewayip=192.168.1.1
ipaddr=192.168.1.250
load_fdt=ext4load scsi 0:1 0x95000000 s5000c-64c.dtb
load_kernel=ext4load scsi 0:1 0x90000000 Image
load_usb_fdt=fatload usb 0:1 0x95000000 s5000c-64c.dtb
load_usb_kernel=fatload usb 0:1 0x90000000 Image
loadaddr=0x90000000
netmask=255.255.255.0
serverip=192.168.1.110
soc=s5000c
start_autoscript=if usb start; then run start_usb_autoscript; fi; if scsi info; then run start_ssd_autoscript; fi;
start_ssd_autoscript=run load_kernel; run load_fdt; run boot_fdt
start_usb_autoscript=run load_usb_kernel; run load_usb_fdt; run boot_usb_fdt
stderr=serial
stdin=serial,usbkbd
stdout=serial
vendor=phytium

【DPDK】编译流程

一、编译环境准备

  • General development tools including a C compiler supporting the C11 standard, including standard atomics, for example: GCC (version 8.0+ recommended) or Clang (version 7+ recommended), and pkg-config or pkgconf to be used when building end-user binaries against DPDK.
    • For RHEL systems these can be installed using dnf groupinstall "Development Tools"
    • For Fedora systems these can be installed using dnf group install development-tools
    • For Ubuntu/Debian systems these can be installed using apt install build-essential
    • For Alpine Linux, apk add alpine-sdk bsd-compat-headers
  • Python 3.6 or later.
  • Meson (version 0.57+) and ninja
    • meson & ninja-build packages in most Linux distributions
    • If the packaged version is below the minimum version, the latest versions can be installed from Python’s “pip” repository: pip3 install meson ninja
  • pyelftools (version 0.22+)
    • For Fedora systems it can be installed using dnf install python-pyelftools
    • For RHEL/CentOS systems it can be installed using pip3 install pyelftools
    • For Ubuntu/Debian it can be installed using apt install python3-pyelftools
    • For Alpine Linux, apk add py3-elftools
  • Library for handling NUMA (Non Uniform Memory Access).
    • numactl-devel in RHEL/Fedora;
    • libnuma-dev in Debian/Ubuntu;
    • numactl-dev in Alpine Linux
$ cd /usr/src/
$ wget https://fast.dpdk.org/rel/dpdk-21.11.tar.xz
$ tar xf dpdk-21.11.tar.xz
$ export DPDK_DIR=/usr/src/dpdk-21.11
$ cd $DPDK_DIR
$ export DPDK_BUILD=$DPDK_DIR/build
$ meson setup build-arm64

$ ninja -C build
$ sudo ninja -C build install
$ sudo ldconfig
$ pkg-config --modversion libdpdk