在MAC OS上折腾NCS开发环境记
最近用了三年的笔记本电脑编译Nordic新的NRF CONNECT SDK的速度有点慢,主要现在Nordic这套新的SDK都是放在VS Code里面用Nordic做的拓展插件来编译了,而拓展插件底层调用的又是west命令,所以编译的时候非常吃电脑的内存资源,同时还对CPU的处理速度要求很高,所以我准备换一台电脑,正好赶上现在有新一轮的国补,上狗东看了一下4000价位以内的电脑,有什么比iMAC mini4的性价比更高呢,5000+的iMac mini只给256G硬盘,可以让库克去死,但是不到4000的到手价格可以体验10核的M4就很香了,果断出手拿下。

因为之前没有用过MAC OS的操作系统,从头开始熟悉MAC OS用了一段时间,很多操作逻辑和Windows是完全不一样的。
之后就是在电脑上搭建NRF CONNECT SDK的环境了,其实总结下来拉取和编译NCS主要依赖的是west,因为NCS是放在Github上托管的,在拉取NCS的时候,实际上west又在底层调用的是git。所以按照这个思路,在MAC OS上先装好git和Python,然后用Python的pip来安装west就可以拉取代码了。
Python的安装非常简单,打开Python官网,下载Mac OS对应的安装包即可,这里推荐安装的版本的是3.10.11
https://www.python.org/downloads/release/python-31011/
安装完成之后,打开【终端】执行即可
pip3 install west
而git的安装方法有很多,这里可以直接去下载安装包
https://sourceforge.net/projects/git-osx-installer/
最后在【终端】输入west和git检查有没有安装好即可


接下来是安装VS Code,这里可以直接去巨硬官网下载
https://code.visualstudio.com/Download
最后就是拉取NCS了,这部分其实和windows上是一样的,在磁盘中的任意位置新建一个文件夹取名为NCS,这里我是放在了用户下面,在NCS中我又新建了一个子文件夹用来存放SDK,这么做的目的是我将编译SDK依赖的toolchains和下载软件用的nrfutil脚本都放在了NCS目录下面。

在NCS\V2.9.0这个文件夹下打开终端,执行如下两条命令拉取SDK
west init -m https://github.com/nrfconnect/sdk-nrf --mr nRFConnectSDK_revision nRFConnectSDK_revision west update
这里的nRFConnectSDK_revision nRFConnectSDK_revision是NCS的版本,例如我们要拉取NCS2.9.0,就可以输入如下两条命令
west init -m https://github.com/nrfconnect/sdk-nrf --mr v2.9.0 v2.9.0 west update
拉取SDK的时候如果速度慢,或者出现error或者timeout的字样,不用怀疑一定是你的网络有问题。什么你说的网络没有问题,你确定你能够流畅观看油管或者网飞的视频吗?不能的一律视为网络有问题。
接着就是下载编译SDK需要用到的toolchain了,这里也和Windows一样,可以用nrf connect for desktop这个应用程序中的Toolchain Manager去下载

也可以用VS code中的NRF CONNECT这个编译插件来下载

最后就是安装 下载程序用的工具nrfutil了,这个也是我搭建环境的时候折腾了最久的一个问题了,首先去官网下载nrfutil这个文件下来
https://www.nordicsemi.com/Products/Development-tools/nRF-Util
其实这就是一个脚本文件,安装的思路也和Windows是类似的,下载下来之后放在一个文件夹下面,再将这个文件夹的路径添加到环境变量里面,让【终端】可以在任意位置调用这个脚本即可。Windows下添加环境变量非常简单,因为是图形化的,而且网络上有非常多的教程,基本一看就会。但是Mac OS添加环境变量的方法是和LInux是类似的,需要自己用命令去写,会有一点复杂。
首先我参考了Nordic的nrfutil的文档https://docs.nordicsemi.com/bundle/nrfutil/page/guides/installing.html,将nrfutil下载好之后我放在了前面NCS\nrfutil那个目录下面,然后在目录下执行了这条命令,给nrfutil权限
chmod +x nrfutil
按照官方文档的意思,执行完之后就可以了,但是我在【终端】输入 nrfutil 来测试指令的时候出现了如下提示
zsh: command not found: nrfutil
在网上查了一些资料,原因是nrfutil这个脚本的路径没有加入的环境变量里面,按照网上给的教程,需要编辑.bash文件,首先在【终端】执行下面这条命令
vi $HOME/.bash_profile
之后长按键盘上的【i】,进入编辑模式,用如下指令添加nrfutil的路径
export PATH=$PATH:/Users/hannibalwang/NCS/nrfutil
然后长按【ESC】退出编辑模式,最后输入【:wq!】保存即可。
当然也可以在执行完 vi $HOME/.bash_profile之后,进入/Users/usename这个路径下,用command+shift+.这个快捷键让隐藏文件显示,然后用文本编辑.bash_profile,在里面加入【export PATH=$PATH:/Users/hannibalwang/NCS/nrfutil】再保存即可


完成上述步骤之后,在【终端】输入 nrfutil 是有正常返回了,但是在VS code中的NRF CONNECT插件中点击flash给DK下载程序,还是会出现报错,提示如下
nrfutil not found; install it or add its location to PATH
说明NRF CONNECT插件在环境变量中调用nrfutil的时候,还是找不到nrfutil,但是在VS code的zsh Terminal中输入nrfutil又是正常有返回的。在网上又找了很久的资料,最后发现一个解决方法,思路是给系统上所有用户账户生成PATH变量
首先执行列出现有路径
ls -l /etc/paths.d/
返回如下

接着输入
cat /etc/paths.d/10-cryptex
返回如下

接着输入创建zmodemapp文件
sudo vi /etc/paths.d/zmodemapp
长按键盘上的【i】,进入编辑模式,添加nrfutil的路径
/Users/hannibalwang/NCS/nrfutil
然后长按【ESC】退出编辑模式,最后输入【:wq!】保存即可。
这里其实就是通过path_helper工具使用/etc/paths.d/目录为系统上的所有用户帐户生成PATH变量。
最后就是编译代码了,这里我用了nrf_desktop这个NCS中比较大的一个工程来测试编译速度,编译的时候选择nrf54l15为目标板

这里我们打开【活动监视器】看一下编译时候的资源使用情况,感觉NCS在MAC OS上编译的时候占用的资源非常少,这点最直观的体验是nrf desktop这个工程在原先我的老Windows笔记本上编译大概需要两三分钟的时间,而且编译的时候风扇狂转,但是在iMac mini4上几十秒就完成了,体验非常不错。


浙公网安备 33010602011771号