当前位置: 首页 > news >正文

Linux下编译海思WS63 SDK全攻略

目录

引言

准备工作

编译方法

UTF-8问题的解决

结束语


引言

一般使用海思的WS63 SDK都是在Windows进行编译,以前在我博客也介绍过。不过以我多年的经验,总会有学生的电脑因为各种原因无法编译成功,所以还需要试试Linux下编译的方法作为备份推荐给学生。我基本上是按照官方文档做的(docs/zh-CN/software/SDK开发环境搭建用户指南/WS63V100 SDK开发环境搭建 用户指南.md · HiSpark/fbb_ws63 - Gitee.com),记录了几个自己遇到的问题。

准备工作

Linux系统推荐使用Ubuntu 20.04及以上版本,Shell使用bash ,SDK使用Cmake编译(3.14.1以上),编译工具还包括Python(3.8.0以上)等。这里我使用的是华为云免费提供的开发者云电脑。海思的WS63 SDK体积较小,所以使用这个云电脑也是可以的,而且默认的云电脑的环境也是符合要求的。

安装Kconfiglib 14.1.0+,使用命令“sudo pip install kconfiglib”(需root/sudo权限安装)。

安装pycparser,使用pip install pycparser进行安装。

编译方法

使用下面的命令下载代码:

git clone https://gitee.com/HiSpark/fbb_ws63.git

在src目录下执行“python3 build.py”指令运行脚本编译,即可编译出对应的SDK程序。编译命令列表如表1所示。

表 1 build.sh参数列表

参数

示例

说明

python3 build.py ws63-liteos-app

启动ws63-liteos-app目标的增量编译。

-c

python3 build.py -c ws63-liteos-app

启动ws63-liteos-app目标的全量编译。

menuconfig

python3 build.py ws63-liteos-app menuconfig

启动ws63-liteos-app目标的menuconfig图形配置界面。

表 2 编译目标介绍

编译目标

说明

python3 build.py -c ws63-liteos-app

app版本编译目标(自动包含flashboot编译)

python3 build.py -c ws63-flashboot

flashboot镜像编译目标

python3 build.py -c ws63-liteos-xts

openharmony xts认证版本编译目标(详情请参考“鸿蒙XTS认证指导书”)

python3 build.py -c ws63-liteos-app-iot

Harmony connect版本编译目标(详情请参考“HiLink编译使用指南”)

python3 build.py -c ws63-liteos-hilink

Harmony connect独立升级版本编译目标(详情请参考“HiLink编译使用指南”)

编译得到的烧录镜像在“output/ws63/fwpkg/ws63-liteos-app”目录下(如表3所示)。

表 3 烧录镜像

文件名

说明

ws63-liteos-app_all.fwpkg

空片烧录时,需要烧录此文件。包含了所有的需要升级的内容。包含:root_loaderboot_sign.bin、root_params.bin、flashboot_sign.bin、ws63_all_nv.bin、ws63-liteos-app-sign.bin。

各文件介绍如下:

root_loaderboot_sign.bin:loaderboot的镜像文件。升级开始时,芯片中固化的romboot会接收此镜像文件,加载到内存并运行,loadboot负责接收后续的镜像文件。注:此镜像只在升级阶段放在RAM中运行,并不存放在flash中。

root_params.bin:flash分区信息的镜像文件。分区信息供romboot、loaderboot和flashboot使用。

flashboot_sign.bin:flashboot的镜像文件。

ws63_all_nv.bin:参数区的镜像文件。

ws63-liteos-app-sign.bin:版本镜像文件。

ws63-liteos-app_load_only.fwpkg

版本升级打包文件,包含:root_loaderboot_sign.bin、ws63-liteos-app-sign.bin。不包含flashboot相关内容。

当芯片烧录过“ws63-liteos-app_all.fwpkg”镜像后,如果后续修改不涉及root_params、flash_boot、nv的修改,则可以用此文件升级。

注:编译得到的中间文件在“output/ws63/acore/ws63-liteos-app”目录下。

UTF-8问题的解决

按照上述步骤编译的时候,程序快要编译结束时遇到一个问题:

../../../../../output/ws63/acore/boot_bin/ws63-liteos-mfg.bin  generated successfully!!![100%] Built target WS63_GENERAT_SIGNBIN[100%] Built target GENERAT_ASM[100%] Built target GENERAT_LST[100%] MEM_LIMIT[100%] Built target GENERAT_MEM_LIMITTraceback (most recent call last):File "/home/developer/fbb_ws63/src/build/script/utils/mem_stats.py", line 716, in <module>main(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])File "/home/developer/fbb_ws63/src/build/script/utils/mem_stats.py", line 704, in mainlst_file.process()File "/home/developer/fbb_ws63/src/build/script/utils/mem_stats.py", line 394, in processsection = self.get_first_section()File "/home/developer/fbb_ws63/src/build/script/utils/mem_stats.py", line 337, in get_first_sectionif(self.find_file_sections()):File "/home/developer/fbb_ws63/src/build/script/utils/mem_stats.py", line 346, in find_file_sectionsfile_line = self.file.readline()File "/usr/lib/python3.10/codecs.py", line 322, in decode(result, consumed) = self._buffer_decode(data, self.errors, final)UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 4093: invalid start bytemake[2]: *** [CMakeFiles/GENERAT_MEM.dir/build.make:71:CMakeFiles/GENERAT_MEM] 错误 1make[1]: *** [CMakeFiles/Makefile2:5080:CMakeFiles/GENERAT_MEM.dir/all] 错误 2make: *** [Makefile:91:all] 错误 2######### Build target:ws63_liteos_app failed

这个问题是因为Python脚本在处理ws63-liteos-app.lst文件时遇到非标准的Unicode字符,所以报错了。要解决这个问题,可以修改一下 /home/developer/fbb_ws63/src/build/script/utils/mem_stats.py脚本,在696行,   在“with open(lst_file_name, "r") as fp_lst_file_name, open(”加上“,  errors='ignore'”,意思是遇到非法字符就忽略,从而避免了报错的发生。

这样就可以最终完成编译了。

 经过实际烧写测试,程序可以正常运行。 

结束语

至此,完成了Linux下的编译操作,作为一个备选项,可以在下学期的课程中推荐给学生。


文章转载自:
http://actaeon.isnyv.cn
http://balustrade.isnyv.cn
http://across.isnyv.cn
http://anticodon.isnyv.cn
http://canebrake.isnyv.cn
http://blench.isnyv.cn
http://canalage.isnyv.cn
http://abashment.isnyv.cn
http://bumf.isnyv.cn
http://bromide.isnyv.cn
http://bouzouki.isnyv.cn
http://agglutinant.isnyv.cn
http://adularescent.isnyv.cn
http://bizarre.isnyv.cn
http://bahadur.isnyv.cn
http://burrawang.isnyv.cn
http://aesthetical.isnyv.cn
http://anemogram.isnyv.cn
http://automatise.isnyv.cn
http://bulletheaded.isnyv.cn
http://breviary.isnyv.cn
http://ancestress.isnyv.cn
http://archesporial.isnyv.cn
http://amido.isnyv.cn
http://centaurus.isnyv.cn
http://brocaded.isnyv.cn
http://begob.isnyv.cn
http://cholecystagogue.isnyv.cn
http://apiarian.isnyv.cn
http://calorimetry.isnyv.cn
http://www.dtcms.com/a/280873.html

相关文章:

  • 数据结构:线性表
  • 服务器端安全检测与防御技术概述
  • BGP机房和传统机房之间都有哪些区别?
  • Sentinel热点参数限流完整示例实现
  • 力扣面试150题--排序链表
  • WebApplicationType.REACTIVE 的webSocket 多实例问题处理
  • MySQL数据库----约束
  • C# 构建动态查询表达式(含查询、排序、分页)
  • C语言基础第6天:分支循环
  • Ubuntu24 辅助系统-屏幕键盘的back按键在网页文本框删除不正常的问题解决方法
  • CentOS7 Docker安装MySQL全过程,包括配置远程连接账户
  • fastApi连接数据库
  • 如何正确分配及设置香港站群服务器IP?
  • 深入解析 Java AQS (AbstractQueuedSynchronizer) 的实现原理
  • LeetCode 3136.有效单词:遍历模拟
  • [实战] 基8 FFT/IFFT算法原理与实现(完整C代码)
  • 【每天一个知识点】多模态信息(Multimodal Information)
  • 【知识扫盲】tokenizer.json中的vocab和merges是什么?
  • 【机器学习】第二章 Python入门
  • 【Unity】MiniGame编辑器小游戏(十四)基础支持模块(游戏窗口、游戏对象、物理系统、动画系统、射线检测)
  • 数学中的教学思想
  • MySQL 8.0 OCP 1Z0-908 题目解析(24)
  • P3842 [TJOI2007] 线段
  • Sharding-JDBC 分布式事务实战指南:XA/Seata 方案解析
  • sqli-labs靶场通关笔记:第18-19关 HTTP头部注入
  • 【C++】初识C++(1)
  • 课题学习笔记1——文本问答与信息抽取关键技术研究论文阅读(用于无结构化文本问答的文本生成技术)
  • Java 大视界 -- Java 大数据机器学习模型在金融风险传染路径分析与防控策略制定中的应用(347)
  • QT——QList的详细讲解
  • Redis的下载安装+基础操作+redis客户端的安装