news 2026/8/12 14:08:53

树莓派4B Ubuntu ART串口配置实战:从硬件原理到Python通信

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树莓派4B Ubuntu ART串口配置实战:从硬件原理到Python通信

1. 项目概述:为什么要在树莓派4B上折腾Ubuntu 22.04的串口?

如果你手头有一块树莓派4B,并且已经厌倦了官方的Raspberry Pi OS,想试试更“正经”的服务器或桌面环境,比如Ubuntu 22.04 LTS,那么你很可能已经踏上了这条“折腾”之路。树莓派4B的40针GPIO排针里,隐藏着强大的硬件串口(UART),这玩意儿在嵌入式开发、机器人控制、工业数据采集、甚至是与老式设备通信的场景里,是无可替代的基石。然而,当你兴冲冲地在树莓派4B上装好Ubuntu 22.04后,打开终端输入ls /dev/tty*,准备大干一场时,可能会发现事情没那么简单——串口设备可能找不到,或者找到了却无法读写,权限问题、服务占用、引脚映射错误,一堆坑在前面等着。

这正是我们今天要啃下的硬骨头:在树莓派4B搭载的Ubuntu 22.04系统上,完整、稳定地配置和使用硬件串口通信。这不仅仅是运行一两条命令,而是要从系统层面理解树莓派的UART布局、Ubuntu的服务管理机制,再到具体的权限配置和测试验证。我花了不止一个周末的时间,踩遍了能踩的坑,才把这套流程跑通。接下来,我会把这些经验,包括背后的原理、每一步的操作意图、以及那些官方文档里不会写的“血泪教训”,毫无保留地分享出来。无论你是想用串口调试Arduino、连接传感器模组,还是构建自己的分布式硬件网络,这篇内容都能给你一份可以直接“抄作业”的指南。

2. 核心思路与硬件原理拆解:树莓派4B的UART到底有几副面孔?

在动手之前,我们必须先搞清楚树莓派4B上UART的“家底”。盲目操作只会导致时间浪费在解决错误的问题上。

2.1 树莓派4B的UART资源全景图

树莓派4B的SoC(博通BCM2711)内部实际上包含了多个UART控制器,但对我们开发者开放的主要有两个:

  1. UART0 (PL011):这是一个功能完整的、高性能的UART控制器,支持FIFO、硬件流控(RTS/CTS)等高级功能。在早期的树莓派型号上,它默认被映射到GPIO的14(TX)、15(RX)引脚,并用作主串口(Primary UART),也就是系统控制台(Serial Console)。
  2. UART2 (Mini UART):这是一个简化版的UART,其波特率依赖于核心时钟(VPU),因此当CPU频率变化时(如省电模式),其波特率可能不稳定。在树莓派4B上,它通常被用作辅助串口

关键点来了:在树莓派4B的默认40Pin引脚定义中,GPIO 14和15(物理引脚8和10)默认关联的是哪个UART?答案取决于一个叫“设备树覆盖层(Device Tree Overlay)”的配置。在官方的Raspberry Pi OS中,默认配置是将功能更强大的PL011 (UART0) 分配给蓝牙模块使用,而将Mini UART (UART2) 分配给了GPIO 14/15。这就是为什么很多教程在Raspberry Pi OS上需要先禁用蓝牙才能使用稳定串口的原因。

然而,当我们安装Ubuntu 22.04 for Raspberry Pi时,情况可能有所不同。Ubuntu的镜像为了追求更好的兼容性和作为通用Linux发行版的简洁性,其设备树配置可能与Raspberry Pi OS有差异。我们的首要任务就是确认当前系统下,GPIO 14/15到底绑定给了谁,以及我们想用的那个UART是否可用。

2.2 Ubuntu 22.04 on Pi 4 的串口默认状态分析

Ubuntu Server/Desktop镜像为了简化初次使用体验,默认不会启用串口控制台(Serial Console)。这意味着,用于控制台的UART可能被禁用或未被初始化。同时,蓝牙服务(bluetooth.servicehciuart.service)可能会尝试占用PL011 UART。

因此,我们的配置思路需要非常清晰:

  1. 诊断:首先探查系统现有的串口设备,确定硬件连接对应的设备文件(通常是/dev/ttyAMA0/dev/ttyS0)。
  2. 决策:根据项目需求,决定使用哪个UART。对于需要稳定波特率、硬件流控的严肃应用,我们应优先争取使用PL011。
  3. 配置:通过修改固件配置、设备树参数和系统服务,将目标UART从系统占用中“释放”出来,并映射到正确的GPIO引脚。
  4. 验证:配置完成后,进行读写测试,确保通信稳定可靠。

注意:不同版本的Ubuntu镜像(如官方的Ubuntu Server for Raspberry Pi, 或由第三方维护的镜像)初始状态可能不同。我强烈建议从Ubuntu官网下载专为树莓派制作的镜像开始,以减少底层差异带来的不确定性。

3. 实战第一步:系统安装、基础探查与引脚连接

3.1 系统安装与初始准备

首先,从Ubuntu官方网站下载“Ubuntu Server for Raspberry Pi”的22.04 LTS镜像。使用Raspberry Pi Imager或其他烧录工具写入SD卡。在烧录时,Imager工具通常提供了“高级选项”,允许你预先配置主机名、用户密码并启用SSH。务必启用SSH,这是我们后续操作的主要通道,因为你很可能在一段时间内都无法使用串口控制台登录。

将烧录好的SD卡插入树莓派4B,连接网线(或配置好Wi-Fi),上电启动。通过路由器管理界面或arp -a命令找到树莓派的IP地址,使用SSH登录(例如:ssh ubuntu@192.168.1.xxx,默认用户是ubuntu)。

登录后第一件事,更新系统:

sudo apt update && sudo apt upgrade -y

更新完成后,建议重启一次:sudo reboot。这能确保所有内核更新生效。

3.2 硬件连接与设备探查

在软件配置前,先完成物理连接。你需要一个USB转TTL串口模块(如CH340、CP2102、FT232等)。连接方式至关重要,接错可能损坏设备:

  • USB转TTL模块的GND->树莓派GPIO的GND(物理引脚6, 或任意其他GND引脚)
  • USB转TTL模块的RX->树莓派GPIO的TX(物理引脚8, GPIO 14)
  • USB转TTL模块的TX->树莓派GPIO的RX(物理引脚10, GPIO 15)

重要警告:绝对不要连接USB转TTL模块的VCC(通常是5V或3.3V)到树莓派的任何引脚!树莓派的GPIO是3.3V电平,且不能耐受5V输入。仅连接GND、RX、TX三根线即可。

连接好后,将USB转TTL模块插入你的电脑(用于调试的主机)。在树莓派SSH终端里,开始探查:

# 查看所有tty设备 ls -l /dev/tty* # 重点关注以下设备 ls -l /dev/ttyAMA* /dev/ttyS* /dev/serial*

你可能会看到类似/dev/ttyAMA0/dev/ttyS0的设备。记录下它们。

接下来,查看这些设备当前被谁占用,以及它们的硬件关联信息:

# 查看串口设备硬件信息 sudo dmesg | grep -i uart sudo dmesg | grep -i tty # 一个更强大的工具:查看设备树中UART的映射状态 sudo cat /proc/device-tree/aliases/serial0 2>/dev/null sudo cat /proc/device-tree/aliases/serial1 2>/dev/null

serial0serial1分别指向系统认定的主、辅串口设备文件。

3.3 关键诊断:确认当前UART分配方案

执行以下命令,查看最关键的固件配置:

# 查看当前内核命令行参数,其中包含了UART的配置信息 cat /proc/cmdline

在输出中,寻找如console=ttyAMA0,115200console=serial0,115200console=tty1这样的参数。如果console参数指向了ttyAMA0serial0,说明该UART正在被用作内核控制台,这会影响我们将其用于普通数据通信。

同时,检查蓝牙服务是否在运行并占用了UART:

systemctl status hciuart

如果这个服务是active (running)状态,那么PL011 UART很可能正在被蓝牙使用。

4. 核心配置:释放硬件串口并映射到GPIO

根据诊断结果,我们通常需要执行以下配置。我们的目标是将PL011 UART (ttyAMA0)从蓝牙和控制台占用中释放出来,并将其固定映射到GPIO 14/15引脚。

4.1 修改固件配置文件(Boot Config)

这是最关键的一步,告诉树莓派固件如何初始化硬件。

# 使用nano或vim编辑boot分区下的配置文件 sudo nano /boot/firmware/config.txt

(注意:在Ubuntu for Pi上,配置文件路径通常是/boot/firmware/config.txt, 而非Raspberry Pi OS的/boot/config.txt

在文件末尾添加或修改以下几行:

# 启用UART(总开关) enable_uart=1 # 将PL011 UART (ttyAMA0) 指定为主要的UART设备,并映射到GPIO 14/15 dtoverlay=uart5 # 注意:树莓派4B上,`uart5`这个覆盖层是将PL011映射到GPIO 14/15的常用方法。 # 另一种写法是 `dtoverlay=uart5, pinctrl-names=default; pinctrl-0=<&uart5_pins>` # 确保Mini UART (ttyS0) 不被用作控制台,并修复其时钟源以稳定波特率(如果需要使用它) # dtoverlay=miniuart-bt # 上面这行会交换PL011和Mini UART的映射,并将PL011给蓝牙,Mini UART给GPIO 14/15。我们不采用此方案。 # 禁用蓝牙,以彻底释放PL011 UART (ttyAMA0)。如果不需要蓝牙,这是最干净的做法。 dtoverlay=disable-bt

参数解读

  • enable_uart=1: 这是基础,启用UART硬件。
  • dtoverlay=uart5: 这个设备树覆盖层(Device Tree Overlay)是专为树莓派4B设计的,它正确地将PL011控制器配置到正确的引脚组(GPIO 14/15)。这是区别于旧型号Pi的关键。
  • dtoverlay=disable-bt: 禁用板载蓝牙。这会同时停止hciuart服务,并将PL011 UART完全让给我们使用。如果你的项目完全不需要蓝牙,强烈建议禁用。

4.2 禁用相关系统服务

即使我们在固件层禁用了蓝牙,Ubuntu系统里对应的服务可能还会尝试去访问它,导致冲突。我们需要一并禁用。

# 停止并禁用蓝牙相关服务 sudo systemctl stop bluetooth.service sudo systemctl disable bluetooth.service sudo systemctl stop hciuart.service sudo systemctl disable hciuart.service # 禁用通过串口启动的getty服务(它会在串口上提供登录终端,干扰我们的数据通信) sudo systemctl stop serial-getty@ttyAMA0.service 2>/dev/null sudo systemctl disable serial-getty@ttyAMA0.service 2>/dev/null # 也检查一下ttyS0 sudo systemctl stop serial-getty@ttyS0.service 2>/dev/null sudo systemctl disable serial-getty@ttyS0.service 2>/dev/null

4.3 移除内核控制台输出(可选但推荐)

为了让串口纯粹用于应用数据,最好移除内核消息和控制台对该串口的占用。编辑/boot/firmware/cmdline.txt

sudo nano /boot/firmware/cmdline.txt

找到包含console=ttyAMA0,115200console=serial0,115200的部分,将其删除。注意:整个cmdline.txt内容是一行,编辑时要小心,确保单词间空格正确。删除后,这一行可能只剩下类似net.ifnames=0 dwc_otg.lpm_enable=0 console=tty1 root=...的内容。console=tty1表示控制台输出到HDMI/屏幕,这是我们希望的状态。

实操心得:修改cmdline.txt风险较高,一旦格式错误可能导致系统无法启动。一个安全的做法是,在修改前先备份原文件 (sudo cp /boot/firmware/cmdline.txt /boot/firmware/cmdline.txt.backup),并且确保你始终可以通过SSH或屏幕访问系统。如果改坏了,可以通过其他系统挂载SD卡的boot分区进行恢复。

4.4 应用配置并重启

所有配置修改完成后,保存文件,执行重启:

sudo reboot

重启后,重新SSH登录系统。

5. 配置验证与基础通信测试

重启后,让我们验证配置是否成功。

5.1 验证设备与权限

再次列出设备:

ls -l /dev/ttyAMA*

你应该能看到/dev/ttyAMA0,并且它的权限可能是crw-rw---- 1 root dialout ...。这意味着root用户和dialout用户组的成员有读写权限。

将当前用户(ubuntu)添加到dialout组,避免每次都用sudo

sudo usermod -a -G dialout $USER

重要:这个组变更需要重新登录(退出SSH再重新连接)才能生效。

5.2 使用minicom进行双向测试

minicom是一个经典的串口终端工具。安装并配置它:

sudo apt install minicom -y

在测试前,请确保你的USB转TTL模块已连接到电脑,并在电脑上确定了其端口(如Windows的COM3, Linux的/dev/ttyUSB0)。在电脑端使用串口助手工具(如Putty、SecureCRT, 或Arduino IDE的串口监视器)打开该端口,波特率设置为115200,数据位8,停止位1,无校验位(8N1)。

首先,在树莓派端,我们用minicom监听/dev/ttyAMA0

minicom -D /dev/ttyAMA0 -b 115200

如果配置正确,你应该会进入一个空白的minicom界面。此时,在电脑端的串口助手中发送一些字符(如“Hello Pi”)。这些字符应该会显示在树莓派的minicom窗口中。

接着,测试树莓派发送。在minicom界面中直接打字,然后回车。这些字符应该会显示在电脑端的串口助手的接收区。

退出minicom的快捷键是Ctrl-A, 然后按X,选择“Yes”退出。

5.3 使用Python进行自动化脚本测试

对于嵌入式应用,我们更常用编程方式操作串口。Python的pyserial库是绝佳选择。

# 安装pyserial sudo apt install python3-pip -y pip3 install pyserial

创建一个简单的测试脚本uart_test.py

#!/usr/bin/env python3 import serial import time # 配置串口参数 ser = serial.Serial( port='/dev/ttyAMA0', # 你的串口设备 baudrate=115200, # 波特率 parity=serial.PARITY_NONE, # 校验位 stopbits=serial.STOPBITS_ONE, # 停止位 bytesize=serial.EIGHTBITS, # 数据位 timeout=1 # 读超时(秒) ) try: if ser.is_open: print(f"串口 {ser.name} 已打开。") # 发送数据 test_message = "Hello from Raspberry Pi!\n" ser.write(test_message.encode('utf-8')) print(f"已发送: {test_message.strip()}") # 等待并尝试接收回显(如果你将TX和RX短接,或者对端设备会回传数据) time.sleep(0.1) while ser.in_waiting: received_data = ser.read(ser.in_waiting).decode('utf-8', errors='ignore') print(f"接收到: {received_data}") except Exception as e: print(f"发生错误: {e}") finally: if ser and ser.is_open: ser.close() print("串口已关闭。")

运行脚本:python3 uart_test.py。观察输出,并在电脑端串口助手查看是否收到“Hello from Raspberry Pi!”消息。你也可以在电脑端发送消息,然后修改脚本加入持续监听的功能来测试接收。

6. 高级配置与性能调优

基础通信跑通后,为了满足更严苛的应用场景,可能还需要进行一些调优。

6.1 调整串口缓冲区大小

默认的串口内核缓冲区可能较小,在高波特率或突发数据流下容易丢失数据。可以尝试在打开串口后(特别是在C/C++程序中)使用ioctl调整缓冲区大小。对于Pythonpyserial,它依赖于系统默认值。一种系统级的方法是使用setserial工具(可能需要安装:sudo apt install setserial),但更通用的做法是在自己的应用程序中实现软件缓冲。

6.2 硬件流控(RTS/CTS)的使用

如果你的设备支持硬件流控,并且需要用到它(例如连接老式Modem或某些无线模块),你需要:

  1. 连接额外引脚:将树莓派GPIO的GPIO 17 (物理引脚11)作为RTS,GPIO 18 (物理引脚12)作为CTS,连接到对端设备。
  2. 启用设备树覆盖层:在/boot/firmware/config.txt中,dtoverlay=uart5实际上已经默认启用了这两个引脚作为流控引脚。你可以显式指定:dtoverlay=uart5,ctsrts
  3. 在代码中启用:在Python中,创建Serial对象时传入参数rtscts=True

6.3 修改默认波特率

上述所有配置默认使用115200波特率。如果你想修改默认波特率,需要注意:

  • config.txt中的enable_uart=1不直接指定波特率。
  • 内核命令行参数console=ttyAMA0,115200中的波特率只影响内核控制台。
  • 应用程序的波特率是在打开串口时指定的(如Python中的baudrate=9600)。只要双方设备设置为相同的波特率即可。对于minicom,可以通过-b参数指定,或在配置菜单中设置。

7. 疑难杂症与排查实录

即使按照步骤操作,你也可能遇到问题。以下是我踩过的坑和解决方案。

7.1 常见问题速查表

问题现象可能原因排查步骤与解决方案
/dev/ttyAMA0不存在1. UART未在config.txt中启用。
2. 错误的dtoverlay
1. 检查/boot/firmware/config.txt是否有enable_uart=1
2. 树莓派4B尝试dtoverlay=uart5
3. 运行sudo raspi-config(如果已安装)检查接口选项。
权限拒绝 (Permission denied)当前用户不在dialout组。执行sudo usermod -a -G dialout $USER,并重新登录。临时可用sudo运行程序。
能发送数据,但接收不到任何数据1. TX/RX线接反。
2. 对端设备未工作或配置错误。
3. 地线(GND)未连接。
1.重点检查:树莓派的TX应接USB模块的RX,树莓派的RX接USB模块的TX。
2. 确认对端设备已上电、波特率等参数一致。
3. 确保GND可靠连接。
收到乱码1. 波特率、数据位、停止位、校验位不匹配。
2. 电平不匹配(如3.3V与5V混用)。
3. 硬件问题或干扰。
1. 仔细核对通信双方的串口参数,必须完全一致。
2. 确认使用的是3.3V电平的USB转TTL模块。
3. 尝试降低波特率(如9600)测试。
运行minicom或Python脚本时系统卡住或无响应1. 串口被其他进程占用(如残留的getty)。
2. 硬件流控启用且引脚状态不对。
1. 使用sudo lsof /dev/ttyAMA0查看占用进程并结束它。
2. 检查config.txt中是否启用了ctsrts但未连接硬件,尝试在代码中禁用流控(rtscts=False)。
蓝牙和串口无法同时使用默认配置下,PL011 UART被蓝牙独占。方案A(推荐稳定串口):禁用蓝牙(dtoverlay=disable-bt),如上文所述。
方案B(需蓝牙):使用Mini UART (ttyS0) 做串口。在config.txt中添加dtoverlay=miniuart-bt,这将交换两者映射,但Mini UART波特率可能不稳定。
修改cmdline.txt后无法启动cmdline.txt格式错误(如多余空格、换行)。通过其他系统挂载SD卡的boot分区,恢复备份的cmdline.txt.backup文件,或参考同版本系统重新构造一行正确的参数。

7.2 深度排查命令工具箱

当问题复杂时,这些命令能提供更深层信息:

# 1. 查看详细的硬件映射信息(设备树) sudo dtc -I fs /sys/firmware/devicetree/base | grep -A 10 -B 10 uart # 或查找更具体的信息 find /sys/firmware/devicetree/base -name \"*uart*\" -type f | xargs cat 2>/dev/null # 2. 查看内核启动关于UART的详细日志 dmesg | grep -E \"(uart|tty|pl011|bcm2835)\" # 3. 检查串口驱动模块状态 lsmod | grep serial # 对于树莓派,相关驱动通常是内置的(built-in),不会显示在这里。 # 4. 使用strace跟踪程序访问串口的行为(高级调试) strace -e trace=openat,ioctl,read,write python3 uart_test.py 2>&1 | grep ttyAMA

7.3 一个隐蔽的坑:serial-getty服务的残留

有时,即使你已经禁用了serial-getty@ttyAMA0.service,系统在启动后仍可能因为某些依赖或缓存机制再次激活它。一个更彻底的方法是移除其符号链接:

sudo rm -f /etc/systemd/system/getty.target.wants/serial-getty@ttyAMA0.service sudo rm -f /lib/systemd/system/serial-getty@.service.wants/serial-getty@ttyAMA0.service # 如果存在 sudo systemctl daemon-reload

然后再次重启。

8. 从测试到应用:构建一个简单的串口数据转发服务

最后,我们来点实际的,将配置好的串口用在一个小项目里:创建一个简单的串口到TCP Socket的转发服务。这样,你可以通过网络远程访问连接在树莓派串口上的设备。

使用Python编写一个脚本uart_to_tcp_bridge.py

#!/usr/bin/env python3 import serial import socket import threading import time import signal import sys # 配置 UART_PORT = '/dev/ttyAMA0' UART_BAUDRATE = 115200 TCP_HOST = '0.0.0.0' # 监听所有网络接口 TCP_PORT = 8888 class UARTtoTCPBridge: def __init__(self): self.ser = None self.server_socket = None self.client_socket = None self.running = False def uart_reader(self): """从串口读取数据并发送给TCP客户端""" while self.running and self.ser and self.ser.is_open: try: if self.ser.in_waiting: data = self.ser.read(self.ser.in_waiting) if self.client_socket: self.client_socket.sendall(data) print(f\"[UART->TCP] Sent {len(data)} bytes\") except (serial.SerialException, OSError, ConnectionResetError) as e: print(f\"UART read error: {e}\") break time.sleep(0.001) # 短暂休眠,避免CPU空转 def tcp_reader(self): """从TCP客户端读取数据并发送给串口""" while self.running and self.client_socket: try: data = self.client_socket.recv(1024) if not data: print(\"TCP client disconnected.\") break if self.ser and self.ser.is_open: self.ser.write(data) print(f\"[TCP->UART] Sent {len(data)} bytes\") except (socket.error, ConnectionResetError) as e: print(f\"TCP read error: {e}\") break def start(self): """启动桥接服务""" # 初始化串口 try: self.ser = serial.Serial(UART_PORT, UART_BAUDRATE, timeout=0) print(f\"UART opened on {UART_PORT} at {UART_BAUDRATE} baud\") except serial.SerialException as e: print(f\"Failed to open UART: {e}\") return # 初始化TCP服务器 try: self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.server_socket.bind((TCP_HOST, TCP_PORT)) self.server_socket.listen(1) print(f\"TCP server listening on {TCP_HOST}:{TCP_PORT}\") except socket.error as e: print(f\"Failed to start TCP server: {e}\") self.ser.close() return self.running = True # 主循环,接受TCP客户端连接 while self.running: try: print(\"Waiting for TCP client connection...\") self.client_socket, client_addr = self.server_socket.accept() print(f\"TCP client connected from {client_addr}\") # 为每个客户端连接启动读写线程 uart_thread = threading.Thread(target=self.uart_reader, daemon=True) tcp_thread = threading.Thread(target=self.tcp_reader, daemon=True) uart_thread.start() tcp_thread.start() # 等待TCP连接断开 tcp_thread.join() print(\"Client handling finished. Closing connection.\") self.client_socket.close() self.client_socket = None except KeyboardInterrupt: print(\"\\nShutdown signal received.\") break except Exception as e: print(f\"Server error: {e}\") break self.stop() def stop(self): """停止服务,清理资源""" print(\"Stopping bridge...\") self.running = False if self.client_socket: self.client_socket.close() if self.server_socket: self.server_socket.close() if self.ser and self.ser.is_open: self.ser.close() print(\"Bridge stopped.\") def signal_handler(sig, frame): print('\\nExiting...') sys.exit(0) if __name__ == '__main__': signal.signal(signal.SIGINT, signal_handler) bridge = UARTtoTCPBridge() bridge.start()

使用方式

  1. 将脚本保存到树莓派,并安装依赖(已安装pyserial)。
  2. 运行脚本:python3 uart_to_tcp_bridge.py。它会打开串口并在8888端口监听TCP连接。
  3. 在你的电脑上,使用网络调试助手(如Netcat:nc <树莓派IP> 8888或 MobaXterm的Socket功能)连接到树莓派的IP和8888端口。
  4. 现在,你在网络调试助手中发送的数据,会通过树莓派转发到串口设备;串口设备返回的数据也会通过网络传回你的调试助手。

这个简单的桥接服务展示了串口通信如何融入更大的系统架构。你可以在此基础上增加协议解析、数据日志、多客户端管理等功能,使其成为一个实用的工业网关原型。

整个配置和测试过程的核心,在于对树莓派硬件资源分配和Linux系统服务管理的理解。每一步修改都对应着解决一个具体的冲突或设定一个明确的预期。当你成功在Ubuntu 22.04上驱动起树莓派4B的串口时,这片小小的开发板就真正具备了与广阔物理世界对话的能力。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/12 14:08:11

Kimi K3 技术解析:从 API 调用到本地部署的完整实践指南

1. 先搞清楚 Kimi K3 到底在吵什么&#xff1a;是技术问题还是预期错配&#xff1f; 最近关于 Kimi K3 的讨论&#xff0c;特别是“国外叫好&#xff0c;国内先吵起来”这个现象&#xff0c;核心不是简单的功能好坏之争&#xff0c;而是典型的技术产品在不同用户群体和场景下&a…

作者头像 李华
网站建设 2026/8/12 14:08:05

图吧工具箱:一站式电脑硬件检测与系统维护工具集合详解

1. 项目概述&#xff1a;为什么你需要一个“电脑合集检测工具箱”&#xff1f;如果你自己动手装过机、帮朋友修过电脑&#xff0c;或者只是单纯想搞清楚自己那台老伙计到底“身体”状况如何&#xff0c;那你大概率经历过这样的场景&#xff1a;想测CPU性能&#xff0c;得去AIDA…

作者头像 李华
网站建设 2026/8/12 14:07:56

Halcon 22.11.1.2 Steady 版本在 Windows 64 位系统上的完整安装与配置指南

1. 项目概述&#xff1a;为什么选择Halcon 22.11.1.2 Steady版本&#xff1f;如果你正在机器视觉、工业自动化或者图像处理领域摸爬滚打&#xff0c;那么对MVTec HALCON这个名字一定不会陌生。它几乎是这个领域里功能最强大、应用最广泛的商业机器视觉软件之一&#xff0c;从简…

作者头像 李华
网站建设 2026/8/12 14:07:40

从零构建AI智能体:基于Proma框架的Agent开发实战指南

在实际 AI 应用开发中&#xff0c;我们经常面临一个困境&#xff1a;如何让一个大型语言模型&#xff08;LLM&#xff09;不仅能够回答问题&#xff0c;还能像真正的智能体&#xff08;Agent&#xff09;一样&#xff0c;自主地理解任务、规划步骤、调用工具并执行操作。无论是…

作者头像 李华
网站建设 2026/8/12 14:06:45

STEPX Neo智能体工作流平台:从模糊需求到全自动多模态AI任务实践

这次我们来看一个在WAIC&#xff08;世界人工智能大会&#xff09;上亮相的AI新物种——STEPX Neo。它不是单一的工具&#xff0c;而是一个能理解模糊需求、串联多种AI能力、并自动完成复杂任务的“智能体工作流”平台。简单来说&#xff0c;你只需要用自然语言描述一个大概的想…

作者头像 李华