Bringup开发指导FAQ

FAQ001: 源码获取

问:平台的代码有没有公开,比如ota,诊断?

答:有一部分代码不开放,最终哪些要开放,请联系商务.


问:DDS是已经内置在SDK里了吗?有基本应用sample提供吗?

答:这个没有,我们基础的 BSP 不包含这部分。


FAQ002: 编译架构

问:编译架构怎么和android比较像?

答:市场上熟悉Android开发环境的开发者比较多,我们在开发环境构建中也借鉴了Android的方式。


问:对于一个project, 编译出来的dtb文件为什么那多?project和dtb怎样对应?

答:升级包,通过选择不同dtb适配不同的硬件形态。dtb的名字中含有参考支持硬件的名称,比如hobot-j5-dvb.dtb,是dvb硬件,hobot-j5-matrix-B.dtb,是matix5硬件


问:编译是用makefile还是cmake?uboot的配置如何设置?

答:主要使用makefile,部分库使用cmake;uboot配置可以参考《J5 Bringup开发指导培训–最小系统移植》中uboot移植调试章节


问:分区表大小位置用户可以更改吗?

答: 在分区配置文件中除了spl及其之前分区位置、大小已固定,其他分区位置、大小可以修改


问:emmc 0~33 sector有被使用吗?

答: emmc 0扇区用作存放binfo,1扇区存放gpt table,2~33为分区表具体信息,大小、位置固定


问:uboot的env与编译系统的env.sh关系?

答: uboot的env与编译系统的env.sh没有强的关联性,uboot的env是uboot下的环境变量,默认环境变量定义在uboot/include/configs/j5.h中;编译系统的*env.sh主要是用作声明编译过程中使用的宏定义


问:分区表的编译和烧写

答: 分区配置文件会在编译过程中编译成对应的二进制文件,存储在emmc的前33扇区,如debug-gpt.conf对应的镜像文件就是gpt_main-secure.img


FAQ003: 程序升级

问:只升级app分区和升级app 产品线有区别吗?

答:升级app.zip时升级命令加-s(otaupdate app /userdata/app_signed.zip -s)就是升级J5这边的app分区,不加就是升级产品线 application,升级程序实际调用产线app.zip里面的app_update.sh脚本进行实际的升级。


问:安全岛的包是不是在all in one 里面

答:是的,all in one 里面升级需要的所有的包,包括安全岛的包


问:指定分区的烧写,会不会烧录该分区前的分区镜像

答: fastboot命令可以对某一单个分区镜像烧写,不会烧写其他分区


问:空片的烧写与启动?

答: 空片可以有两种方式进行烧写

1.通过烧片器烧写后,再进行贴片

2.通过uart下载启动到uboot所需要的镜像(spl、mcore、ddrc、bl31、uboot、env),启动到uboot后再进行fastboot烧录


FAQ004: 产品特性

问:dvb和matrix5有什么区别?

答:DVB板一般就一个J5,matrix5板可能会有多个J5,功能会更强一些。


问:目前J5可以支持哪些应用场景?

答:目前,我们主要针对驾驶这边的应用场景,也涉及座舱。具体的可以找你们对应的接口人,从产品维度上,给一些输出。


FAQ005: 硬件特性

问:除了A55还有什么核?

答: 还有mcore用作功能安全,vdsp作为辅助运算


问:波特率修改?

答: 目前只支持115200与921600两种波特率,可以通过 strappin修改,其中推荐使用921600,不建议使用115200;由于目前bootrom只支持115200/921600两种波特率,其他类型波特率会在开机出现乱码,且其他波特率支持需要修改软件镜像中clk及其他相关部分,所以当前不支持修改为其他类型波特率


FAQ006: 安全特性

问:安全岛有两个M核,可以将网关的功能放里面一起跑吗?

答:我们安全岛目前主要的职责是做安全监控,硬件设计不取代外部的MCU功能,所以是不支持将网关的功能放里面一起跑的。目前来说我们暂时没打算开放这个安全岛,最主要还是做功能安全。


问:secure key签名 key是默认的还是可以换成客户的

答:有部分镜像是地平线签的,这部分镜像是我们签完后release 出,剩下的都是客户签的。


问:Safety Island 有哪些监控, 能否详细介绍

答: 会通过FCHM监控IP的硬件故障,会通过与acore的核间通信监控acore的软件故障,会通过pvt模块监控系统的电压温度。


问:J5支持TrustZone吗?安全域运行的OS对外开放吗?能够支持客户自己做安全应用的开发?

答:目前未对外开放,安全域内建了几个常用的加解密funtion,可通过Kernel TEE driver进行访问;如果客户要做安全应用的开发可以与地平线做协同开发。


问:安全启动使用的验签和解密key存放在哪里?如果客户产品需要在BL31和SPL中更换自己的key,如何修改定制?

答:验签和解密root key存放在efuse里面,其他Key都是逐级验签和解密,这些key都分别保存在各级Image中;如果客户需要进行定制的话,请与地平线商务联系看能否支持;


FAQ007: 方案设计

问:现有车型上,比如用的是8937平台,如想升级加入J5的自动解决方案,有没有相关的参考方案?

答:可以找销服询问有没有参考方案,目前我们基础软件里面是不包含外部方案介绍的。


问:在你们的参考方案里面什么情况下建议加入autosar模块?还是建议放在网关MCU里面

答:现在mcore 能力有限,所以说没有跑 autosar ,它的算力和存储都比较小,所以它的主要功能就是监控J5 的公共安全的。车上需要一个单独mcu跑autosar。


问: 用户态相关的API是封装成库的形式,还是内核驱动上的接口?是否开源呢?

答:内核驱动通过用户态封装库的形式对外提供API。大部分用户态的库是开源的, 少部分未开源。


FAQ008: 软件特性

问:请问能否分享一下软件的架构文档

答:我们整个架构已经在《J5 Bringup开发指导培训 – 环境搭建》体现了。有些细节模块,比如说 vio ,会在讲对应模块的时候体现。


问:芯片各个核的启动顺序是什么样的

答:Acore spl先启动,然后加载mcore,然后加载BL31, UBOOT, boot image,system/app image;系统跑起来后在用户态加载VDSP软件;


问:dsp和M核有独立的操作系统吗

答:mcore 上面的是一个 baremetal ,它主要是做一些安全监控的。 vdsp 里面是有对应OS 。


问:j5启动流程,是Mcore启动Acore,还是Mcore与Acore启动是独立的, bringup 有文档介绍吗?

答:这个j5启动流程参考文档《J5 Bringup开发指导培训 – 最小系统移植》,先启动Acore,然后Acore的spl去启动M核。


问:kernel和应用程序分别运行在哪个异常等级(EL)

答:kernel可以执行在EL2或者EL1,应用程序只能执行在EL0,目前J5 kernel运行在EL2上。


问:J5 Linux能够支持arch32应用程序的执行吗?

答:排除依赖库的问题,可以支持的


问: uboot里面可以配置LPWM模块么?

答:还不能,uboot下面暂时无lpwm驱动


FAQ009: 系统启动

问:kernel移植与调试中的dtb根据503 513确定board_type,请问这个503和513是指什么?

答: 指在uboot中,通过VS0_IN1及VS1_IN5确定的单板类型,具体确认方法请参考J5 Bringup开发指导培训–最小系统移植中uboot移植调试章节,由该board_type加载对应的dtb


问:启动过程中,为啥要切换到AArch64 EL3 state呢?

答: rom code启动就处于EL3 state,当前uboot及kernel工作在EL2 stat中


问:问一下,uboot在el3运行,kernel在el1运行,uboot启动kernel如何传递过去dts地址?

答: uboot与kernel都在el2中运行,通过x0寄存器通知kernel加载dtb的位置


问:spl的加载是怎样的?

答: spl是由rom code加载,通过strap pin获取当前启动模式后,从对应启动模式的固定位置读取、校验


问:dsp是怎么加载的?

答: dsp的加载分两个步骤,1.设置名称,2.加载firmware

设置FW名称:

echo vdsp0 > /sys/class/remoteproc/remoteproc1/firmware

VDSP0的FW加载:

echo start > /sys/class/remoteproc/remoteproc1/state

加载FW指令执行后会触发内核将vdsp的firmware加载到指定位置,并启动VDSP核。VDSP 0 和 1核可分别控制。


问:启动失败的监控机制?

答: 启动某镜像分区失败后,会尝试从备分区启动,各分区镜像相同;如果各备份分区都启动失败,则芯片启动失败,会由mcore通知到外部mcu此次启动结果


问:J5启动时,eMMC中任何内容也没有的话,也会输出BootROM log?波特率需要单独配置吗?

答:即使eMMC中没有烧写任何内容,BootROM log也会输出并提示启动失败;波特率不需要单独配置,BootROM会自动检测拨码开关上的pin脚电平,决定使用11520还是921600;


FAQ010: 系统移植

问:把J5 标准平台,比如J5-DVB/J5-MATRIX5/J5-EVM 移植到我们自己的硬件环境的时候, 移植中的指导文档和注意事项有哪些?

答:我们有专门的硬件guide,这个可以通过销服获取。


FAQ011: 调试方法

问:针对Trace32或者ARM DS仿真器,有没有办法阻止用户使用这些工具来访问CPU进行调试?

答:默认是不能连接使用的,需要通过配置CoreSight寄存器才能够打开这些调试端口


问:J5系统软件支持了很多的调试手段,产品发布出去后,从安全角度考虑,怎么能够阻止这些调试信息被用户获取到?

答:这些调试手段主要用于开发阶段,等到了量产阶段就可以将对应的配置选项关闭来禁止这些调试方法。


FAQ012: 日志输出

问:如果Kernel调用BL31的服务时出现死机,此时能够打出BL31 log?如果BL31打出log,使用的串口和Kenrel是同一个吗?BL31的源代码是否对外开放?

答:进入BL31后,Kernel无法输出log,只能通过BL31输出log,Kernel和BL31共同一个串口;目前地平线没有计划开源BL31源代码。


问:如果Kernel和BL31两边同时访问同一串口进行日志输出,是否存在日志混乱的情况出现?

答:不会,关于Kernel调用的BL31 function,不允许在BL31 function中进行串口输出;同一个串口硬件资源,Kernel和BL31同时访问并输出内容,会导致系统挂死。


问:Linux 正常运行起来后,日志会实时地往pstore里面写入吗?如果不是,是按5s或者10s一个周期往pstore里面写入吗?

答:Linux正常运行时,日志会实时向pstore的缓冲区写入。


问:pstore log在哪个阶段进行转储的?在什么情况下会导致转储失败?

答:当设备异常重启(看门狗、内核panic、CE错误)时,进程hobot-log会把日志从pstore的挂载目录(/sys/fs/pstore)转储到日志系统的/userdata/log/pstore目录下。当hobot-log进程未正常运行,会转储失败。


问:基于地平线的Log系统,每个应用的log存放一个文件,还是所有的应用log存放在某一个文件里面?存放的文件有大小限制吗?最大能存储多大?是否支持rotating和分割存储功能?这些功能是基于第三方实现的还是地平线自己开发的?

答:应用log基于安卓alog,支持rotating和分割存储。目前配置是所有应用日志存储到一起,最多200个日志文件,每个日志文件最大2MB,循环覆盖存储。若想单独保存某个应用日志,可以设置log_tag,并通过logcat工具保存日志到单独的文件。


问:如果内核异常panic,但是pstore里面保存的log不足以分析出问题的原因,目前内核还支持其他的coredump功能以及如何使用吗?

答:J5系统软件目前支持ramdump工具,当出现panic时,能够将整个内存的内容转储到SD中,具体的使用方法请咨询FAE获取相应的使用文档。


问:内核支持的kdump与pstore kdump存储区域有关系吗?

答:没有直接关系,目前我们没有采用Linux Kernel Kdump机制进行内存转储,而是采用ramdump进行内存的转储;当内核发生panic时,会将panic的栈回溯log写入到pstore kdump内存区域;内核的Kdump和pstore kdump是两种不一样的内核机制。