直接进入正题。
按照官方给出的教程,大家编译的时候会发现报错
Failed building build\build_tmp\scripts\system_config.ld: AttributeError : 'SconsEnvCfg' object has no attribute 'nv_cfg_name'
![屏幕截图 2022-09-18 145153.jpg](//file.elecfans.com/web2/M00/6A/85/poYBAGMmwEWACSeSAAG1IoM-LYI449.jpg)
先给解决方法再写具体过程
1.打开自己新建的工程。
2.找到build文件夹,并打开。
3.看到scripts文件夹,并打开。
找到scons_env_cfg.py文件,用文本编译器打开该文件。
找到文本 #mss_nvi_db_max.xml MAX_POWER
另起一行增加下面这行代码
self.nv_cfg_name = 'mss_nvi_db_max.xml'
如下图所示,保存再编译
![屏幕截图 2022-09-18 145719.jpg](//file.elecfans.com/web2/M00/6B/1C/pYYBAGMmwV-Af0UNAAEeCT6FD7U717.jpg)
这时我就可以看到编译成功了
![屏幕截图 2022-09-18 150242.jpg](//file.elecfans.com/web2/M00/6B/1D/pYYBAGMmwqSAXWZ1AAC7o7S66sE540.jpg)
PS:
说实话很多工程师都想学习鸿蒙系统,有很多人在搭建开发环境的这一环境就被劝退了,看到有个HUAWEI-LiteOS-Studio这环境比较简单,但是已经很长时间没用更新了,按照教程就是编译不能成功。对于新手来说甚是苦恼。
我说一下我遇到这个问题的解决思路供大家参考,如果遇到其他的问题可以触类旁通。
1.发现编译出错的时候
Failed building build\build_tmp\scripts\system_config.ld: AttributeError : 'SconsEnvCfg' object has no attribute 'nv_cfg_name'
意思是nv_cfg_name这个参数没有属性。
2.查看工程的SConstruct文件。
在192行,发现nv_cfg_name是env_cfg的一个成员。
"""NV image builder
"""
def nvimg_builder(target, source, env):
if os.path.exists(env_cfg.nv_path) is False:
os.makedirs(env_cfg.nv_path)
make_nv_bin(env_cfg.nv_path, env_cfg.target_name, env_cfg.nv_cfg_name)
编译报错是因为在这个时候env_cfg.nv_cfg_name没有赋值。
回到40行,发现env_cfg的参数来源于scons_env_cfg.SconsEnvCfg()
from scripts import scons_env_cfg
from scripts import pkt_builder
from scripts.packet_create import packet_bin
from tools.nvtool.build_nv import make_nv_bin
import shutil
#Init compile parameters
env_cfg = scons_env_cfg.SconsEnvCfg()
是由外部的进行设置。
3.在工程中搜scons_env_cfg文件,。
最后在工程中的build\scripts文件夹下找到文件scons_env_cfg.py。打开之后找cfg_name这样的关键词,正好找到self.nv_cfg_name,
self.nv_src_path = os.path.join('app', 'demo', 'nv')
self.nv_factory_name = 'hi3861_demo_factory.hnv'
self.nv_normal_name = 'hi3861_demo_normal.hnv'
self.nv_cfg_name = 'mss_nvi_db_max.xml'
if scons_usr_bool_option('CONFIG_CE_SUPPORT') == 'y':
self.nv_cfg_name = 'mss_nvi_db.xml'
if scons_usr_bool_option('CONFIG_FCC_SUPPORT') == 'y':
self.nv_cfg_name = 'mss_nvi_db_fcc.xml'
if scons_usr_bool_option('CONFIG_MAX_POWER_SUPPORT') == 'y':
self.nv_cfg_name = 'mss_nvi_db_max.xml'
发现在文中有个bug,如果studio中没用选择三个设置就不会进行对该参数进行赋值。没有去了解之前版本的studio,应该是直接选择的。
4.解决的方法是在三个设置语句之前增加一行默认设置。
self.nv_cfg_name = 'mss_nvi_db_max.xml'
当然可以根据自己的情况进行选择。
5.写到最后其实很多工程师在写代码的时候会疏忽如果这个变量为空的情况,还说这过程中就已经赋值了,怎么可能为空。
|