Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Kconfig
Menuconfig
rtconfig.h
没有menuconfig的bsp如何添加.config Kconfig
发布于 2023-05-24 12:01:36 浏览:1010
订阅该版
[tocm] ## 参考资料 https://www.bookstack.cn/read/RT-Thread-tool/1.md ## 大致步骤 旧项目添加 menuconfig 功能 这里的旧项目指的是已经经过一段时间的开发,而且项目中存在已经修改过的 rtconfig.h文件 ,但是没有使用过 menuconfig 来配置的项目。具体流程如下: - 首先备份旧项目内的 rtconfig.h 文件。 - 使用 scons —genconfig 命令根据已有的 rtconfig.h 生成 .config 文件,这里生成的 .config 文件保存了旧项目中 rtconfig.h 文件对项目的配置参数。 - 将已经支持 menuconfig 功能的 bsp 里面的 kconfig 文件拷贝到要修改项目的根目录中。 - 使用 menuconfig 命令来配置我们要修改的旧项目。menuconfig 会读取第二步生成的 .config 文件,并根据旧项目的配置参数生成新的 .config 文件和 rtconfig.h 文件 。 - 对比检查新旧两份 rtconfig.h 文件,如果有不一致的地方,可以使用 menuconfig 命令对配置项进行调整。 ## 详细讲解 以 bsp/lpc176x 为例: 1.备份 rtconfig.h ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230524/a9d24305627386da69aa8854f29e4521.png.webp) 2.使用 scons —genconfig 命令根据已有的 rtconfig.h 生成 .config 文件,这里生成的 .config 文件保存了旧项目中 rtconfig.h 文件对项目的配置参数 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230524/cedd1b9f09ff6b766ceccfab38d06f43.png) > scons —genconfig 命令根据已有的 rtconfig.h 生成 .config 文件,这里生成的 .config 文件保存了旧项目中 rtconfig.h 文件对项目的配置参数 3.将 Kconfig 文件添加到要修改项目的根目录中 搜索一下 lpc176x 的架构: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230524/9975b88e00070d06f043ee4486b91d55.png.webp) 架构是 ARM Cortex-M3,去 `rt-thread\libcpu\Kconfig` 文件中找到对应的宏定义为 ARCH_ARM_CORTEX_M3: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230524/d55e53175403f10db9049a88edfd2d76.png.webp) Kconfig 文件的写法可以参考其余有 Kconfig 的 bsp,例如 bsp/beaglebone 的 Kconfig 是这样: ``` mainmenu "RT-Thread Configuration" config BSP_DIR string option env="BSP_ROOT" default "." config RTT_DIR string option env="RTT_ROOT" default "../.." # you can change the RTT_ROOT default "../.." to your rtthread_root, # example: default "F:/git_repositories/rt-thread" config PKGS_DIR string option env="PKGS_ROOT" default "packages" config ENV_DIR string option env="ENV_ROOT" default "/" source "$RTT_DIR/Kconfig" source "$PKGS_DIR/Kconfig" config SOC_AM335X bool select RT_USING_CACHE select RT_USING_COMPONENTS_INIT select RT_USING_USER_MAIN default y config RT_USING_UART0 bool "Using RT_USING_UART0" default n config RT_USING_UART1 bool "Using RT_USING_UART1" default y ``` 经过比对多个 Kconfig 文件分析,我得出来下面这种较为简单的 Kconfig 写法(Kconfig 照着这个写或者其他模板写可能会遇到各种问题,毕竟每个 bsp 的情况都不一样,我在文末的“注意事项”中对一些常见情况进行了分析,大家需要灵活调整): ``` mainmenu "RT-Thread Project Configuration" # 当前就是bsp根目录 config BSP_DIR string option env="BSP_ROOT" default "." # 根据当前目录和RT-Thread项目根目录的层级关系调整 config RTT_DIR string option env="RTT_ROOT" default "../.." config PKGS_DIR string option env="PKGS_ROOT" default "packages" source "$RTT_DIR/Kconfig" source "$PKGS_DIR/Kconfig" # 这里 SOC_LPC176 根据不同 bsp 灵活调整,同样下面的架构也需要对应调整 config SOC_LPC176 bool select ARCH_ARM_CORTEX_M3 default y ``` 4.使用 menuconfig 命令来配置我们要修改的旧项目。menuconfig 会读取第二步生成的 .config 文件,并根据旧项目的配置参数生成新的 .config 文件和 rtconfig.h 文件 5.对比检查新旧两份 rtconfig.h 文件(rtconfig - 副本.h 与 rtconfig.h),如果有不一致的地方,可以使用 menuconfig 命令对配置项进行调整 6.别忘了用 scons 编译一遍看看是否能成功编译 ---- ## 注意事项 如果不对比新旧 rtconfig.h 就直接 scons 编译,可能会遇到编译报错的问题,一般都是因为新生成的 rtconfig.h 中宏定义的问题。下面进行举例说明: 1.原来的宏在新版中消失(需要 rtconfig.h 中手动补上或者更改代码使用新的宏) 例如 bsp/lpc178x,在其 drivers/uart.c 中有 RT_UART_RX_BUFFER_SIZE 这个宏,然而通过 menuconfig 中搜索可知,这个宏搜不到,应该是取消了: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230524/de48f7b9dd5a91e3053f49bbc6c12865.png) 方法一: 通过对比新旧 rtconfig.h 可以发现,在旧版 rtconfig.h 中有这样一行:`#define RT_UART_RX_BUFFER_SIZE 64`,而新版 rtconfig.h 中没有,我们需要手动补上这一行。重新 scons --genconfig 生成新的 .config 文件,然后再次 scons 编译即可通过。 方法二: 发现有个新的宏 RT_SERIAL_RB_BUFSZ 替代了原有宏的功能: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230524/7cdf9185d47b7f1d7c18d13fe334864c.png) 于是在代码中对宏批量替换,重新 scons --genconfig 生成新的 .config 文件,然后再次 scons 编译即可通过。 2.原来的头文件消失(需要在 menuconfig 中取消对应宏,不编译缺失的部分) 例如 bsp/lpc2148,编译后会报错: ``` applications\application.c:27:10: fatal error: dfs_fat.h: No such file or directory 27 | #include
| ^~~~~~~~~~~ compilation terminated. scons: *** [build\applications\application.o] Error 1 scons: building terminated because of errors. ``` 在 RT-Thread 仓库中搜索 dfs_fat.h,发现搜不到这个头文件,猜测应该是版本更新后取消了。 回到 rtconfig.h 中新旧对比可以发现,旧版中的 `/* #define RT_USING_DFS */` 是注释过的,而新生成的 rtconfig.h 没有注释掉,我们在 menuconfig 中搜索这个宏的选项: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230524/58d3cdf463283f57efc34fa22cc37e41.png) 随后到对应位置关闭这个选项: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230524/0c9304966e617634d6e52d14587440b7.png) 再次编译解决问题: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230524/b61b610cd8eb94a3407badd9a720b1a1.png) 3.重复定义 以 bsp/lpc2478 为例,编译后报错: ``` c:/users/icyfeather/downloads/env_released_1.3.5/env-windows-v1.3.5/tools/gnu_gcc/arm_gcc/mingw/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld.exe: build\applications\application.o: in function `rt_application_init': C:\Users\IcyFeather\Desktop\rt-thread\bsp\lpc2478/applications/application.c:23: multiple definition of `rt_application_init'; build\kernel\src\components.o:C:\Users\IcyFeather\Desktop\rt-thread\src/components.c:208: first defined here c:/users/icyfeather/downloads/env_released_1.3.5/env-windows-v1.3.5/tools/gnu_gcc/arm_gcc/mingw/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld.exe: build\applications\startup.o: in function `rtthread_startup': C:\Users\IcyFeather\Desktop\rt-thread\bsp\lpc2478/applications/startup.c:34: multiple definition of `rtthread_startup'; build\kernel\src\components.o:C:\Users\IcyFeather\Desktop\rt-thread\src/components.c:237: first defined here c:/users/icyfeather/downloads/env_released_1.3.5/env-windows-v1.3.5/tools/gnu_gcc/arm_gcc/mingw/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld.exe: build\kernel\src\components.o: in function `main_thread_entry': C:\Users\IcyFeather\Desktop\rt-thread\src/components.c:199: undefined reference to `main' collect2.exe: error: ld returned 1 exit status scons: *** [rtthread-lpc24xx.elf] Error 1 scons: building terminated because of errors. ``` 可见是 applications/application.c 与 applications/startup.c 两个文件中的 rt_application_init() 与 rtthread_startup() 这两个函数与 rt-thread/src/components.c 文件中重复定义了 查看 components.c 中的代码可知,重复定义的两个地方全都在 `#ifdef RT_USING_USER_MAIN` 里面,所以我们需要取消这个宏定义,在 Kconfig 文件中删除 select RT_USING_USER_MAIN 这个部分,重新scons --genconfig 然后重复接下来的步骤,即可编译成功
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
IcyFeather
这家伙很懒,什么也没写!
文章
10
回答
7
被采纳
1
关注TA
发私信
相关文章
1
Kconfig
2
菜鸟请教:ENV工具执行menuconfig命令,提示找不到kconfig文件
3
env menuconfig命令找不到Kconfig文件
4
请教SPI配置的问题
5
【求助】menuconfig无法打开Kconfig文件,
6
代码缩进问题自己审查的小方法。
7
打不开kconfig文件
8
关于config的使用疑问
9
拉取最新的源码后,自己做的BSP的Kconfig好像要手动改
10
刚移植就卡住了这个问题有人遇到吗
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部