登录发现更多内容
首页
分类
发帖
账号
自动登录
找回密码
密码
登录
立即注册
立即登录
立即注册
其他登录
QQ
微信
首页
Portal
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
产品教程
BBS
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
开发资料
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
样品购买
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
IoT云平台
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
GitHub
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
技术博客
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
搜索
搜索
热搜:
LoRa
ESP8266
安信可
本版
帖子
用户
请
登录
后使用快捷导航
没有账号?
立即注册
每日签到
任务
广播
导读
排行榜
设置
我的收藏
退出
11
0
0
首页
小安派&M61基本系统教程
›
【M61笔记】M61工程文件架构
1
2
/ 2 页
下一页
返回列表
【M61笔记】M61工程文件架构
[ 复制链接 ]
发布帖子
知行合一
论坛元老
9
主题
406
回帖
6176
积分
论坛元老
论坛元老, 积分 6176, 距离下一级还需 9993823 积分
论坛元老, 积分 6176, 距离下一级还需 9993823 积分
积分
6176
私信
11人留言
楼主
小安派&M61基本系统教程
3197
11
2024-6-11 12:24:33
[i=s] 本帖最后由 知行合一 于 2024-6-13 19:20 编辑 [/i]
之前看泽哥的帖子,仅仅只是看了遍,似懂非懂,即使配置GPIO也得回来看帖子 这次借着手里有快M61kit,根据泽哥的帖子看SDK,我也缕缕 顺便把一些问题请教下大家 有我理解错误的地方,正好请大家指正 ## build文件夹 **该文件夹是编译后生成的 bin 文件存储的地方** **编译生成的固件名由CMakeLists.txt决定** ```cmake # 设置工程名称,这个配置决定了编译出来的文件名 # 编译后的 bin 文件是以工程名 + 芯片命名,这里只指定工程名 get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME) # CMAKE_CURRENT_SOURCE_DIR 指向当前处理的 CMakeLists.txt 文件对应的构建目录 project(${PROJECT_NAME}) ``` **生成的 bin 文件存储在 build/build\_out 下,编译生成的bin文件为wifi\_test\_bl616.bin,616和618软件区分很小,共用SDK**  "1718079762355.jpg") **这里生成的bin文件不是合成的bin文件,还需要其他如boot2等文件,具体看flash\_prog\_cfg.ini文件** **使用博流烧录工具烧录的合成bin文件在SDK中,具体路径为:** **必须执行下 make flash 才可以生成新的组合固件** ```c aithinker_Ai-M6X_SDK/tools/bflb_tools/bouffalo_flash_cube/chips/bl616/img_create/whole_flash_data.bin ```  ## CMakeLists.txt **CMake 是一个跨平台、开源的构建系统,它可以帮助我们管理好工程里的软件架构。CMakeLists.txt 文件相当于执行的列表,它可以调用其他的.h 头文件和.so/.a 库文件,生成 Makefile,将.cpp/.c/.cc 文件编译成可执行文件或新的库文件。** ```cmake cmake_minimum_required(VERSION 3.15) # 指定Cmake的最小版本 include(proj.conf) # 包含需要使用的组件文件,添加需要的组件都在这个文件设置 # 芯片包,原厂适配好了,不用管 find_package(bouffalo_sdk REQUIRED HINTS $ENV{BL_SDK_BASE}) # ############################################################# # 搜集所有的C文件 file(GLOB_RECURSE sources "${CMAKE_CURRENT_SOURCE_DIR}/components/*.c") # 添加头文件的引用路径 sdk_add_include_directories(main config components/wifi components/mqtt components/led components/state components/esay_flash components/cJson) # 把C文件添加到工程里 target_sources(app PRIVATE ${sources}) # 设置main.c 的文件 # 注意:不能和file(GLOB_RECURSE sources "${CMAKE_CURRENT_SOURCE_DIR}/components/*.c") 冲突(Note: Cannot conflict with “file(GLOB_RECURSE sources "${CMAKE_CURRENT_SOURCE_DIR}/components/*.c")”) sdk_set_main_file(main/main.c) # 设置工程名称,这个配置决定了编译出来的文件名。 get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME) project(${PROJECT_NAME}) # 工程名 也是Build生成的文件名称 ``` **BouffaloSDK 中封装了以下函数接口,基本满足常用场景使用。** | **Function** | **Description** | | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | | **sdk\_generate\_library** | **生成库,库名如果函数没有形参则使用当前库所在目录名** | | **sdk\_library\_add\_sources** | **为库添加源文件** | | **sdk\_library\_add\_sources\_ifdef** | **为库添加源文件(满足 if 条件)** | | **sdk\_add\_include\_directories** | **添加头文件路径** | | **sdk\_add\_include\_directories\_ifdef** | **添加头文件路径(满足 if 条件)** | | **sdk\_add\_compile\_definitions** | **添加宏定义,不要带 -D** | | **sdk\_add\_compile\_definitions\_ifdef** | **添加宏定义(满足 if 条件)** | | **sdk\_add\_compile\_options** | **添加编译选项** | | **sdk\_add\_compile\_options\_ifdef** | **添加编译选项(满足 if 条件)** | | **sdk\_add\_link\_options** | **添加链接选项** | | **sdk\_add\_link\_options\_ifdef** | **添加链接选项(满足 if 条件)** | | **sdk\_add\_link\_libraries** | **添加静态库** | | **sdk\_add\_link\_libraries\_ifdef** | **添加静态库(满足 if 条件)** | | **sdk\_add\_subdirectory\_ifdef** | **编译子目录下的 cmakelist(满足 if 条件)** | | **sdk\_add\_static\_library** | **添加外部静态库** | | **sdk\_set\_linker\_script** | **设置链接脚本** | | **sdk\_set\_main\_file** | **设置 main 函数所在文件** | | **project** | **工程编译** | | **target\_source(app PRIVATE xxx)** | **添加源文件到 app 库中,当用户需要自己添加一些源文件又不想创建 cmakelist 单独编译成库,可以使用该项** | ## flash\_prog\_cfg.ini **BouffaloSDK 采用新的 flash tool(bouffalo\_flash\_cube),并且烧录依赖 flash prog cfg.ini 文件。我们的烧录命令 make flash 就是依赖这个文件执行的。它也有自己的语法。** ```properties [cfg] # 0: no erase, 1:programmed section erase, 2: chip erase erase = 1 # skip mode set first para is skip addr, second para is skip len, multi-segment region with ; separated skip_mode = 0x0, 0x0 # 复位下载功能使能(Reset download function enable) # 0: not use isp mode, #1: isp mode boot2_isp_mode = 1 # 配置boot2固件,否则无法使用复位烧录功能(Configure boot2 firmware, otherwise the reset burn function cannot be used) [boot2] # AiPi-Eyes-R1/R2 必要固件 #filedir = ./build/build_out/Rx_boot2_*.bin filedir = ./build/build_out/boot2_*.bin address = 0x000000 # address 必须使用 0 地址 # AiPi-Eyes-R1/R2 必要固件 #[edata] #filedir = ./build/build_out/edata.bin #address = 0x3e0000 # 配置partition固件,这是必要的(Configuring partition firmware is necessary) [partition] filedir = ./build/build_out/partition*.bin address = 0xE000 # 配置应用程序固件地址,需要新建工程时需要修改“Project_basic” 为新工程的名字,否则可能会导致烧录失败 [FW] filedir = ./build/build_out/WiFi6-Test_$(CHIPNAME).bin address = 0x10000 ``` **正常使用只需要创建一个 KEY,例如 [FW],并且填写 filedir 和 address 就可以使用了** **其中 filedir 的填写方式有以下几种** * **bin 文件全路径 + bin 文件名称** * **bin 文件相对路径 + bin 文件名称** * **bin 文件名称添加 \_\$(CHIPNAME) 后缀可以自动识别成不同芯片(仅在 bin 文件名称前缀不同的时候使用)** * **bin 文件名称添加 \* 通配符,可以自动补全 bin 文件名称(仅在 bin 文件名称前缀不同的时候使用)** **[FW]项** * **FW 要烧录的应用固件,必须使用 FW 名称。** * **filedir 表示应用固件所在相对路径,正常来说是编译完后放在 build/build\_out 目录。 \_\$(CHIPNAME).bin 用于自动区分不同芯片。 xxx 表示应用固件名称,与 CMakeLists.txt 中 project(xxx) 中名称一致。\* 表示正则匹配,可用可不用。address 必须使用 0 地址** **多个运行固化烧录** **禁止使用通配符 \* 以及 \_\$(CHIPNAME) 前缀,因为 bin 文件名称前缀相同。** ```properties [cfg] # 0: no erase, 1:programmed section erase, 2: chip erase erase = 1 # skip mode set first para is skip addr, second para is skip len, multi-segment region with ; separated skip_mode = 0x0, 0x0 # 0: not use isp mode, #1: isp mode boot2_isp_mode = 0 [FW1] filedir = ./build/build_out/xxx0.bin address = 0x00000 [FW2] filedir = ./build/build_out/xxx1.bin address = 0x10000 [FW3] filedir = ./build/build_out/xxx2.bin address = 0x20000 ``` ## main.c **主程序运行的文件。** ## Makefile **编译的文件,其指定了一系列以赖关系和依赖规则。指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,可以实现自动化编译,一旦写好,只需要一个 make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。** **目前来说只需要修改第二行 BL\_SDK\_BASE ?= \$(SDK\_DEMO\_PATH)/../aithinker\_Ai-M6X\_SDK 的编译路径设置即可。** ```makefile # 当前工程文件路径(Current project file path) SDK_DEMO_PATH ?= . # 配置SDK路径(Configure SDK path) BL_SDK_BASE ?= $(SDK_DEMO_PATH)/../aithinker_Ai-M6X_SDK # 设置SDK路径(Set SDK path) export BL_SDK_BASE #配置芯片型号,M61/M62都配置成bl616(Configure chip models, with both M61 and M62 configured as bl616) CHIP ?= bl616 #配置板子类型,M61/M62 保持 “bl616dk”(Configuration board subtype, M61/M62 maintains' bl616dk ') BOARD ?= bl616dk #配置编译工具链(Configure Compilation Toolchain) CROSS_COMPILE ?= riscv64-unknown-elf- # add custom cmake definition #cmake_definition+=-Dxxx=sss #引用实际的编译配置(Reference the actual compilation configuration) include $(BL_SDK_BASE)/project.build ``` ## proj.conf **前面在 CMakeLists.txt 中提到的组件的使用,当我们需要使用各种组件或开启一些配置功能时,需要进入这个文件中添加。** ```c # 这个文件决定了当前工程中用到的组件,并且把它们添加到编译列表 # 如果发现引用的某个组件的文件夹找不到路径,大概率是该组件没在这个文件中设置为启用 # Components set(CONFIG_BFLOG 1) set(CONFIG_FREERTOS 1) set(CONFIG_POSIX 1) set(CONFIG_TLSF 1) set(CONFIG_SHELL 0) set(CONFIG_LWIP 1) set(CONFIG_WIFI6 1) set(CONFIG_RF 1) set(CONFIG_MBEDTLS 1) set(CONFIG_DHCPD 1) set(CONFIG_PING 1) ``` ## readme.md **说明文件,略过** ## 问题 ### flash\_prog\_cfg.ini中 ```properties [boot2] filedir = ./build/build_out/boot2_*.bin address = 0x000000 [partition] filedir = ./build/build_out/partition*.bin address = 0xE000 [FW] filedir = ./build/build_out/xxx*_$(CHIPNAME).bin address = 0x10000 [mfg] filedir = ./build/build_out/mfg*.bin ``` **已知boot2用于自动下载** **FW是固件** **其他两个 泽哥 说是 开启wifi功能烧录,但是 wifi6 test 没烧录 mfg 和 partition 也可以正常连接wifi** **mfg 和 partition 这两个是干什么用的**
点赞
0
收藏
0
淘帖
0
────
0
人觉得很赞
────
回复
使用道具
举报
11 回复
电梯直达
正序浏览
倒序浏览
正序浏览
沙发
lovzx
回复
使用道具
举报
2024-6-11 13:45:21
学习
回复
评论
使用道具
举报
板凳
WT_0213
回复
使用道具
举报
2024-6-11 13:50:04
学习
回复
评论
使用道具
举报
地板
爱笑
回复
使用道具
举报
2024-6-11 15:13:12
给你问问泽哥!
回复
评论
使用道具
举报
用心做好保姆工作
5
#
Ai-Thinker小泽
回复
使用道具
举报
2024-6-11 15:24:55
写的时候还比较早期,是这样的,flash_prog_cfg.ini是给你配置make flash命令需要烧录的内容,而make flash也是有脚本的,会合成固件,其实后续也是烧录的合成固件,而如果是烧录工具烧录,是根据你partition table(分区表)来选择需要烧录的内容。具体你可以看一下bsp/board/bl616dk/config/partition_cfg_4M.toml。
回复
评论
使用道具
举报
6
#
wxlinus
回复
使用道具
举报
2024-6-12 08:52:38
学习学习
回复
评论
使用道具
举报
7
#
qhsj
回复
使用道具
举报
2024-6-12 12:31:30
学习~
回复
评论
使用道具
举报
8
#
wukong50
回复
使用道具
举报
2024-7-27 20:20:00
学习了
回复
评论
使用道具
举报
9
#
noonezero
回复
使用道具
举报
2024-7-27 20:49:20
666
回复
评论
使用道具
举报
10
#
timo
回复
使用道具
举报
2024-10-6 13:32:25
感谢分享
回复
评论
使用道具
举报
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
立即登录
手机登录
点评
高级模式
本版积分规则
回帖并转播
回帖后跳转到最后一页
下一页 »
1
2
/ 2 页
下一页
今日推荐
Ai-M61-32SU 模块硬件版本 V1.2-A1
浅尝bouffalo_sdk
腾讯WorkBuddy 编程测试
Codex的单片机写代码测试结果
记录下 ai编程cursor
Ai-M62-M10L的学习与使用
BU04 INIT FAILED
Ai-M61-32S-Kit学习与使用
BW16二次开发烧录失败
MDK5.40编译PB-03 SDK
热帖排行
Ai-M61-32SU 模块硬件版本 V1.2-A1
求助
立创直播还想要 “九章”MCP 验证套件的看这里
智能网球避震器,希望能与感兴趣的朋友交流
浅尝bouffalo_sdk
Ai-M61-32S开发环境搭建+电气工程及其自动化
腾讯WorkBuddy 编程测试
Codex的单片机写代码测试结果
统计信息
会员数: 30910 个
话题数: 44872 篇
首页
分类
我的