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

Linux嵌入式uboot使用tftp网络启动加载zImage、设备树

文章目录

    • 一、前言
    • 二、Linux U-boot 相关命令
      • (1)help 命令
      • (2)printenv 命令
      • (3)setenv 函数
      • (4)saveenv 函数
    • 三、tftp启动linux内核步骤
      • (1)进入u-boot模式
      • (2)ping通主机
      • (3)修改IP
      • (4)从网络启动


一、前言

先来讲一下为什么要使用tftp网络启动加载zImage和设备树。

在做驱动开发学习的时候,我们每次涉及到一个学习目标,比如学习led灯设备驱动开发,我们需要去设备树中添加节点,然后进行编译,编译好之后需要将我们的设备树和zImage文件上传到开发板,替换掉开发板上面相对应的文件,然后进行sudo reboot重新启动。

所以为了方便,可以使用Linux嵌入式uboot使用tftp网络启动加载zImage、设备树。也就是每次开启的时候,会从我们虚拟机tftpboot路径下去寻找我们的zImage和设备树启动,就不需要每次都下载然后重新reboot了。

如何搭建tftp服务器可以参考这篇文章:wpa_supplicant无线网络配置imx6ull以及搭建tftp服务器

在重启开发板的时候,随意按键即可进入u-boot模式。


二、Linux U-boot 相关命令

  • help: printenv命令描述/用法
  • printenv: 打印环境变量
  • setenv: 设置环境变量
  • saveenv: 将环境变量保存到持久存储

接下来我们详细讲解这几个命令。

(1)help 命令

可用于察看当前开发板所支持的命令。

[u-boot@igkboard]# help 
?         - alias for 'help'
base      - print or set address offset
bdinfo    - print Board Info structure
blkcache  - block cache diagnostics and control
bmode     - sd1|sd2|qspi1|normal|usb|sata|ecspi1:0|ecspi1:1|ecspi1:2|ecspi1:3|esdhc1|esdhc2|esdhc3|esdhc4
bmode - getprisec
bmp       - manipulate BMP image data
boot      - boot default, i.e., run 'bootcmd'
bootd     - boot default, i.e., run 'bootcmd'
bootefi   - Boots an EFI payload from memory
bootelf   - Boot from an ELF image in memory
bootm     - boot application image from memory
bootp     - boot image via network using BOOTP/TFTP protocol
bootvx    - Boot vxWorks from an ELF image
bootz     - boot Linux zImage image from memory
clocks    - display clocks
cmp       - memory compare
coninfo   - print console devices and information
cp        - memory copy
crc32     - checksum calculation
dcache    - enable or disable data cache
dhcp      - boot image via network using DHCP/TFTP protocol
dm        - Driver model low level access
echo      - echo args to console
editenv   - edit environment variable
env       - environment handling commands
erase     - erase FLASH memory
exit      - exit script
ext2load  - load binary file from a Ext2 filesystem
ext2ls    - list files in a directory (default /)
ext4load  - load binary file from a Ext4 filesystem
ext4ls    - list files in a directory (default /)
ext4size  - determine a file's size
ext4write - create a file in the root directory
false     - do nothing, unsuccessfully
fastboot  - run as a fastboot usb or udp device
fatinfo   - print information about filesystem
fatload   - load binary file from a dos filesystem
fatls     - list files in a directory (default /)
fatmkdir  - create a directory
fatrm     - delete a file
fatsize   - determine a file's size
fatwrite  - write file into a dos filesystem
fdt       - flattened device tree utility commands
flinfo    - print FLASH memory information
fstype    - Look up a filesystem type
fstypes   - List supported filesystem types
fuse      - Fuse sub-system
go        - start application at address 'addr'
gpio      - query and control gpio pins
gpt       - GUID Partition Table
help      - print command description/usage
i2c       - I2C sub-system
icache    - enable or disable instruction cache
iminfo    - print header information for application image
imxtract  - extract a part of a multi-image
itest     - return true/false on integer compare
lcdputs   - print string on video framebuffer
ln        - Create a symbolic link
load      - load binary file from a filesystem
loadb     - load binary file over serial line (kermit mode)
loads     - load S-Record file over serial line
loadx     - load binary file over serial line (xmodem mode)
loady     - load binary file over serial line (ymodem mode)
loop      - infinite loop on address range
ls        - list files in a directory (default /)
md        - memory display
mm        - memory modify (auto-incrementing address)
mmc       - MMC sub system
mmcinfo   - display MMC info
mtest     - simple RAM read/write test
mw        - memory write (fill)
net       - NET sub-system
nfs       - boot image via network using NFS protocol
nm        - memory modify (constant address)
panic     - Panic with optional message
ping      - send ICMP ECHO_REQUEST to network host
pinmux    - show pin-controller muxing
printenv  - print environment variables
protect   - enable or disable FLASH write protection
qspihdr   - Q(F)SPI Boot Config sub-system
random    - fill memory with random pattern
read      - Load binary data from a partition
reset     - Perform RESET of the CPU
run       - run commands in an environment variable
save      - save file to a filesystem
saveenv   - save environment variables to persistent storage
setcurs   - set cursor position within screen
setenv    - set environment variables
setexpr   - set environment variable as the result of eval expression
sf        - SPI flash sub-system
showvar   - print local hushshell variables
size      - determine a file's size
sleep     - delay execution for some time
source    - run script from memory
test      - minimal test like /bin/sh
tftpboot  - boot image via network using TFTP protocol
true      - do nothing, successfully
ums       - Use the UMS [USB Mass Storage]
usb       - USB sub-system
usbboot   - boot from USB device
version   - print monitor, compiler and linker version
videolink - list and select video link

(2)printenv 命令

printenv 命令查看环境变量也可以使用缩写:print

[u-boot@igkboard]# printenv    
author=weihuihong
baudrate=115200
bbl=tftp ${loadaddr} u-boot-igkboard.imx && mmc dev ${mmcdev} 1 && mmc write ${loadaddr} 2 0x500
bdtb=tftp $fdt_addr $fdt_file && fatwrite mmc 1:1 $fdt_addr $fdt_file $filesize
bker=tftp $loadaddr $image&& fatwrite mmc 1:1 $loadaddr $image $filesize
board_name=EVK
board_rev=14X14
bootcmd=run mmcbootdto
bootdelay=3
bsys=run bdtb && run bker
console=ttymxc0
dtbo_addr=0x83010000
dtbo_dir=overlays
emmc_ack=1
emmc_dev=1
env_conf=config.txt
eth1addr=be:19:97:40:6d:ff
ethact=ethernet@20b4000
ethaddr=3e:0a:c4:12:ae:e2
ethprime=eth1
fastboot_dev=mmc1
fdt_addr=0x83000000
fdt_file=igkboard.dtb
fdt_size=0x10000
fdtcontroladdr=9de744c0
image=zImage
ipaddr=192.168.137.213
loadaddr=0x80800000
loadenvconf=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${env_conf};env import -t ${loadaddr} ${filesize}
loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
mmc_no=1
mmcargs=setenv bootargs console=${console},${baudrate} root=/dev/mmcblk${mmc_no}p2 rootwait rw net.ifnames=0
mmcboot=echo Booting from mmc ...; mmc dev ${mmcdev}; run mmcargs; run loadenvconf;run loadimage; run loadfdt; bootz ${loadaddr} - ${fdt_addr}
mmcbootdto=echo Booting from mmc with overlay...; mmc dev ${mmcdev}; run mmcargs; run loadenvconf; run loadimage; run loadfdt; if env exists dtoverlay_lcd && test ${dtoverlay_lcd} = 1 -o ${dtoverlay_lcd} = yes ; then setenv dtbo_file lcd.dtbo; echo Applying DT overlay ==> ${dtbo_file}; fatload mmc ${mmcdev}:${mmcpart} ${dtbo_addr} ${dtbo_dir}/${dtbo_file}; fdt addr ${fdt_addr}; fdt resize ${fdt_size}; fdt apply ${dtbo_addr}; fi; if env exists dtoverlay_cam && test ${dtoverlay_cam} = 1 -o ${dtoverlay_cam} = yes ; then setenv dtbo_file cam.dtbo; echo Applying DT overlay ==> ${dtbo_file}; fatload mmc ${mmcdev}:${mmcpart} ${dtbo_addr} ${dtbo_dir}/${dtbo_file}; fdt addr ${fdt_addr}; fdt resize ${fdt_size}; fdt apply ${dtbo_addr}; fi; if env exists dtoverlay_i2c1 && test ${dtoverlay_i2c1} = 1 -o ${dtoverlay_i2c1} = yes ; then setenv dtbo_file i2c1.dtbo; echo Applying DT overlay ==> ${dtbo_file}; fatload mmc ${mmcdev}:${mmcpart} ${dtbo_addr} ${dtbo_dir}/${dtbo_file}; fdt addr ${fdt_addr}; fdt resize ${fdt_size}; fdt apply ${dtbo_addr}; fi; if env exists dtoverlay_spi1 && test ${dtoverlay_spi1} = 1 -o ${dtoverlay_spi1} = yes ; then setenv dtbo_file spi1.dtbo; echo Applying DT overlay ==> ${dtbo_file}; fatload mmc ${mmcdev}:${mmcpart} ${dtbo_addr} ${dtbo_dir}/${dtbo_file}; fdt addr ${fdt_addr}; fdt resize ${fdt_size}; fdt apply ${dtbo_addr}; fi; if env exists dtoverlay_uart; then for i in ${dtoverlay_uart}; do setenv dtbo_file uart$i.dtbo; echo Applying DT overlay ==> ${dtbo_file}; fatload mmc ${mmcdev}:${mmcpart} ${dtbo_addr} ${dtbo_dir}/${dtbo_file}; fdt addr ${fdt_addr}; fdt resize ${fdt_size}; fdt apply ${dtbo_addr};  done;fi; if env exists dtoverlay_can; then for i in ${dtoverlay_can}; do setenv dtbo_file can$i.dtbo; echo Applying DT overlay ==> ${dtbo_file}; fatload mmc ${mmcdev}:${mmcpart} ${dtbo_addr} ${dtbo_dir}/${dtbo_file}; fdt addr ${fdt_addr}; fdt resize ${fdt_size}; fdt apply ${dtbo_addr};  done;fi; if env exists dtoverlay_pwm; then for i in ${dtoverlay_pwm}; do setenv dtbo_file pwm$i.dtbo; echo Applying DT overlay ==> ${dtbo_file}; fatload mmc ${mmcdev}:${mmcpart} ${dtbo_addr} ${dtbo_dir}/${dtbo_file}; fdt addr ${fdt_addr}; fdt resize ${fdt_size}; fdt apply ${dtbo_addr};  done;fi; if env exists dtoverlay_extra; then for f in ${dtoverlay_extra}; do setenv dtbo_file $f.dtbo; echo Applying DT overlay ==> ${dtbo_file}; fatload mmc ${mmcdev}:${mmcpart} ${dtbo_addr} ${dtbo_dir}/${dtbo_file}; fdt addr ${fdt_addr}; fdt resize ${fdt_size}; fdt apply ${dtbo_addr};  done;fi; bootz ${loadaddr} - ${fdt_addr}
mmcdev=1
mmcpart=1
netboot=echo Booting from net ...; tftp $loadaddr $image; tftp $fdt_addr ${fdt_file};run mmcargs; bootz ${loadaddr} - ${fdt_addr}
serial#=303769d759a6d668
serverip=192.168.137.91
splashimage=0x8c000000
tee=no
upmode=fastboot 0Environment size: 4012/8188 bytes

里面的内容也是学长之前写好的或者添加的,直接拿来用就可。

也可以查看某一个环境变量的值:

[u-boot@igkboard]# printenv serverip
serverip=192.168.137.91

(3)setenv 函数

setenv name value 添加/修改环境变量:

[u-boot@igkboard]# setenv serverip 192.168.137.99

修改后:
在这里插入图片描述

setenv name 删除环境变量:

[u-boot@igkboard]# setenv serverip

修改后:
在这里插入图片描述

(4)saveenv 函数

保存环境变量,将当前定义的所有变量及其值存入flash中。

[u-boot@igkboard]# saveenv
Saving Environment to MMC... Writing to MMC(1)... OK

当设置完环境变量之后,如果执行了saveenv的话,则下次重新运行的时候环境变量则会被保存为上次保存的值;如果不保存,只会在设置好时还没重启之前生效,重启之后设置值会恢复成原来的值。


三、tftp启动linux内核步骤

(1)进入u-boot模式

开始启动的时候在倒数三秒时间按随机键进入到u-boot模式:

Hit any key to stop autoboot:  0 
[u-boot@igkboard]# 

(2)ping通主机

查看是否ping通tftp所在服务器主机:

[u-boot@igkboard]# ping 192.168.137.91
Using ethernet@20b4000 device
host 192.168.137.91 is alive

提示 xxx alive说明成功,可以ping通。

(3)修改IP

需要修改环境变量中的主机IP和服务器IP,注意,一般服务器IP都是不会变的,主机IP会变,但是主机IP需要在一个网段内就可,不需要每次都去修改的。

[u-boot@igkboard]# setenv ipaddr 192.168.137.99
[u-boot@igkboard]# setenv serverip 192.168.137.91
[u-boot@igkboard]# print ipaddr
ipaddr=192.168.137.99
[u-boot@igkboard]# print serverip
serverip=192.168.137.91

然后我们需要保存一下saveenv

(4)从网络启动

执行命令run netboot

[u-boot@igkboard]# run netboot
Booting from net ...
Using ethernet@20b4000 device
TFTP from server 192.168.137.91; our IP address is 192.168.137.99
Filename 'zImage'.
Load address: 0x80800000
Loading: #####################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################1.4 MiB/s
done
Bytes transferred = 9466232 (907178 hex)
Using ethernet@20b4000 device
TFTP from server 192.168.137.91; our IP address is 192.168.137.99
Filename 'igkboard.dtb'.
Load address: 0x83000000
Loading: ####1.1 MiB/s
done

说明成功了。

具体实现的代码在配置中写了,但是还不是很清楚,后面学到再补充。


相关文章:

Linux嵌入式uboot使用tftp网络启动加载zImage、设备树

文章目录 一、前言二、Linux U-boot 相关命令(1)help 命令(2)printenv 命令(3)setenv 函数(4)saveenv 函数 三、tftp启动linux内核步骤(1)进入u-boot模式&…...

使用Serv-U搭建FTP服务器并公网访问【内网穿透】

文章目录 1. 前言2. 本地FTP搭建2.1 Serv-U下载和安装2.2 Serv-U共享网页测试2.3 Cpolar下载和安装 3. 本地FTP发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 科技日益发展的今天,移动电子设备似乎成了我们生活的主角,智能…...

后端大厂面试总结大全六

目录: 1、Transactional注解控制事务有哪些不生效的场景2、MySQL的优化 1、Transactional注解控制事务有哪些不生效的场景 数据库引擎不支持事务数据源没有配置事务管理器没有被spring管理方法不是public的同一个类中方法调用,导致Transactional失效 举…...

2023五一数学建模A题B题C题思路模型代码

占个位置吧,开始在本帖实时更新五一数学建模赛题思路代码,文章末尾获取! 持续为更新参考思路 赛题思路 会持续进行思路模型分析,下自行获取。 A题思路: (比赛开始后第一时间更新) B题思路…...

Redis --- 入门、数据类型

一、前言 1.1、什么是Redis Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件,它是「Remote Dictionary Service」的首字母缩写,也就是「远程字典服务」。 基于内存存储,读写性能高适合存储热点…...

超级详解MySQL执行计划explain

1、什么是MySQL执行计划 要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解。 MySQL本身的功能架构分为三个部分,分别是 应用层、逻辑层、物理层,不只是MySQL ,其他大多数数据库产品都是按这种架构…...

C++流操作

C引入了ostringstream、istringstream、stringstream这三个类&#xff0c;要使用他们创建对象就必须包含<sstream>这个头文件。 在C中标准库提供三个类用于文件操作&#xff0c;统称为文件流类&#xff1a; ifstream&#xff1a;专用于从文件中读取数据&#xff1b;ofs…...

Django连接Redis、数据库、mongodb密码明文存储问题以及方案

文章目录 DDjango连接Redis、数据库、mongodb密码明文存储问题以及方案需求背景常见解决方案Django中redis、数据库密码明文加密存储方案 DDjango连接Redis、数据库、mongodb密码明文存储问题以及方案 需求背景 密码不应以明文出现在代码或配置文件中。 常见解决方案 在Dja…...

Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 02

上一篇设计了登录和聊天窗口&#xff0c;并实现了窗口切换&#xff0c;本章将继续实现其他模块 本章内容 完善登录验证实现自定义窗口的拖动效果 完善登录验证 对登录的输入框进行输入限定&#xff0c;这里我限制登录id为6位纯数字组合&#xff0c;密码长度不超过16位 设置…...

Direct local .aar file dependencies are not supported when building an AAR.

前言 起因&#xff1a;项目中含有视频播放功能&#xff0c;使用的是GSYVideoPlayer&#xff0c;因为公司网络问题经常依赖添加不了&#xff0c;所以将关于它的aar包全部下载下来直接本地依赖。 因为多个业务都可能涉及视频播放功能&#xff0c;为了复用&#xff0c;就想着将视频…...

【Java基础】day16

day16 一、switch-case 和 if-else 谁更快&#xff1f; switch-case 在 switch-case 中&#xff0c;case 的值是连续的话&#xff0c;会生成一个 TableSwitch 来进行优化&#xff0c;这样的情况下&#xff0c;只需要在表中进行判断即可。 这里使用 0-4 的连续值来进行测试 如…...

Neo4j | 一文入门Neo4j!

下面是一些基本的Cypher查询语句&#xff1a; 创建节点 CREATE (n:Person {name:Alice})这会创建一个标签为Person、属性name值为Alice的节点。 创建节点之间的关系 MATCH (a:Person {name:Alice}), (b:Person {name:Bob}) CREATE (a)-[:FRIEND]->(b)这会创建Alice和Bob…...

Python科研数据可视化

在过去的20 年中&#xff0c;随着社会产生数据的大量增加&#xff0c;对数据的理解、解释与决策的需求也随之增加。而固定不变是人类本身&#xff0c;所以我们的大脑必须学会理解这些日益增加的数据信息。所谓“一图胜千言”&#xff0c;对于数量、规模与复杂性不断增加的数据&…...

叫板IT部门和专业软件公司,低代码成为企业数字化的新选择

从2017年政府将“数字经济”写入工作报告&#xff0c;到今年两会将企业数字化转型列为重点议题&#xff0c;数字化的口号已喊了6年。政策对于数字化的支持越来越坚定&#xff0c;令人欣喜的是&#xff0c;越来越多具有远见卓识的企业已将数字化建设作为工作重心。 然而&#xf…...

leetcode 541. 反转字符串 II

题目描述解题思路执行结果 leetcode 541. 反转字符串 II 题目描述 反转字符串 II 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起&#xff0c;每计数至 2k 个字符&#xff0c;就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个&#xff0c;则将剩余字符全…...

java数据类型的转换以及精度丢失

java数据类型的转换以及精度丢失_long转double会丢失精度吗_ღLiJia的博客-CSDN博客 一.浮点类型在计算机当中的存储 float存储需求是4字节&#xff08;32位&#xff09;, 其中1位最高位是符号位&#xff0c;中间8位表示阶位&#xff0c;后32位表示值 float的范围: -2^128 ~ …...

网络通信基础 - 多路复用技术(频分多路复用、时分多路复用、波分多路复用)

文章目录 1 概述1.1 复用器 MUX 2 分类2.1 频分多路复用 FDM2.2 时分多路复用 TDM2.3 波分多路复用 WDM 1 概述 1.1 复用器 MUX 多路复用技术&#xff1a;把多个低速信道组合成一个高速信道的技术这种技术要用到两个设备&#xff0c;统称为 多路器&#xff08;MUX&#xff09…...

Baumer工业相机堡盟工业相机如何通过BGAPISDK的函数转换示Bayer格式为BGR8格式彩色图像(C++)

Baumer工业相机堡盟工业相机如何通过BGAPISDK的函数转换示Bayer格式为BGR8格式彩色图像&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的Bayer彩色图像的技术背景Baumer工业相机通过BGAPI SDK在回调函数里显示Bayer彩色图像Baumer工业相机在BufferEvent转换Bayer格式…...

一块钱看Android Debug: avc denied 已存在的目录不能访问

某三方应用&#xff0c;使用了USB摄像头&#xff0c;启动应用后功能不能使用&#xff0c;看log有如下错误&#xff0c; denied后面{}里的是要执行的动作,比如append,open,execmod,link等等 scontext指的是域,对应的是te文件 上面报错这条对应te文件是untrusted_app.te, scontex…...

URL 转为QR code(二维码)

推荐一个良心的网站&#xff0c;能够免费地将url、text编码为二维码&#xff0c;而且还能设计logo、颜色等。 https://www.the-qrcode-generator.com/ 如下图&#xff1a; 可以自己定义logo、颜色&#xff1a; 还能查看扫描历史等统计信息&#xff1a; 上述所有功能都是免…...

GEO时代媒体发布新范式:Infoseek如何用工程思维重构内容分发

上周跟一个做技术社区运营的朋友聊天&#xff0c;他吐槽了一件事&#xff1a;公司新功能上线&#xff0c;想发篇技术解读稿&#xff0c;找了家公关公司报价&#xff0c;一篇3000块&#xff0c;承诺发30家媒体&#xff0c;但具体发哪家、什么时候发、效果怎么样&#xff0c;全凭…...

Fish Speech 1.5开源大模型落地:为乡村学校定制方言普通话双语教学语音

Fish Speech 1.5开源大模型落地&#xff1a;为乡村学校定制方言普通话双语教学语音 想象一下&#xff0c;在偏远山区的教室里&#xff0c;孩子们正跟着一个亲切的“本地老师”学习普通话。这位老师不仅能说一口标准的普通话&#xff0c;还能用孩子们熟悉的家乡方言进行解释和互…...

CodeSys自定义HTML5控件:从零构建到工程实践

1. 为什么需要自定义HTML5控件&#xff1f; 在工业自动化领域&#xff0c;可视化监控是设备管理的重要环节。CodeSys作为主流的工业控制开发平台&#xff0c;其WebVisu功能虽然提供了基础控件库&#xff0c;但在实际项目中经常会遇到这样的尴尬&#xff1a;标准控件无法满足特定…...

Ostrakon-VL-8B与传统算法对比展示:在复杂背景下的菜品分割

Ostrakon-VL-8B与传统算法对比展示&#xff1a;在复杂背景下的菜品分割 不知道你有没有遇到过这样的烦恼&#xff1a;想给美食拍张照&#xff0c;结果背景里堆满了杂乱的餐具、餐巾纸&#xff0c;甚至还有手机和钥匙&#xff0c;想单独把菜品抠出来&#xff0c;用传统的修图工…...

保姆级避坑指南:用VMware ESXi 8.0给vCenter Server 8.0单独划个“家”(存储+网络配置详解)

VMware ESXi 8.0环境下的vCenter Server 8.0专属部署指南 在虚拟化环境中&#xff0c;vCenter Server作为整个VMware生态系统的"大脑"&#xff0c;其部署的稳定性和可靠性直接影响整个虚拟化平台的运行质量。本文将深入探讨如何在ESXi 8.0环境中为vCenter Server 8.0…...

LiuJuan Z-Image效果对比展示:BF16 vs FP16在人像细节与稳定性上的差异

1. 1. 1. 1. 1. 1. 1. 1. 1. 概述 1. 1. 1. 概述 1. 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 1. 概述 1. 概述 1. 概述 1. 概述 1. 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1…...

PasteMD场景应用:微信聊天记录自动整理为会议纪要

PasteMD场景应用&#xff1a;微信聊天记录自动整理为会议纪要 1. 为什么你的会议纪要总是一团糟&#xff1f; 想象一下这个场景&#xff1a; 下午两点&#xff0c;项目组紧急拉了个微信群聊&#xff0c;大家七嘴八舌讨论了半小时&#xff0c;敲定了五个关键事项和三个责任人。…...

从聊天机器人到业务执行者:Agentic Orchestration 如何重构 Java 后端体系

引言 在 RAG 1.0 时代&#xff0c;我们费尽心思让 AI“说得对、答得准”&#xff1b; 而进入 2026 年的 Agentic Orchestration&#xff08;智能体编排&#xff09; 时代&#xff0c;我们的目标已经变成&#xff1a;让 AI 做得对、跑得稳、能闭环。 用户说“帮我把昨天买贵的衣…...

# 状态通道实战:用Solidity实现高效链下交易与链上结算 在区块链世界中,**扩展性瓶颈**一直是开发者绕

状态通道实战&#xff1a;用Solidity实现高效链下交易与链上结算 在区块链世界中&#xff0c;扩展性瓶颈一直是开发者绕不开的话题。传统智能合约每笔交互都需上链&#xff0c;不仅成本高昂&#xff0c;还导致网络拥堵。而**状态通道&#xff08;State Channel&#xff09;**技…...

国产AI 调用量反超美国,22个免费大模型API集结,DMXAPI 成开发者首选

据 OpenRouter 最新数据&#xff0c;2026 年 3 月中国 AI 大模型周调用量达 4.69 万亿 Token&#xff0c;连续两周超越美国&#xff0c;全球调用量前三席位被小米 MiMo-V2-Pro、阶跃星辰 Step 3.5 Flash、MiniMax M2.5 包揽&#xff0c;国产模型凭性能与性价比获全球开发者认可…...