开源硬件初识——Orange Pi AIpro(8T)

news2025/2/27 11:20:05

开源硬件初识——Orange Pi AIpro(8T)

大抵是因为缘,妙不可言地就有了这么一块儿新一代AI开发板,乐于接触新鲜玩意儿的小火苗噌一下就燃了起来。

还没等拿到硬件,就已经开始在Orange Pi AIpro 官网上查阅起资料,急切的等待着。

官方已经把配套的硬件准备妥当,所以需要提前准备的东西不多。根据之前玩其他开源硬件的经验,这系统被弄坏是经常发生的事情,所以就准备了

  1. TF读卡器;
  2. 一块2014年的M.2 SATA SSD;

这块SSD 是2242 64G的规格,从旧笔记本上卸下来之后组成移动硬盘也一直在使用,正好可以取代TF卡,作为Orange Pi AIpro的系统盘。


开发板全貌

整体看上去中规中矩,蓝色的板子看上去自带科技感,元器件layout也比较规矩。基本需要用长线连接的设备接口都在一侧,这一点非常赞,不然开发者的桌面估计杂乱等级又要进阶。

开发板已经盖上了大片散热器,想一想配的是65W PD适配器,满功耗跑的状态肯定非常刺激,上电时候100%转速的风扇还属实吓了一跳。

orange_pi_forwad

板载8G内存,32G TF卡,预留eMMC接口,预留M.2 SSD硬盘接口。

但是这里预留的是2280规格的SSD,我之前是2242的规格,所以就淘了一块儿延长板,用于固定2242的SSD在2280的接口,效果如下:

orange_pi_back

接口非常丰富,有双HDMI,极为先进的3.5mm耳机孔,多种USB,千兆网口,2.4/5G天线,40Pin扩展接口等等;

除此之外,还预留2个MIPI CSI 2 Lane接口,1个MIPI DSI 2 Lane接口;理论上说这种芯片上的MIPI应该最高支持每Lane 1.5 Gbps,2 Lane 的Data Rate为3 Gbps;以1920x1080@60Hz来算,总带宽为1920x1080x60x3x8 ≈ 2.98 Gbps;如果内部不含有DSC压缩,MIPI DSI输出的分辨率也就局限在FHD 60Hz了;

开始整活

官方文档中确认HDMI0连接显示器,先连接有线键鼠,开机进入用户登录画面,键入密码,随即显示Orangi Pi AIpro的桌面,这个桌面就很香橙感。

后续通过GUI连接WIFI,连接蓝牙鼠标,笔者的蓝牙键盘没有连接上去。显示器和鼠标还要进行物理切换,所以还是进行SSH或VNC开发了。

果不其然,在重新设置开启VNC的时候,还是把系统搞坏了,桌面无法显示,只能重新刷入官方镜像。

后面的内容包含基础设置,镜像烧录TF、SSD,性能测试等;


基础设置

SSH连接

我比较常用的连接方式有SSH和VNC viewer两种,SSH默认系统已经开启,知道Orange Pi AIpro的IP地址,我这里使用的是FinalShell,输入IP,端口号,用户名,密码,即可完成SSH登录,效果如下:

log_in

VNC连接

还有就是通过VNC连接可以看到桌面,处理视频,图像处理的案例非常有用。

官方镜像通过VNC viewer,是专用默认端口IP:1会进入root账户,尝试直接在用户HwHiAiUserhomevncserver,在端口IP:2连接后会显示灰色,需要在.vnc配置中进行修改配置。

后面就该为x11vnc + LigthDM的方式了;

  1. 安装x11vnc和LightDM,并设置LightDM为默认显示管理器:

    sudo apt update
    sudo apt install x11vnc lightdm
    
    sudo dpkg-reconfigure lightdm
    
  2. 设置x11vnc密码,用于VNC连接的认证:

    x11vnc -storepasswd
    

    按照提示输入和确认密码,会在当前用户的主目录下 创建一个.vnc/passwd文件。

  3. 创建x11vnc服务文件:

    sudo nano /etc/systemd/system/x11vnc.service
    
  4. 添加一下内容到服务文件:

    [Unit]
    Description=Start x11vnc at startup
    After=multi-user.target
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/x11vnc -auth /var/run/lightdm/root/:0 -forever -loop -noxdamage -repeat -rfbauth /home/HwHiAiUser/.vnc/passwd -rfbport 5900 -shared
    
    [Install]
    WantedBy=multi-user.target
    

    /home/HwHiAiUser/.vnc/passwd 为实际存储 x11vnc 密码文件的位置。

  5. 重新加载systemd守护进程,启用x11vnc服务,启动x11vnc服务:

    sudo systemctl daemon-reload
    sudo systemctl enable x11vnc.service
    sudo systemctl start x11vnc.service
    
  6. 验证x11vnc服务:

    sudo systemctl status x11vnc.service
    

    这时候可以看到服务状态为active(running);

  7. 在VNC客户端中,连接IP:5900,IP为Orange Pi AIpro的IP地址,5900是x11vnc默认监听的VNC端口。

  8. 确保x11vnc在重启后仍然自动启动:

    sudo systemctl enable x11vnc.service
    

通过上述方式,已经可以用HwHiAiUser用户,密码在VNC viewer上登录了。

设置自动连接 wifi

通过使用 NetworkManager 来管理网络连接:

  1. 编辑wifi连接配置:

    sudo vim /etc/NetworkManager/system-connections/surprise
    

    这里路径上的surpise是我的wifi名字;

  2. 设置自动连接,在配置文件中,确保以下属性为true:

    [connection]
    autoconnect=true
    

    如果[conneciton]下面已经有内容了可以添加在它们后面;

  3. 保存并退出,然后重启 NetworkManager:

    sudo systemctl restart NetworkManager
    

注意,在进行wifi自动配置之后,每次开机,就可以先连接到wifi,这样才能分配到局域网下的IP地址,从而才能使用SSH或VNC进行连接。

至此,基本设置检查都没有问题了,就想把这一份系统做个镜像,留着备份。


镜像烧录

TF卡的烧录

流程按照官方手册进行,官方镜像还提供了MD5值,用于比对在文件传输过程中是否损坏。在不同系统下我们可以通过系统命令来进行MD5的运算。

Linux 下计算 MD5:

md5sum filename.img

Windows 下使用PowerShell 计算 MD5:

Get-FileHash filename.img -Algorithm MD5

确认计算结果没问题,就开始烧录啦。Windows往TF卡里写,使用balenaEtcher工具,老是在最后一步verify之后,提示失败。

write_img

确认过md5没问题之后,就直接插到Orange Pi AIpro上进行尝试,果然系统是能进去的,也不知道什么原因。

镜像备份

这里是将基础配置之后的系统使用 Win32 Disk Imager 进行备份,步骤如下:

  1. 下载并安装 Win32 Disk Imager。
  2. 插入 TF 卡并打开 Win32 Disk Imager。
  3. 选择备份路径和文件名,选择 TF 卡的盘符。
  4. 点击 “Read” 按钮开始备份。

因为TF卡的容量是32G,所以备份的系统有29.4G之多,在Windows上压缩为.xz的格式保留。

后面也从备份的镜像中恢复过系统,再使用balenaEthcer工具的时候,就能出现镜像写入成功的提示了。

SSD镜像烧录

参考官方手册中,2.7. 烧写Linux镜像到SATA SSD中的方法,固定SSD到Orange Pi AIpro上之后,使用TF卡启动开发板进入Linux系统。

需要将刚才备份的镜像文件img.xz,通过filezilla软件,上传到TF卡系统的对应目录。这时候32G的TF,去掉20G的系统,5个G的img.xz,就只剩下不到7G的容量了。

识别SSD

首先要更新SATA对应的dt.img文件:

  1. 首先进入/opt/opi_test/sata 文件夹:

    cd /opt/opi_test/sata
    
  2. 然后运行下update.sh 脚本来更新SATA 对应的dt.img:

    sudo ./update.sh
    
  3. 运行完update.sh 脚本后会自动重启Linux 系统让配置生效;

  4. 重新进入TF 卡的Linux 系统后就能识别到SATA SSD 了:

    sudo fdisk -l | grep "/dev/sd"
    Disk /dev/sda: 238.47 GiB, 256060514304 bytes, 500118192 sectors
    ......
    

识别到SSD之后,后面的就按照使用balenaEtcher烧录镜像的流程进行就可以了。

镜像写入

本以为万事大吉,可是烧录过程中,工具竟然自动退出。

查看资源,原来内存在写入的过程中会爆掉。那就开swap,直接把TF卡开了4G给到swap,参考官方手册流程如下:

  1. 创建一个swap文件,大小为4G:

    sudo fallocate -l 4G /swapfile
    
  2. 修改文件权限,确保只有root可读写,然后把这个文件设置成swap空间,然后启用swap:

    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    
  3. 完成上述步骤,通过气功命令查看swap内存是否已经添加成功:

    free -h
    	total used free shared buff/cache available
    Mem: 7.4Gi 1.1Gi 5.5Gi 27Mi 835Mi 6.1Gi
    Swap: 4Gi 0B 4Gi
    

很显然,加入swap之后,也没能逃脱内存爆满的情况。

Memory_swap

FinalShell截图可以看出内存会一直上升,直到系统卡死,过一段时间之后再恢复,而且balenaEtcher软件提示烧录失败。这么一来感觉是烧写软件的问题,果断换成dd工具进行烧录。

这里遇到的问题是,dd把压缩文件直接写进去了,显然是不对的。

那就需要解压之后再写入到SSD,思路是可以行的,但是显然不能先解压在写,因为TF卡没有容量用于解压了。

所以使用pipe.xz文件解压到输出直接传输给dd,这样就不需要要给额外的存储空间保存解压后的镜像文件了。

通过使用 xz-c 选项将解压后的数据直接输出到 stdout,然后通过管道传递给 dd

xz -dc ~/Downloads/image.img.xz | sudo dd of=/dev/sda bs=4M status=progress

解释:

  • xz -dc ~/Downloads/image.img.xz:将 .xz 文件解压,并将输出传递到标准输出 (stdout)。
  • |:管道符号,用于将前一个命令的输出传递给后一个命令。
  • sudo dd of=/dev/sda bs=4M status=progress:将通过管道接收到的数据写入到目标磁盘 /dev/sda

这样,镜像文件就烧录到SSD里面了,烧录完成之后,还需要将SATA版本的dt.img烧录到SATA SSD中,因为提供的镜像默认打开的都是PCIe的配置,具体命令如下:

sudo dd if=/opt/opi_test/dt_img/dt_drm_sata.img of=/dev/sda count=4096 seek=114688 bs=512

注意,上面的命令中,“of=”参数后面的/dev/sda为SSD对应的设备节点名,要根据实际情况修改。

后面关闭系统,调整拨码到SSD启动的位置,重新插入Type-C电源,就可以启动SSD中的Linux系统了。

因为烧录的是备份镜像,wifi什么的都已经配置好了,所以可以直接从VNC viewer登录。

挂载分区

SSD的容量为64G,系统盘用掉了32G,将剩余的32G挂载到了HwHiAiUser用户的主目录下:

  1. 创建挂载点:

    mkdir ~/myssd
    
  2. 更新/etc/fstab,将挂载点更改为用户主目录下的路径:

    sudo vim /etc/fstab
    

    添加如下内容:

    /dev/sda4  /home/HwHiAiUser/myssd  ext4  defaults  0  2
    
  3. 重新挂载分区,检查挂载:

    sudo mount -a
    df -h
    

这样就能在文件管理器中看到并访问新挂载的分区了。对了,当前分区的权限还需要改为当前用户的,不然可能还是在root的权限里,从而无法对目录进行写入:

递归更改所有者:

sudo chown -R HwHiAiUser:HwHiAiUser ~/myssd

递归添加写权限给用户HwHiAiUser

sudo setfacl -R -m u:HwHiAiUser:rwx ~/myssd
sudo setfacl -R -d -m u:HwHiAiUser:rwx ~/myssd

几个测试

接下来,简单跑几个测试。

播放视频

从demo中找到一个MP4的视频文件,使用ffplay打开看一看:

ffplay input.mp4

嗯,这个打开速度还可以,能正常观看。使用ffprobe看了一下视频的信息:

ffprobe -v error -show_format -show_streams input.mp4
......
[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=Main
codec_type=video
codec_tag_string=avc1
codec_tag=0x31637661
width=1920
height=1080
coded_width=1920
coded_height=1080
closed_captions=0
has_b_frames=1
sample_aspect_ratio=1:1
display_aspect_ratio=16:9
pix_fmt=yuv420p
level=40
color_range=tv
color_space=bt709
color_transfer=bt709
color_primaries=bt709 ......

正好有一个4096x2160@25FPS的视频,也传进来看一下效果,哈哈哈有点PPT的感觉。

CPU性能测试

官方镜像值开启了3个control CPU,1个AI CPU。如果需要测试4核,需要开启4个 control CPU,操作如下:

sudo npu-smi set -t cpu-num-cfg -i 0 -c 0 -v 0:4:0

	Status : OK
	Message : The cpu-num-cfg of the chip is set successfully. Reset system for the 	configuration to take effect.

可以通过指令查询当先CPU的配置:

npu-smi info -t cpu-num-cfg -i 0 -c 0

Current AI CPU number : 0
Current control CPU number : 4
Current data CPU number : 0

sysbench 是一个多功能的性能测试工具,可以用于测试 CPU、内存、磁盘 I/O 等,这里用来做CPU的性能测试,分别测试单核,2,3,4核,启用默认prime number10000,运行脚本如下:

#!/bin/bash

# 等待时间设置为20秒
WAIT_TIME=20

# 函数:执行sysbench测试并保存结果
run_sysbench() {
  local threads=$1
  echo "Running sysbench with ${threads} thread(s)..."
  sysbench --test=cpu --num-threads=${threads} --cpu-max-prime=10000 run > "sysbench_${threads}_threads.log"
  echo "Sleeping for ${WAIT_TIME} seconds to allow CPU to cool down..."
  sleep ${WAIT_TIME}
}

# 执行单线程、2线程、3线程和4线程的测试
run_sysbench 1
run_sysbench 2
run_sysbench 3
run_sysbench 4

# 提取并格式化结果
extract_results() {
  local threads=$1
  local logfile="sysbench_${threads}_threads.log"
  local events=$(grep "total number of events" ${logfile} | awk '{print $5}')
  local speed=$(grep "events per second" ${logfile} | awk '{print $4}')
  echo "| ${threads}        | ${events}  | ${speed}  |"
}

# 生成结果表格
echo "Generating results table..."
echo "## Sysbench CPU Benchmark Results" > sysbench_results.md
echo "| Threads | Total Events | Events Per Second |" >> sysbench_results.md
echo "|---------|--------------|-------------------|" >> sysbench_results.md
extract_results 1 >> sysbench_results.md
extract_results 2 >> sysbench_results.md
extract_results 3 >> sysbench_results.md
extract_results 4 >> sysbench_results.md

echo "Results recorded in sysbench_results.md"

脚本运行结果如下:

ThreadsTotal EventsEvents Per Second
1206092059.88
2412164119.46
3616016156.88
4809658092.29

柱状图描述如下,整体还是给Threads非常成线性的:

cpu_speed

视频编解码测试

FFmpeg本身并没有专门的基准测试工具,但可以通过实际编码和解码操作来评估系统的性能。需要先下载一个标准的测试视频进行FFmpeg的编解码性能测试。

wget https://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_640x360.m4v -O input.mp4

可以通过测试指令:

ffmpeg -y -i input.mp4 -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -c:v libx264 -preset veryslow -b:v 500k -c:a aac -b:a 128k output.mp4

这条命令从输入文件 input.mp4 中读取视频和音频流,调整视频分辨率以确保宽高为偶数,使用 libx264 编码视频(以 500 kbps 的比特率和 veryslow 的预设),使用 aac 编码音频(以 128 kbps的比特率),并将结果保存到输出文件 output.mp4

因为视频源文件不同,所以这里的参数没有太强的参考意义,整体来看跑起来的流程还是可以接受的。

压缩与解压缩性能测试

7zr 是 7-Zip 的轻量级版本,我们可以用与对CPU进行压缩与解压缩的基准测试。

指令说明:

  • 7zr b:运行 7-Zip 的多线程基准测试,使用系统上所有可用的 CPU 核心。
  • 7zr b -mmt1:运行 7-Zip 的单线程基准测试,仅使用一个 CPU 核心。
Test TypeCompress Speed (MIPS)Decompress Speed (MIPS)
Multi-threaded70697393
Single-threaded16431953

写在后面

真的机缘巧合,已经有几年没有玩过开源硬件了,上一个还是树莓派 3B。但有机会接触到Orange Pi AIpro,感觉还是很兴奋,对于软硬件开发的热情丝毫不减当年。

这种开源硬件,虽然在性能上比不上PC机,但是也有非常大的优势,适用于各种非办公场景的开发。麻雀虽小,五脏俱全,更何况现在CPU性能提升那么多,还有AI CPU的加持,更是如虎添翼。这样无论是商业应用,还是个人开发者使用,可玩性可太强了。

工作岗位不太匹配AI,所以不能在短时间内评测出来Orange Pi AIpro的AI性能。但也跑了官方手册里的几个例程,可以看到它在目标检测,图像处理方向上的推理能力。在这个LLM横流的年代,能有MindScopeAsecnd的软硬件加持,各行各业的开发者都在积极开发属于自己的AI工具,这何尝不是一种百花齐放春满园的景象。后续的开发也应该会围绕AI应用进行,希望激情不会褪去,开发状态常在。

感谢CSDNDevPress社区,参加此次活动非常有意思。

Date

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

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

相关文章

PAT-1004 成绩排名(java实现)

这一关感觉还没第三关难,思路很清晰 题目 1004 成绩排名 读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 行…

KT6368A双模蓝牙芯片上电到正常发送AT指令或指令复位需要多久

一、简介 KT6368A芯片上电到正常发送AT指令,或者开启蓝牙广播被搜索到,或者指令复位需要多久等等系列问题总结 详细描述 其实这些问题归结到一起,就还是一个问题,芯片上电需要多久的时间 在另外一份文档里面,是有描…

副业赚钱的路子有哪些?推荐15个靠谱副业和赚钱软件给你做

在这个工资永远追不上物价的时代,你是否也感到焦虑?是否想过在工作之余,开辟一条赚钱的副业之路?别急,今天就为你揭开副业赚钱的神秘面纱,带你一探究竟! 一、宅富社任务:每日小任务&…

电缆线生产中 JG01Z-DG 系列单轴测径仪的重要作用

电缆线在工业配电领域有着广泛的应用,尤其适合要求较为严格的柔性安装场所,如电控柜,配电箱及各种低压电气设备,可用于电力,电气控制信号及开关信号的传输。 JG01Z-DG系列单轴测径仪是为线缆外径检测而制作的检测设备。…

2.4 Docker部署JDK

2.4 Docker部署JDK jdk17部署(自定义镜像) 1.在官网上下载jdk-17_linux-x64_bin.tar.gz,并安装到/usr/local目录下 cd /usr/local2.创建Dockerfile vim Dockerfile# 基于官方的Ubuntu 20.04镜像作为基础镜像 FROM ubuntu:20.04# 设置环境…

整数乘除法练习题

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<time.h> #include<Windows.h>void show1(); .//开始界面 int getchoice(); //选择界面 int dowork(int n); //随机做乘除法 int num(); //用户确定做题的数量 v…

【深度密码】神经网络算法在机器学习中的前沿探索

目录 &#x1f69d;前言 &#x1f68d;什么是机器学习 1. 基本概念 2. 类型 3. 关键算法 4. 应用领域 5. 工作流程 &#x1f68b;什么是神经网络 基本结构 &#x1f682;神经网络的工作原理 前向传播&#xff08;Forward Propagation&#xff09;&#xff1a; 损失函…

数据分析案例-在线食品订单数据可视化分析与建模分类

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

一键安装 HaloDB 之 Ansible for Halo

↑ 关注“少安事务所”公众号&#xff0c;欢迎⭐收藏&#xff0c;不错过精彩内容~ 前倾回顾 前面介绍了“光环”数据库的基本情况和安装办法。 哈喽&#xff0c;国产数据库&#xff01;Halo DB! 三步走&#xff0c;Halo DB 安装指引 以及 HaloDB 的 Oracle 和 MySQL 兼容模式: …

构建企业级AI私有知识库

一、引言 在当今竞争激烈的市场环境中&#xff0c;企业为了保持竞争优势&#xff0c;需要高效地管理和利用内部知识资源。构建一个企业级AI私有知识库&#xff0c;不仅可以集中存储和管理企业知识&#xff0c;还能通过人工智能技术实现知识的智能化处理和利用。本文将详细介绍…

pytorch学习day3

一、模型创建&#xff08;Module&#xff09; 网络创建流程 ​ 上面的图表展示了使用PyTorch创建神经网络模型的主要步骤。每个步骤按顺序连接&#xff0c;展示了从导入必要的库到最终测试模型的整个流程&#xff1a; 导入必要的库&#xff1a;首先导入PyTorch及其相关模块。定…

六一见!|Post Microsoft Build and AI Day 上海开发者日

编辑/排版&#xff1a;Alan Wang 大小朋友明天见&#xff01; 6月1日&#xff0c;Microsoft Azure & Microsoft Reactor 面向大小朋友特别推出六一特辑&#xff0c;「Post Microsoft Build and AI Day 上海开发者日」 探讨 Microsoft Build 2024 带来的最新发布&#xff0…

民国漫画杂志《时代漫画》第36期.PDF

时代漫画36.PDF: https://url03.ctfile.com/f/1779803-1248636233-8a4a9d?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

整合框架(spring...) 统一异常处理

1、 我们想让异常结果也显示为统一的返回结果对象&#xff0c;并且统一处理系统的异常信息&#xff0c;那么需要统一异常处理。 附加&#xff1a;创建封装错误状态码和错误消息VO 代码如下&#xff1a; Result import io.swagger.v3.oas.annotations.media.Schema; impo…

探索 Android Studio 中的 Gemini:加速 Android 开发的新助力

探索 Android Studio 中的 Gemini&#xff1a;加速 Android 开发的新助力 在 Gemini 时代的下一篇章中&#xff0c;Gemini融入了更多产品中&#xff0c;Android Studio 正在使用 Gemini 1.0 Pro 模型&#xff0c;使 Android 开发变得更快、更简单。 Studio Bot 现已更名为 And…

【Text2SQL 论文】DIN-SQL:分解任务 + 自我纠正 + in-context 让 LLM 完成 Text2SQL

论文&#xff1a;DIN-SQL: Decomposed In-Context Learning of Text-to-SQL with Self-Correction ⭐⭐⭐⭐ NeurIPS 2023, arXiv:2304.11015 Code: Few-shot-NL2SQL-with-prompting | GitHub 文章目录 一、论文速读1.1 Schema Linking Module1.2 Classification & Decompo…

浅谈线性化

浅谈线性化 原文&#xff1a;浅谈线性化 - 知乎 (zhihu.com) All comments and opinions expressed on Zhihu are mine alone and do not necessarily reflect those of my employers, past or present. 本文内容所有内容仅代表本人观点&#xff0c;和Mathworks无关 (这里所说…

AIGC智能办公实战 课程,祝你事业新高度

在数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面&#xff0c;从智能家居到自动驾驶&#xff0c;从医疗诊断到金融分析&#xff0c;AI助手正在改变我们的工作方式和生活质量。那么&#xff0c;你是否想过自己也能从零开始&#xff0c;…

服务器怎么被远程桌面连接不上,远程桌面连接不上服务器的问题有效解决方案

远程桌面连接不上服务器是一个极其严重的问题&#xff0c;它可能直接影响到我们的工作效率、数据安全&#xff0c;甚至是整个业务运营的顺畅。因此&#xff0c;这个问题必须得到迅速且有效的解决。 当我们尝试远程桌面连接服务器时&#xff0c;可能会遇到连接不上的情况。这其中…

thinkphp6 自定义的查询构造器类

前景需求&#xff1a;在查询的 时候我们经常会有一些通用的&#xff0c;查询条件&#xff0c;但是又不想每次都填写一遍条件&#xff0c;这个时候就需要重写查询类&#xff08;Query&#xff09; 我目前使用的thinkphp版本是6.1 首先自定义CustomQuery类继承于Query <?p…