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

ESP-C3入门20. CentOS开发环境及Jenkins流水线

一、准备环境

  • CentOS8
  • 已经正常安装Jenkins

二、升级 cmake

cmake 升到 3.16以上。

cmake --version
# 安装 g++
sudo yum install gcc-c++
export CXX=g++# 安装 CMake 的依赖项
sudo yum install -y openssl-devel# 下载 CMake 源码并进行编译安装
wget https://github.com/Kitware/CMake/releases/download/v3.21.1/cmake-3.21.1.tar.gz
tar -zxvf cmake-3.21.1.tar.gz
cd cmake-3.21.1
./bootstrap
make
sudo make install

三、升级 bash

bash要升到 4 以上。

cd /opt
wget -v http://ftp.gnu.org/gnu/bash/bash-5.1.16.tar.gz
tar zxvf bash-5.1.16.tar.gz
cd bash-5.1.16/
./configuremake install
mv /bin/bash /bin/bash.bak && ln -s /usr/local/bin/bash /bin/bash

四、安装IDF编译工具链

1. 替换源

git clone https://gitee.com/EspressifSystems/esp-gitee-tools.git
cd esp-gitee-tools/
./jihu-mirror.sh  set
# 依赖准备
sudo yum -y update && sudo yum install git wget flex bison gperf  cmake ninja-build ccache dfu-util libusbx

在这里遇到个问题,提示:
Public key for jenkins-2.401.2-1.1.noarch.rpm is not installed
意思是系统中缺少 Jenkins 软件包的公钥,因此无法验证软件包的真实性。
执行下面操作:

cd /opt
wget -O jenkins.rpm https://pkg.jenkins.io/redhat-stable/jenkins-2.401.2-1.1.noarch.rpm --no-check-certificate
sudo yum localinstall jenkins.rpm

2. 安装python3.8

ESP-IDF 需要python3.7以上版本,如果yum仓库版本比较低,则需要手动下载安装。

cd /opt
wget https://www.python.org/ftp/python/3.8.16/Python-3.8.16.tgz
tar -zxvf Python-3.8.16.tgz
ls
cd Python-3.8.16./configure --prefix=/opt/Python-3.8.16 --with-openssl=/usr/local/openssl
make 
make install
rm -rf /usr/bin/pip3 /usr/bin/python3
ln -s /usr/local/bin/pip3.8  /usr/bin/pip3
ln -s /usr/local/bin/python3.8  /usr/bin/python3

2. 获取 ESP-IDF

mkdir -p /opt/esp
cd /opt/esp
git clone -b v5.1 --recursive https://github.com/espressif/esp-idf.git

3. 安装 ESP-IDF

cd /opt/esp/esp-idf
# 提高下载速度
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
./install.sh esp32,esp32s2,esp32c2,esp32c3
. ./export.sh

五、流水线设置

Jenkinsfile脚本 :

pipeline{agent anyenvironment {IDF_PATH = "/opt/esp/esp-idf" // 替换为您的 ESP-IDF 安装路径IDF_PYTHON_ENV = "/usr/bin/python3" // 替换为您的 Python 虚拟环境路径(可选)}parameters{choice(name: 'ENV', choices: 'intranet\ntest\n', description: '部署环境')choice(name: 'CHIPSET', choices: 'esp32c3\nesp32c2\n', description: '芯片')choice(name: 'VERSION_TYPE', choices: '最新版本\n指定版本\n', description: '版本指定方式')string(name: 'VERSION', description: '版本', defaultValue: '1')choice(name: 'LOG', choices: '打印\n屏蔽\n', description: '是否打印日志')}stages{stage('Build') {steps {echo 'Building'script {echo "start"sh "/usr/local/bin/python3 /opt/esp/esp-idf/tools/idf_tools.py install"sh "cd $IDF_PATH && . /opt/esp/esp-idf/export.sh" // 激活 ESP-IDF 环境和 Python 虚拟环境if (params.VERSION_TYPE == '最新版本') {// 从 constants.h 文件中获取 MODULE_SOFT_VERSION 的值def versionHex = sh(returnStdout: true,script: "cat main/config/include/constants.h | grep 'MODULE_SOFT_VERSION' | awk '{print \$3}'").trim()// 将十六进制转换为十进制def versionDecimal = versionHex.toLong(16)// 赋值给 VERSIONparams.VERSION = versionDecimal.toString()}sh "idf.py set-target ${params.CHIPSET}"sh "idf.py build" // 在工作目录下运行 idf.py build 命令进行编译String calcPath = '/www/server/tomcat/webapps/upload';// 上传到指定路径sh "scp ${env.WORKSPACE}/build/whr_wifi_esp32.bin root@${host['test']}:${calcPath}/${params.VERSION}"sh "scp ${env.WORKSPACE}/build/partition_table/partition-table.bin root@${host['test']}:${calcPath}/${params.VERSION}"// 这里可以根据需要打印下载地址echo "烧写命令"echo "/opt/esp/esp-idf/components/esptool_py/esptool/esptool.py -p (PORT) -b 460800 --before default_reset --after hard_reset --chip ${params.CHIPSET}  write_flash --flash_mode dio --flash_size 4MB --flash_freq 60m 0x0 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin 0x10000 build/project.bin"echo "或运行 'idf.py -p (PORT) flash'"}}}}
}

六、问题处理

1. 找不到 GLIBCXX_3.4.20

    Run Build Command(s):/usr/bin/ninja-build cmTC_a92c3 && [1/2] Building CXX object CMakeFiles/cmTC_a92c3.dir/testCXXCompiler.cxx.objFAILED: CMakeFiles/cmTC_a92c3.dir/testCXXCompiler.cxx.obj /root/.espressif/tools/riscv32-esp-elf/esp-12.2.0_20230208/riscv32-esp-elf/bin/riscv32-esp-elf-g++   -march=rv32imc_zicsr_zifencei -o CMakeFiles/cmTC_a92c3.dir/testCXXCompiler.cxx.obj -c /var/lib/jenkins/workspace/whr-wifi-esp32/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx/root/.espressif/tools/riscv32-esp-elf/esp-12.2.0_20230208/riscv32-esp-elf/bin/../libexec/gcc/riscv32-esp-elf/12.2.0/cc1plus: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /root/.espressif/tools/riscv32-esp-elf/esp-12.2.0_20230208/riscv32-esp-elf/bin/../libexec/gcc/riscv32-esp-elf/12.2.0/cc1plus)

执行:

strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

在这里插入图片描述
拷一个 libstdc++.so.6.0.25到 /usr/lib64,执行:

ln -s libstdc++.so.6.0.25 libstdc++.so.6
ls -l libstdc++.so.6
strings libstdc++.so.6 | grep GLIBC

2. 提示"/lib64/libc.so.6: version GLIBC_2.18' not found (required by /lib64/libstdc++.so.6)"

curl -O http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar zxf glibc-2.18.tar.gz 
cd glibc-2.18/
mkdir build
cd build/
../configure --prefix=/usr
make -j2
make install

相关文章:

ESP-C3入门20. CentOS开发环境及Jenkins流水线

一、准备环境 CentOS8已经正常安装Jenkins 二、升级 cmake cmake 升到 3.16以上。 cmake --version # 安装 g sudo yum install gcc-c export CXXg# 安装 CMake 的依赖项 sudo yum install -y openssl-devel# 下载 CMake 源码并进行编译安装 wget https://github.com/Kitwa…...

服务器被爬虫恶意攻击怎么办?

在有预算的情况可以采购第三方服务防火墙,没钱就使用开源的WAF进行防护。 # WAF防火墙的基本防护原理 WAF(Web 应用防火墙)可以使用多种技术来防止恶意爬虫攻击,例如: 1. 黑名单:WAF 可以使用黑名单技术来…...

JavaScript正则表达式之座机号/手机号验证校验规则

引用:https://www.bilibili.com/read/cv18300539/ 本文对利用正则表达式对手机号码进行了验证 支持格式: 座机 :xxx-xxxxxxxx、xxxxxxxxxxxx …座机区号的横杠可有可无 手机:xxxxxxxxxxx JavaScript: var: checkPhone (rule,…...

黑客学习手册(自学网络安全)

一、首先,什么是黑客? 黑客泛指IT技术主攻渗透窃取攻击技术的电脑高手,现阶段黑客所需要掌握的远远不止这些。 二、为什么要学习黑客技术? 其实,网络信息空间安全已经成为海陆空之外的第四大战场,除了国…...

获取非叶子节点的grad(retain_grad()、hook)【为了解决grad值是None的问题】

在调试过程中, 有时候我们需要对中间变量梯度进行监控, 以确保网络的有效性, 这个时候我们需要打印出非叶节点的梯度, 为了实现这个目的, 我们可以通过两种手段进行, 分别是: retain_grad()hook 不过我感觉“hook”比“retain_grad()”要麻烦.....,所以我感觉还是…...

JMeter(八):响应断言详解

响应断言 :对服务器的响应进行断言校验 (1)应用范围: main sample and sub sample, main sample only , sub-sample only , jmeter variable 关于应用范围,我们大多数勾选“main sample only” 就足够了,因为我们一个请求,实质上只有一个请求。但是当我们发一个请求时,…...

【网络编程】IO复用的应用一:非阻塞connect

在connect连接中,若socket以非阻塞的方式进行连接,则系统内设置的TCP三次握手超时时间为0,所以它不会等待TCP三次握手完成,直接返回,错误为EINPROGRESS。   所以,我们可以通过判断connect时返回的错误码是…...

Spring注解开发,bean的作用范围及生命周期、Spring注解开发依赖注入

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaweb 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 Spring注解开发 一、注解开发定义Bean二、纯注解开发Bean三…...

C#设计模式之---原型模式

原型模式(Prototype Pattern) 原型模式(Prototype Pattern) 是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种创建型设计模式。也就是用一个已经创建的实例作为原型,通过…...

STM32入门学习之外部中断

1.STM32的IO口可以作为外部中断输入口。本文通过按键按下作为外部中断的输入,点亮LED灯。在STM32的19个外部中断中,0-15为外部IO口的中断输入口。STM32的引脚分别对应着0-15的外部中断线。比如,外部中断线0对应着GPIOA.0-GPIOG.0,…...

Jenkins 配置maven和jdk

前提:服务器已经安装maven和jdk 一、在Jenkins中添加全局变量 系统管理–>系统配置–>全局属性–>环境变量 添加三个全局变量 JAVA_HOME、MAVEN_HOME、PATH 二、配置maven 系统管理–>全局工具配置–>maven–>新增 新增配置 三、配置JDK 在系统管…...

Leetcode | Binary search | 22. 74. 162. 33. 34. 153.

22. Generate Parentheses 要意识到只要还有左括号,就可以放到path里。只要右括号数量小于左括号,也可以放进去。就是valid的组合。recurse两次 74. Search a 2D Matrix 看成sorted list就好。直接用m*n表示最后一位的index,并且每次只需要 …...

生命在于折腾——面试问题汇总

这里面的问题都是我参加面试时候遇到的问题,大家就这样看吧。 一、个人情况 1、自我介绍 2、为什么离开上一家公司 3、有没有参加过HVV 4、介绍一下上家公司的项目 5、小程序和公众号渗透测试做过么 6、实习工资多少 7、有挖过漏洞么 二、基础知识 1、信息收集的…...

<Java>Map<String,Object>中解析Object类型数据为数组格式

背景&#xff1a; 前端&#xff1a;入参为字符串和数组类型&#xff1b;通过json字符串传给后台&#xff0c; 后台&#xff1a;后台通过工具解析为Map<String&#xff0c;Object>&#xff0c;然后需要解析出Map里面的数组值做操作&#xff1b; 需求&#xff1a; 入参&…...

别再分库分表了,试试TiDB!

什么是NewSQL 传统SQL的问题 升级服务器硬件 数据分片 NoSQL 的问题 优点 缺点 NewSQL 特性 NewSQL 的主要特性 三种SQL的对比 TiDB怎么来的 TiDB社区版和企业版 TIDB核心特性 水平弹性扩展 分布式事务支持 金融级高可用 实时 HTAP 云原生的分布式数据库 高度兼…...

Java进阶之Dump文件初体验

视频地址&#xff1a;https://www.bilibili.com/video/BV1Ak4y137oh 学习文章&#xff1a;https://d9bp4nr5ye.feishu.cn/wiki/VQoAwlzrXiLFZekuLIyc1uK5nqc 最近线上频繁的内存告警&#xff0c;同事A通过分析dump文件解决了这个问题&#xff0c;我当然是不会放过这种学习的机…...

基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

曲线拟合(MATLAB拟合工具箱)位置前馈量计算(压力闭环控制应用)

利用PLC进行压力闭环控制的项目背景介绍请查看下面文章链接,这里不再赘述。 信捷PLC压力闭环控制应用(C语言完整PD、PID源代码)_RXXW_Dor的博客-CSDN博客闭环控制的系列文章,可以查看PID专栏的的系列文章,链接如下:张力控制之速度闭环(速度前馈量计算)_RXXW_Dor的博客-CSD…...

小程序使用echarts

参考文档&#xff1a;echarts官网、echarts-for-weixin 第一步引入组件库&#xff0c;可直接从echarts-for-weixin下载&#xff0c;也可以从echarts官网自定义生成&#xff0c;这里我们就不贴了组件库引入好后&#xff0c;就是页面引用啦&#xff0c;废话不多说&#xff0c;直…...

面向对象——封装

C面向对象的三大特性为&#xff1a;封装、继承、多态 C认为万事万物都皆为对象&#xff0c;对象上有其属性和行为 例如&#xff1a; ​ 人可以作为对象&#xff0c;属性有姓名、年龄、身高、体重…&#xff0c;行为有走、跑、跳、吃饭、唱歌… ​ 车也可以作为对象&#xf…...

Python智能内存回收实战:3种GC策略对比+4个生产级调优参数配置(附压测数据)

第一章&#xff1a;Python智能体内存管理策略生产环境部署在高并发、长生命周期的Python智能体服务中&#xff0c;内存管理直接影响系统稳定性与响应延迟。默认的CPython引用计数循环垃圾回收&#xff08;GC&#xff09;机制在动态对象频繁创建销毁的场景下易引发内存抖动和不可…...

Qwen Pixel Art企业级应用:游戏公司美术外包降本提效实战路径

Qwen Pixel Art企业级应用&#xff1a;游戏公司美术外包降本提效实战路径 1. 游戏美术外包的痛点与机遇 游戏开发中&#xff0c;美术资源制作往往占据大量成本和时间。传统像素美术外包存在三个核心痛点&#xff1a; 成本高&#xff1a;资深像素画师日薪通常在800-1500元&am…...

React - useEffect、useRef、Fragment

一、useEffect 1、基本介绍 useEffect 用于在函数式组件中执行副作用操作&#xff0c;用于替代类组件中的生命周期钩子 useEffect(() > {// 副作用操作return () > {// 清理函数&#xff08;可选&#xff09;}; }, [依赖项数组]);副作用操作&#xff1a;发送请求数据获取…...

如何三步搞定iOS微信聊天记录完整导出:隐私保护与数据备份终极指南

如何三步搞定iOS微信聊天记录完整导出&#xff1a;隐私保护与数据备份终极指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 还在为无法永久保存重要微信对话而烦恼吗&…...

MSSQL03:SQLServer数据库中的高级语法及其技巧

目录 一、日期相关 1.查询当前日期相关数据 2.查询特定时间区间 3.时间加减法 &#xff08;1&#xff09;加法 &#xff08;2&#xff09;减法 4.格式化日期 二、数据类型转化 1.Int -> Decimal 2.DateTime->OtherTime 3.DateTime->string 三、条件判断相关…...

手把手教你从Docker中提取Milvus二进制文件并配置集群环境

深度解析&#xff1a;从Docker镜像提取Milvus二进制文件的完整实践指南 在向量数据库领域&#xff0c;Milvus凭借其出色的性能和可扩展性已经成为众多AI应用的首选基础设施。虽然官方推荐使用Docker进行部署&#xff0c;但在生产环境中&#xff0c;直接使用二进制文件部署往往…...

CentOS7下KingbaseES V9与MySQL性能对比实测:从安装到查询优化的全流程体验

CentOS7下KingbaseES V9与MySQL性能对比实测&#xff1a;从安装到查询优化的全流程体验 在国产数据库技术快速发展的今天&#xff0c;越来越多的企业开始关注从传统数据库向国产化解决方案的迁移。作为国产数据库中的佼佼者&#xff0c;KingbaseES V9凭借其出色的MySQL兼容性和…...

C++ 安全子集:探讨在关键任务系统中限制部分 C++ 特性(如 RTTI)的必要性

尊敬的各位专家、各位同仁&#xff0c;大家好。今天&#xff0c;我们齐聚一堂&#xff0c;共同探讨一个在软件工程领域&#xff0c;尤其是在关键任务系统&#xff08;Critical Mission Systems&#xff09;开发中至关重要的话题&#xff1a;C 安全子集——在严苛环境下限制部分…...

使用Alpine配置WSL ssh门户

1. 哑铃图是什么&#xff1f; 哑铃图&#xff08;Dumbbell Plot&#xff09;&#xff0c;有时也称为DNA图或杠铃图&#xff0c;是一种用于比较两个相关数据点的可视化图表。 它源于人们对更有效数据比较方式的持续探索。 在传统的时间序列比较中&#xff0c;我们通常使用两条折…...

Go语言实现SHA256加密的避坑指南:从常量初始化到循环优化

Go语言实现SHA256加密的避坑指南&#xff1a;从常量初始化到循环优化 在区块链、数字签名和密码保护等领域&#xff0c;SHA256算法因其高安全性被广泛应用。作为Go语言开发者&#xff0c;理解并正确实现SHA256加密不仅关乎功能实现&#xff0c;更直接影响系统性能和安全性。本文…...