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

100、【OS】【Nuttx】【构建】cmake 配置保存

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

接之前 blog
【OS】【Nuttx】【构建】cmake 配置实操:问题解决
之前 blog 解决了 cmake 配置问题,在回到主线分析前,再讲一个点:配置保存

配置保存

板默认配置 defconfig 里注释
在这里插入图片描述
有两个点:

  • make menuconfig:修改当前的 .config 配置文件,.config 是一个保存内核或系统编译配置的文件,里面记录了哪些功能开启,哪些关闭,在编译构建时,将读取这个配置文件
  • make savedefconfig:生成一个新的 defconfig 文件,defconfig 一般是一个最小化的配置文件,只记录与默认配置不同的选项,便于管理和版本控制,savedefconfig 会把当前 .config 中的重新输出成一个标准的 defconfig 文件,下次就可以用这个新的 defconfig 来恢复自定义配置,比如在重新编译或分享给他人时使用,便于保存定制配置,方便复用移植

可以这么理解,.config 实时作用于编译构建,而 defconfig 是持久化的配置快照,defconfig 本身不直接参与编译,但能生成或恢复 .config,从而间接作用于编译构建

make 配置保存

现在先重新演示一遍,make 配置的过程,首先在 nuttx 根目录,bash 终端输入

make distclean

先清除之前配置,而后在终端输入

tools/configure.sh -l -e stm32f429i-disco:nsh

选择具体板类型,基于其默认配置 defconfig 进行构建工程搭建
在这里插入图片描述

可以看到,此时编译系统用默认配置 defconfig 生成出了 .config 文件,查看 .config 文件,默认配置这里栈溢出选项 CONFIG_ARMV7M_STACKCHECK 此时是关闭的(因为其默认配置 defconfig 里没有)
在这里插入图片描述
终端输入

make menuconfig

配置将其打开,此时左上角表示配置将作用到根目录下的 .config 文件
在这里插入图片描述
退出保存
在这里插入图片描述
可以看到 .config 文件已包含了栈溢出选项 CONFIG_ARMV7M_STACKCHECK
在这里插入图片描述
终端输入

make clean; make

进行编译构建,可以看到此时 map 文件里能找到栈溢出的相关功能,比如 __stack_overflow_trap
在这里插入图片描述
ok,如果此时想下次重新走这个流程,默认配置本身就带上栈溢出等定制化配置的话,可以在终端输入

make savedefconfig

此时根目录下会重新生成 defconfig(带上了定制化配置)
在这里插入图片描述
将新生成的 defconfig 替换掉原来工程目录下的 defconfig,下次重新走这个流程时,就能默认带上用户的定制化配置
在这里插入图片描述

cmake 配置保存

上面讲完 make 的配置保存,下面再讲下 cmake 如何保存配置,同之前 blog 【OS】【Nuttx】【构建】cmake menuconfig 目标 一样,之前有 menuconfig 目标,当然也就有 savedefconfig 目标

在这里插入图片描述
但是也有点小瑕疵,就是箭头上指出的 savedefconfig 命令,和之前 menuconfig 一样,这个在 Linux 里面是没有的,所以和之前 blog 【OS】【Nuttx】【构建】cmake 配置实操:问题解决 一样,可以参考 make 的写法
在这里插入图片描述
继续找到关键字 KCONFIG_SAVEDEFCONFIG
在这里插入图片描述
ok,将 cmake 里面 savedefconfig 自定义目标这里替换掉
在这里插入图片描述
这里直接提供源码

# utility target to replace defconfig to board's defconfig
add_custom_target(savedefconfigCOMMAND ${CMAKE_COMMAND} -E env ${KCONFIG_ENV} kconfig-conf Kconfig --savedefconfig --out${CMAKE_BINARY_DIR}/defconfig.tmpCOMMAND ${CMAKE_COMMAND} -P ${NUTTX_DIR}/cmake/savedefconfig.cmake${CMAKE_BINARY_DIR}/.config ${CMAKE_BINARY_DIR}/defconfig.tmpCOMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/defconfig${NUTTX_DEFCONFIG}WORKING_DIRECTORY ${NUTTX_DIR})

cmake 工程经过配置后,配置流程参考之前 blog 【OS】【Nuttx】【构建】cmake 配置实操,在终端输入

cmake --build build -t savedefconfig

即可用 cmake 保存 defconfig 配置
在这里插入图片描述
ok,本期讲到这里,下篇 blog 继续

http://www.xdnf.cn/news/17628.html

相关文章:

  • 文心4.5专家负载均衡机制深度解析
  • 【Virtual Globe 渲染技术笔记】4 椭球面上的曲线
  • 线上Linux服务器被植入各种病毒的详细分析、处理、加固流程
  • 机器学习之TF-IDF文本关键词提取
  • EP1S20F484C6 Altera Stratix FPGA
  • imx6ull-驱动开发篇19——linux信号量实验
  • 鸿蒙开发资源导航与学习建议
  • 如何解决Unexpected token ‘<’, “<!doctype “… is not valid JSON 报错问题
  • 微服务ETCD服务注册和发现
  • LeetCode 2787.将一个数字表示成幂的和的方案数:经典01背包
  • Airtable 入门指南:从创建项目到基础数据分析与可视化
  • 渗透测试现已成为 CISO 战略的核心
  • 开疆智能Ethernet转ModbusTCP网关连接PAC3200电能表配置案例
  • 企业高性能web服务器(4)
  • 【运维进阶】Ansible 自动化
  • AI重构Java开发:飞算JavaAI如何实现效率与质量的双重突破?
  • 计算机网络摘星题库800题笔记 第6章 应用层
  • [Robotics_py] 机器人运动模型 | `update`函数 | 微积分矩阵
  • Visual Studio中VC++目录、C/C++和链接器配置的区别与最佳实践
  • 北京JAVA基础面试30天打卡08
  • 【问题解决】从Anaconda环境迁移到miniforge并在IDEA中完成环境配置
  • K8S学习---- Kubernetes 架构:从控制平面到工作节点的协作逻辑
  • Vue接口平台十三——测试记录
  • Git 撤回已推送到远程的最近push
  • 【数据结构入门】堆
  • NLP—词向量转换评论学习项目分析真实案例
  • 4.运算符
  • Docker命令及操作
  • imx6ull-驱动开发篇20——linux互斥体实验
  • 图解软件系统组成