[i=s] 本帖最后由 1055173307 于 2025-4-19 19:33 编辑 [/i]
去年配置过了M61模块的开发环境,但是今年换了新电脑之后要重新配置环境,加上R2另外有加密的设置。前段时间开始配置环境一直踩坑没办法实现命令行烧录,找时间折腾了一下终于是搞出来了,发个帖子记录一下方便后续回顾并且分享一下我用来设置临时环境变量的方式,个人感觉还是好用的。
一、SDK排坑
1.1 拉取SDK&经典老坑
拉取SDK和基础配置上官方推荐的<零基础搭建小安派Windows 开发环境>或者沈工的一键配置都很好用<还安装不了?一键帮你搞定>两种方式都很好用。
不熟悉git的用沈工的工具确实能省很多事,还能处理掉一些坑。
其次就是两个经典老坑需要处理,用沈工的工具能用脚本直接填坑。
但我用的git,所以要手动的方式填一下坑:
打开 aithinker_Ai-M6X_SDK\bsp\board\bl616dk\board.c
注释第11、212行
打开 aithinker_Ai-M6X_SDK\project.build
把75、76、90三行的cp换成copy,全文的“/”都搜索替换成"\"
打开项目里的makefile比如 AiPi-Eyes-Rx\Makefile
,把第2行的“/”都替换成"\"
到这里完成基本项目内编译烧录就可以实现了
(编译之前先用下面的环境变量设置方法运行一下脚本设置环境变量)

1.2 R2的新坑
R2相比于M61模块本身的开发,最大的区别就是出厂固件加上了加密固件,其他的没什么不同的。但最大的问题就是出现在这个加密的固件上。
不清楚是不是因为手里的R2是去年的版本老还是什么原因,用固件里配置的boot2和edata烧进去用不了,咨询了泽哥找到了86UI-New项目里能用的固件和分区表,使用博流的DevCube烧录能用。
那我寻思肯定直接用命令行烧录肯定也可以,只是配置的问题。研究了一下makefile和project.build之后大概改出来了一个能用的办法。下面记录一下修改的过程:
1.2.1 拷贝可用固件
因为在SDK的project.build里面定义了
copy $(BL_SDK_BASE)\bsp\board\bl616dk\config\edata.bin build\build_out
copy $(BL_SDK_BASE)\bsp\board\bl616dk\config\Rx_boot2_m61.bin build\build_out
并且试出来的话,
AiPi-R1-86UI-New/board/config/whole_img_bootloader.bin
作为boot固件;
AiPi-R1-86UI-New/board/config/edata.bin
作为edata;
加上AiPi-Eyes_Rx编译出来的FW AiPi-Eyes-Rx_$(CHIPNAME).bin
,这三个一起烧录进去是能用的。
所以就把 AiPi-R1-86UI-New/board/config/whole_img_bootloader.bin
和 AiPi-R1-86UI-New/board/config/edata.bin
两个文件拷贝到 aithinker_Ai-M6X_SDK\bsp\board\bl616dk\config\
路径下,并且把 whole_img_bootloader.bin
重命名为 Rx_boot2_m61.bin
这样不管在编译哪个项目的时候,都会自动把这两个固件拷贝到build_out路径下,新项目配置的时候避免因为这个固件给错踩坑。
1.2.2 修改flash烧录配置
flash分区配置文件是项目路径下的 flash_prog_cfg.ini
如果是demo项目中,主要还是boot2的修改和edata分区的增加,刚拉下来的可能会有两种情况
1.没有edata,没有的要手动加上

2.有edata

这里要确认几个点
- boot2路径改成
./build/build_out/Rx_boot2_m61.bin
- edata路径改成
./build/build_out/edata.bin
- FW路径改成
./build/build_out/<project_name>_$(CHIPNAME).bin
其中的 <project_name>
对应项目名
最终修改完的项目里的 flash_prog_cfg.ini
文件长下面这个样子:
[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 = 1
[boot2]
filedir = ./build/build_out/Rx_boot2_m61.bin
address = 0x000000
[edata]
filedir = ./build/build_out/edata.bin
address = 0x3e0000
[partition]
filedir = ./build/build_out/partition*.bin
address = 0xE000
[FW]
filedir = ./build/build_out/AiPi-Eyes-Rx_$(CHIPNAME).bin
address = 0x10000
然后就可以尝试用烧录命令对R2进行烧录了,运行结果:
(编译之前先用下面的环境变量设置方法运行一下脚本设置环境变量)


屏幕上也正常显示了出厂固件相同的界面,R2的windows开发环境配置成功
二、临时环境变量设置
因为直接设置SDK工具链路径到系统变量中回污染系统的开发环境,所以为了避免这个事情最好使用临时环境变量的方式。
同时为了实现以下几点:
- 能在任意路径下的工程中使用脚本
- 适配不同电脑中SDK的存放路径
- 方便使用
想了一个办法就是在SDK拉取后的同级目录下,用脚本生成一个包含SDK编译工具链绝对路径的脚本用于设置环境变量。
简单点就是,拉取SDK后,我只需要在SDK同级目录下执行create_env_source.ps1
,就会自动生成一个set_M61_SDK_Path.ps1
用于设置环境变量。只需要把set_M61_SDK_Path.ps1
这个脚本拷贝到自己的项目的路径下,就可以直接运行这个脚本设置环境变量
例:首次使用,把 create_env_source.ps1
放在 AiPi-Open-Kits\
路径下,在 AiPi-Open-Kits\AiPi-Eyes-Rx
下依次执行
..\create_env_source.ps1
..\set_M61_SDK_Path.ps1
然后用echo $env:Path可以看当前终端下的环境变量是否正确包含编译工具链路径
我的运行结果如下
PS E:\Develop\M6x_SDK\AiPi-Open-Kits\AiPi-Eyes-Rx> ..\create_env_source.ps1
An environment variable script has been generated as E:\Develop\M6x_SDK\AiPi-Open-Kits\set_M61_SDK_Path.ps1, please copy to your project path and run it to set env:Path.
PS E:\Develop\M6x_SDK\AiPi-Open-Kits\AiPi-Eyes-Rx> ..\set_M61_SDK_Path.ps1
PS E:\Develop\M6x_SDK\AiPi-Open-Kits\AiPi-Eyes-Rx> echo $env:Path
E:\Develop\M6x_SDK\AiPi-Open-Kits\aithinker_Ai-M6X_SDK\tools\make;E:\Develop\M6x_SDK\AiPi-Open-Kits\aithinker_Ai-M6X_SDK\toolchain_gcc_t-head_windows\bin;E:\Develop\M6x_SDK\AiPi-Open-Kits\aithinker_Ai-M6X_SDK\tools\ninja;.........

附件:
create_env_source.ps1
附件:create_env_source.ps1.zip
$createScriptDir = $PSScriptRoot
$makeDir = Join-Path $createScriptDir 'aithinker_Ai-M6X_SDK\tools\make'
$gccDir = Join-Path $createScriptDir 'aithinker_Ai-M6X_SDK\toolchain_gcc_t-head_windows\bin'
$ninjaDir = Join-Path $createScriptDir 'aithinker_Ai-M6X_SDK\tools\ninja'
$envSourcePath = Join-Path $createScriptDir 'set_M61_SDK_Path.ps1'
$envSourceContent = @"
# Add the Path temporary environment variable
`$env:Path = "$makeDir;$gccDir;$ninjaDir;`$env:Path"
"@
$envSourceContent | Out-File -FilePath $envSourcePath -Encoding utf8 -Force
Write-Host "An environment variable script has been generated as $envSourcePath, please copy to your project path and run it to set env:Path."