在 Ubuntu 上配置 ESP-IDF 串口环境并一键烧录 ESP32
1. 环境准备从零开始的基石如果你刚拿到一块ESP32开发板想在Ubuntu上大展拳脚第一步往往不是写代码而是把“地基”打好。这个地基就是ESP-IDF开发环境。很多新手朋友觉得官方文档步骤多看着有点懵其实跟着我走一遍你会发现它比想象中简单。我刚开始玩ESP32的时候也在这步卡了很久后来发现只要把几个关键点理顺了后面就是一马平川。首先你得确保你的Ubuntu系统是相对较新的版本比如20.04 LTS或22.04 LTS。太老的系统可能会缺少一些必要的库导致安装过程报错那可就头疼了。打开你的终端我们先来安装一些基础的编译工具链。别怕命令行它就像是你和电脑对话的“魔法咒语”用熟了效率极高。执行下面这条命令它会安装一系列编译器和工具比如git、cmake、ninja-build这些这些都是ESP-IDF编译时离不开的。sudo apt-get update sudo apt-get install -y git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0安装完这些依赖我们就可以正式开始安装ESP-IDF了。官方推荐的方法是使用他们的安装脚本这个方法最省心能自动处理Python虚拟环境和所有组件的下载。我强烈建议你不要用sudo去安装也不要把IDF装到系统目录里就放在你的用户目录下比如~/esp这样管理起来最方便出了问题也容易清理。mkdir -p ~/esp cd ~/esp git clone --recursive https://github.com/espressif/esp-idf.git cd esp-idf ./install.sh运行install.sh脚本后它会下载一个相当大的工具链和组件库具体大小取决于你选择的芯片目标比如ESP32、ESP32-S3等。这个过程需要一些时间你可以去泡杯茶。脚本运行完毕后它会提示你执行一个export.sh脚本。这个脚本的作用是设置当前终端会话的环境变量告诉系统ESP-IDF工具链在哪里。所以每次你新开一个终端窗口想要编译ESP32项目时都需要先“激活”一下这个环境. ./export.sh注意命令开头的那个点它和后面的空格是必须的这是source命令的简写。为了方便你可以把这条命令加到你的~/.bashrc或~/.zshrc文件末尾这样每次打开终端就自动设置好了。不过我个人的习惯是不加因为有时候我同时进行多个不同版本IDF的项目手动source一下更可控不容易混淆。1.1 连接开发板与识别串口环境装好了现在该请出我们的主角——ESP32开发板了。用一根质量好的USB数据线最好是那种既能传数据又能供电的把开发板连接到电脑的USB口上。这时候你可能会听到系统“叮咚”一声提示音说明有新的USB设备接入。接下来我们要知道系统给这个开发板分配了什么名字。在Linux世界里串口设备通常以/dev/ttyUSB*或/dev/ttyACM*的形式出现。我们打开终端在连接开发板前后分别执行一次ls /dev/ttyU*和ls /dev/ttyA*命令看看多出来的那个设备就是你的开发板。比如最常见的名字是/dev/ttyUSB0。这里有个小技巧你可以通过查看内核日志来更准确地确认dmesg | grep -E “ttyUSB|ttyACM|cp210x|ch341”这条命令会过滤出与串口转换芯片如CP2102、CH340相关的信息你能清楚地看到设备被识别成了什么。记下这个设备名比如/dev/ttyUSB0我们后面每一步都要用到它。1.2 永久解决串口权限问题告别sudo识别出串口后新手遇到的第一个也是最高频的“拦路虎”就是权限问题。如果你直接尝试用idf.py去烧录很可能会看到“Permission denied”的错误。这是因为普通用户默认没有读写串口设备的权限。网上很多教程会教你用sudo chmod 666 /dev/ttyUSB0。这个方法立竿见影但有个大问题它是临时的。一旦你拔插一下开发板或者重启了电脑这个权限就失效了你又得重新执行一遍sudo命令非常麻烦。而且频繁使用sudo也不是个好习惯。所以我们要用一个一劳永逸的方法把你的用户加入到dialout组。在Unix/Linux系统中dialout这个用户组通常就拥有访问串口设备的权限。操作很简单sudo usermod -a -G dialout $USER执行完这条命令后最关键的一步来了你必须注销当前用户然后重新登录或者直接重启电脑。只有这样新的组权限才会生效。很多朋友执行了命令后没重启发现权限还是不对就是卡在了这一步。重启后你可以用groups命令检查一下看看输出里是否包含了dialout组。之后你再操作/dev/ttyUSB0就不需要sudo了世界瞬间清净了。2. 项目编译与基础烧录让代码跑起来环境彻底搞定现在我们进入实战环节。假设你已经有一个ESP-IDF项目了如果没有可以用idf.py create-project my_project快速创建一个示例。进入你的项目目录我们一步步来。首先你需要告诉编译系统你的目标芯片是什么。虽然ESP-IDF功能强大支持乐鑫全家桶但它也得知道这次是为谁服务。用set-target命令指定idf.py set-target esp32如果你用的是ESP32-C3、ESP32-S3等就把esp32换成对应的型号比如esp32c3。这个命令只需要在项目初始化时执行一次它会配置好后续编译所需的所有工具链和库。执行完后你会看到项目目录下生成了一个sdkconfig文件这是项目的核心配置文件。接下来就是编译了命令很简单idf.py build这个build命令会启动完整的编译流程配置如果sdkconfig不存在、编译应用程序、编译Bootloader、生成分区表、最后把所有二进制文件打包成一个可以烧录的.bin文件。第一次编译会花费一些时间因为它需要编译整个工具链和库。编译成功后你会在终端看到类似“Project build complete”的提示并且在build目录下找到一堆生成的.bin文件。编译通过意味着你的代码没有语法错误可以进入最激动人心的环节——烧录。使用flash命令并指定你的串口设备idf.py -p /dev/ttyUSB0 flash这个命令会做几件事首先它会尝试让开发板进入下载模式通常是通过拉低GPIO0实现但很多开发板有自动下载电路无需手动操作然后它会按照sdkconfig里配置的Flash大小、分区表等信息将刚才编译好的bootloader.bin、partition-table.bin和your_app.bin依次写入到开发板的Flash存储器中。你会在终端看到进度条和校验信息。如果一切顺利最后会显示“Hash of data verified.”表示烧录成功且数据校验通过。2.1 烧录参数详解与调试技巧idf.py flash命令背后有很多可调节的参数了解它们能帮你解决很多奇怪的问题。最常用的就是-p指定端口和-b指定波特率。-p参数我们刚才用了。如果你的设备不是/dev/ttyUSB0一定要记得替换。有时候系统可能有多个串口设备搞错了就会报“Failed to connect”的错误。-b参数是波特率默认是460800。这个速度很快但有些USB转串口线或者开发板上的转换芯片质量不太好或者线太长有干扰在高速率下就容易出现数据错误导致烧录失败。症状通常是烧录到一半卡住或者校验失败。这时候你可以尝试降低波特率idf.py -p /dev/ttyUSB0 -b 115200 flash把波特率降到115200虽然烧录速度会慢一些但稳定性会大大提升。这是我踩过好几次坑得出的经验尤其是一些便宜的开发板或者山寨的USB线降波特率是救命良药。另一个有用的参数是-c它用于清除擦除整个Flash然后再执行烧录。这在你想彻底清空开发板或者更换了完全不同的项目时很有用idf.py -p /dev/ttyUSB0 erase_flash flash有时候烧录失败开发板会卡在一种奇怪的状态单纯重新烧录没用。这时候你可以先单独执行idf.py erase_flash擦除整个Flash然后再重新烧录往往能解决问题。3. 串口监视器与设备对话的窗口代码烧录进去了怎么知道它有没有正常运行呢这就需要串口监视器了。ESP-IDF内置了一个非常好用的监视器工具它不仅仅是打印日志还能接收你从键盘输入的字符实现简单的交互。启动监视器的命令是idf.py -p /dev/ttyUSB0 monitor执行后终端会清屏并开始实时显示从ESP32串口发送出来的所有数据。你会看到芯片上电启动的日志包括Bootloader的版本、应用程序的入口点、以及你程序里用ESP_LOGI、printf等函数打印的信息。这是调试程序最基本也是最重要的手段。这个监视器有几个很实用的特性。第一是颜色高亮错误信息通常是红色警告是黄色信息是绿色看起来一目了然。第二是时间戳每条日志前面都带有精确到毫秒的时间戳方便你分析程序执行的时间线。第三也是我最喜欢的一点它支持一些简单的控制命令。比如最常用的就是退出。监视器运行后你的终端就被它“接管”了按CtrlC是没用的。正确的退出方式是先按Ctrl]即按住Ctrl键再按右方括号键。这个组合键是监视器的退出快捷键按了之后就会回到普通的终端提示符。此外在监视器运行期间你还可以按CtrlT然后再按CtrlH会显示一个帮助菜单里面列出了所有可用的快捷键。比如你可以按CtrlT再按CtrlR来手动重启设备按CtrlT再按CtrlP来暂停日志输出这在日志刷屏太快你想仔细看某一段时非常有用。3.1 监视器过滤与配置进阶当你的项目越来越复杂打印的日志越来越多时从海量信息中找到你想要的那条就变得困难了。ESP-IDF的监视器提供了强大的过滤功能。这依赖于你在代码中使用的日志库的标签Tag系统。假设你在代码里这样定义日志ESP_LOGI(“MY_TAG”, “This is a log.”)。那么在启动监视器时你可以通过--filter参数来只显示带有特定标签的日志idf.py monitor --filter “MY_TAG”这样终端就只会打印标签为“MY_TAG”的日志了其他无关的日志比如Wi-Fi驱动、系统任务等产生的日志都会被过滤掉让你的调试界面非常清爽。你还可以使用更复杂的表达式比如--filter “*:I”表示只显示所有标签下级别为INFO及以上的日志过滤掉DEBUG级别的冗长信息。监视器的行为也可以通过环境变量或idf.py menuconfig进行配置。运行idf.py menuconfig然后导航到“Component config” - “Log output” - “Default log verbosity”这里可以设置默认的日志级别。更常用的是在“Serial flasher config”和“Monitor configuration”子菜单里你可以设置监视器的波特率默认和烧录波特率一致、数据位、停止位、流控等参数。如果你的设备日志波特率不是默认的115200就需要在这里修改否则监视器看到的就是乱码。4. 打造一键化脚本效率提升的关键每次开发都要手动输入idf.py build然后idf.py -p xxx flash最后idf.py -p xxx monitor一套流程下来虽然命令不多但重复多了也烦人特别是端口号容易输错。作为一个懒人程序员我们必须把重复劳动自动化。写一个Shell脚本把这一套流程固化下来是提升开发体验的质的飞跃。我们创建一个名为flash_and_monitor.sh的文件用你喜欢的文本编辑器打开它比如nano或vim。脚本内容可以这样写#!/bin/bash # 配置区域根据你的实际情况修改 PORT“/dev/ttyUSB0” BAUD“460800” TARGET“esp32” echo “ 开始 ESP32 一键编译与烧录 ” echo “目标端口: $PORT” echo “目标芯片: $TARGET” # 步骤1设置目标芯片如果已设置过此步骤很快 echo “[1/4] 设置目标为 $TARGET...” idf.py set-target $TARGET # 步骤2编译项目 echo “[2/4] 编译项目中...” if idf.py build; then echo “编译成功” else echo “编译失败请检查错误信息。” exit 1 fi # 步骤3烧录固件 echo “[3/4] 烧录固件到 $PORT (波特率 $BAUD)...” if idf.py -p $PORT -b $BAUD flash; then echo “烧录成功” else echo “烧录失败请检查连接和端口。” exit 1 fi # 步骤4启动串口监视器 echo “[4/4] 启动串口监视器...” echo “按 Ctrl] 退出监视器。” idf.py -p $PORT monitor这个脚本做了几件贴心的事。第一把配置变量放在开头修改端口、波特率、芯片型号非常方便。第二每一步都有清晰的提示让你知道当前进行到哪了。第三使用了if条件判断如果编译或烧录失败脚本会立即停止并报错不会继续执行无意义的后续步骤。第四烧录成功后自动打开监视器让你立刻就能看到程序运行结果。保存好脚本后别忘了给它加上可执行权限chmod x flash_and_monitor.sh以后在你的项目目录下只需要执行./flash_and_monitor.sh就可以坐等编译、烧录、看日志一条龙服务了。这节省的不仅仅是几次敲键盘的时间更是减少了因输入错误命令而导致的挫败感让你能更专注于代码逻辑本身。4.1 脚本的优化与扩展上面的基础脚本已经很好用了但我们可以让它更智能、更强大。比如我们可能并不需要每次都重新设置目标芯片因为sdkconfig已经存在了。我们可以加一个判断如果sdkconfig文件存在就跳过set-target步骤。if [ ! -f “sdkconfig” ]; then echo “未检测到 sdkconfig 文件正在设置目标 $TARGET...” idf.py set-target $TARGET else echo “检测到 sdkconfig 文件跳过目标设置。” fi再比如有时候我们只想编译或者只想烧录或者只想打开监视器看看日志。我们可以通过给脚本传递参数来实现不同的功能模式。这需要用到Shell脚本的参数解析功能$1,$2等。一个更高级的脚本框架可能是这样的#!/bin/bash PORT“/dev/ttyUSB0” BAUD“460800” ACTION“all” # 默认执行全部动作 # 解析命令行参数 while [[ $# -gt 0 ]]; do case $1 in -p|--port) PORT“$2” shift 2 ;; -b|--baud) BAUD“$2” shift 2 ;; build) ACTION“build” shift ;; flash) ACTION“flash” shift ;; monitor) ACTION“monitor” shift ;; *) echo “未知参数: $1” exit 1 ;; esac done case $ACTION in “build”) idf.py build ;; “flash”) idf.py -p $PORT -b $BAUD flash ;; “monitor”) idf.py -p $PORT monitor ;; “all”) idf.py build idf.py -p $PORT -b $BAUD flash idf.py -p $PORT monitor ;; esac这样你就可以用./flash_and_monitor.sh build只编译用./flash_and_monitor.sh flash只烧录用./flash_and_monitor.sh -p /dev/ttyACM0 -b 115200 all来指定端口和波特率执行全套流程。脚本的灵活性大大增加可以适应不同场景下的需求。这种“磨刀不误砍柴工”的投入在长期的开发中会带来巨大的回报。5. 深入配置与故障排查手册即使有了自动化脚本开发过程中也难免会遇到各种“妖魔鬼怪”。这一章我们就来建立一个常见问题的排查清单并深入一些高级配置选项让你在遇到问题时能快速定位。首先是最经典的“Permission denied”问题。如果你已经按照1.2节的方法加入了dialout组并重启但问题依旧可以检查一下设备文件的组权限。执行ls -l /dev/ttyUSB0你会看到类似crw-rw---- 1 root dialout ...的输出。重点看中间那部分rw-rw----它表示文件所有者root和文件所属组dialout有读写权限其他用户没有。如果你的用户名不在dialout组里或者组权限被意外修改就会出现问题。可以用getent group dialout命令查看组内有哪些用户。其次是“串口找不到”或“烧录时连接失败”。这通常有几个原因第一USB线有问题。有些USB线只能充电不能传输数据。务必换一根确认可以传输数据的线。第二开发板的USB转串口芯片驱动问题。常见的CH340、CP2102在较新内核的Ubuntu中都已内置驱动但如果你的系统特别老可能需要手动安装。第三端口号变了。如果你同时连接了多个USB串口设备比如Arduino、另一个ESP32系统分配的端口号可能会变。每次连接后都用dmesg | grep tty确认一下最稳妥。然后是“烧录过程卡住或校验失败”。除了之前提到的降低波特率还要检查一下Flash模式。有些ESP32开发板尤其是早期型号可能需要特定的Flash模式。运行idf.py menuconfig进入“Serial flasher config”检查“Flash SPI mode”是否与你的板子匹配。大多数板子使用DIO模式但有些用QIO或DOUT。如果不确定可以查看开发板的原理图或商品页面说明。另一个常见原因是电源不稳定。ESP32在烧录时瞬时电流可能比较大如果USB口供电不足或者线太长导致压降就会出问题。尝试将开发板直接连接到电脑后置的USB口或者使用带外部电源的USB Hub。5.1 使用menuconfig进行精细控制idf.py menuconfig是一个基于文本界面的图形化配置工具它是ESP-IDF强大功能的控制中心。新手往往怕碰它但其实里面很多设置对解决实际问题很有帮助。除了前面提到的串口波特率和Flash模式这里再介绍几个有用的配置项分区表在“Partition Table”菜单里你可以选择内置的分区表方案比如带OTA功能的或者自定义分区表。如果你需要更大的应用程序空间或者想调整SPIFFS文件系统的大小就在这里修改。CPU频率在“Component config” - “ESP32-specific” - “CPU frequency”里可以调整ESP32的主频。默认是240MHz如果你对功耗有要求可以降到160MHz或80MHz。反之如果追求极致性能可以尝试超频有一定风险。日志级别在“Component config” - “Log output”里可以全局调整日志的详细程度。在开发初期可以设为“Verbose”或“Debug”以便看到更多信息。在产品发布前可以设为“Warning”或“Error”以减少日志输出、节省资源。串口控制台在“Component config” - “Common ESP-related” - “Channel for console output”里可以修改控制台输出的串口号。默认是UART0如果你的板子把UART0用于其他用途可以切换到UART1。修改完配置后一定要记得保存。退出menuconfig时它会问你是否保存到sdkconfig选择“Yes”。之后必须重新执行idf.py build新的配置才会生效。记住一个原则每次修改sdkconfig无论是通过menuconfig还是直接编辑都需要重新编译。5.2 高级烧录与调试技巧当你对基础操作驾轻就熟后可能会遇到一些更复杂的需求。比如如何只烧录应用程序而不重新烧录Bootloader和分区表这在频繁迭代应用程序时能节省大量时间。使用flash命令的--partitions和--bootloader参数可以控制idf.py -p /dev/ttyUSB0 flash --partitions off --bootloader off这条命令就只会烧录应用程序本身。反之如果你只更新了分区表可以只用idf.py flash --partition-table。另一个场景是工厂量产烧录。你可能需要生成一个包含所有二进制文件的“合并固件”然后使用乐鑫官方的esptool.py工具进行烧录。ESP-IDF的构建系统其实已经帮你生成了这个文件它在build目录下通常叫your_project.bin注意不是your_app.bin。你可以直接用esptool.py来烧录这个文件esptool.py -p /dev/ttyUSB0 -b 460800 write_flash 0x1000 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin 0x10000 build/your_project.bin这条命令明确指定了每个二进制文件在Flash中的偏移地址是底层烧录的原始操作。理解这个有助于你更深入地理解ESP32的启动流程和存储布局。最后如果遇到任何玄学问题一个终极的清理大招是删除build目录和sdkconfig文件然后从头开始set-target和build。这能清除所有中间缓存和可能出错的配置相当于一次“干净的重建”。虽然耗时但往往能解决一些因依赖或配置缓存导致的诡异问题。在终端里一个rm -rf build sdkconfig sdkconfig.old命令然后重新开始世界又清净了。

相关新闻

矩形波发生电路设计指南:从滞回比较器到PWM调制的5个关键步骤

矩形波发生电路设计指南:从滞回比较器到PWM调制的5个关键步骤

矩形波发生电路设计指南:从滞回比较器到PWM调制的5个关键步骤 在物联网设备和嵌入式系统的世界里,矩形波(或称方波)远不止是一个简单的数字信号。它是驱动无刷电机的脉搏,是调节LED亮度的画笔,更是实现高效…

2026/7/4 11:00:55 阅读更多 →
深入解析DTS格式:设备树源文件的结构与属性定义

深入解析DTS格式:设备树源文件的结构与属性定义

1. 从零开始&#xff1a;DTS文件到底是什么&#xff1f; 如果你刚开始接触嵌入式Linux或者内核驱动开发&#xff0c;第一次看到.dts文件时&#xff0c;大概率会有点懵。满屏幕的/dts-v1/、/ { ... };、< >、[ ]&#xff0c;感觉像在看天书。别慌&#xff0c;我第一次看的…

2026/6/18 0:06:07 阅读更多 →
VideoAgentTrek Screen Filter API接口详解:从基础调用到高级参数配置

VideoAgentTrek Screen Filter API接口详解:从基础调用到高级参数配置

VideoAgentTrek Screen Filter API接口详解&#xff1a;从基础调用到高级参数配置 你是不是遇到过这样的场景&#xff1f;手头有一堆视频素材&#xff0c;需要快速找出其中包含特定屏幕内容&#xff08;比如某个软件界面、游戏画面或者网页&#xff09;的片段。如果靠人工一帧…

2026/7/3 7:23:37 阅读更多 →

最新新闻

11、<简单>有一个六位数,其个位数字7,现将个位数字移至首位(十万位),而其余各位数字顺序不变,均后退一位,得到一个新的六位数,假如新数为I旧数的4倍,求原来的六位数

11、<简单>有一个六位数,其个位数字7,现将个位数字移至首位(十万位),而其余各位数字顺序不变,均后退一位,得到一个新的六位数,假如新数为I旧数的4倍,求原来的六位数

#include <iostream> using namespace std;int main() {// old 是原六位数&#xff0c;个位固定为7for (long old 100007; old < 999997; old 10){// 拆分前5位long front old / 10;// 个位7移到十万位&#xff0c;生成新六位数long newNum 700000 front;// 判断…

2026/7/5 13:40:12 阅读更多 →
终极精简指南:使用PowerShell脚本让Windows 11瘦身50%

终极精简指南:使用PowerShell脚本让Windows 11瘦身50%

终极精简指南&#xff1a;使用PowerShell脚本让Windows 11瘦身50% 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 你是否曾为Windows 11那臃肿的系统体积和缓慢的…

2026/7/5 13:40:12 阅读更多 →
从《中国统计年鉴》到可比数据:手把手教你计算不变价GDP

从《中国统计年鉴》到可比数据:手把手教你计算不变价GDP

1. 为什么需要计算不变价GDP&#xff1f; 我第一次接触GDP数据时&#xff0c;发现一个奇怪现象&#xff1a;某城市2000年GDP是1000亿元&#xff0c;2020年GDP是8000亿元&#xff0c;看起来增长了8倍。但老师告诉我&#xff0c;这个比较毫无意义&#xff0c;因为没考虑物价变化。…

2026/7/5 13:40:12 阅读更多 →
编程启蒙|Scratch 转 Python 系列第 3 天完整教程

编程启蒙|Scratch 转 Python 系列第 3 天完整教程

本篇是零基础 Python 自学系列 Scratch 转 Python 第 3 天笔记&#xff0c;适合纯小白入门&#xff0c;内容包含实操代码、详细讲解与配套练习题&#xff0c;全程 Scratch 积木代码 Python 双向对照教学。 一、昨日内容复盘&#xff08;Scratch 转 Python Day2 for 循环与 ra…

2026/7/5 13:36:11 阅读更多 →
玄鹿电竞:用技术重构游戏服务体验,驱动专业护航

玄鹿电竞:用技术重构游戏服务体验,驱动专业护航

在《三角洲行动》的战场中&#xff0c;你是否曾因“老六蹲撤”“摸金翻车”“任务卡关”而遗憾&#xff1f;玄鹿电竞以技术为引擎&#xff0c;打造全链路专业护航平台&#xff0c;从下单、匹配、服务到售后&#xff0c;用数字化架构重构游戏服务体验&#xff0c;让“稳撤满载”…

2026/7/5 13:34:10 阅读更多 →
18、<简单>寻找距离2的幂最近的数字

18、<简单>寻找距离2的幂最近的数字

#include <iostream> using namespace std;int main() {int n;cout << "请输入整数n&#xff1a;";cin >> n;// 先找到小于等于n的最大2的幂 lowint low 1;while (low * 2 < n){low * 2;}int high low * 2; // 大于n的最小2的幂int dis_low …

2026/7/5 13:32:10 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻