宅男
分类: LINUX
2015-08-18 10:07:10
关于这些片上调试功能,我不知道为啥arm会将其命名为CoreSight。因为coresight看起来好像指其中的ETM技术,不过这只是一个名字而已。关于coresight在官网上有很多的TRM,>支持->资源文档->CoreSight片上跟踪与调试。
关于coresight,大体可以包括下面的一些模块:
CTI (Cross Trigger Interface)
ETB (Embedded Trace buffer)/ETR (Embedded Trace Router)/ETF (Embedded Trace FIFO)
STM (System Trace Macrocell)
TMC (Trace Memory Controller)
TPIU (Trace Port Interface Unit)
ETM (Embedded Trace Macrocell)
Funnel
Replicator
根据在coresight架构中的作用,这些模块大体可以分为source/link/Sink三种类型。
Source就是指一些信号或者profile/debug数据的来源,比如STM和ETM。
Sink就是指一些可以保持这些从source过来数据的模块,比如最基本的ETB,从buffer这个单词大体可以猜出一二,另外还有ETR,TPIU等等。
讲完了source和sink之后,那么link就是指用于引导从source到sink过程中的类似于通道作用的模块。当然这些通道的作用各不一样。FUNNEL是用途将来之不同的source的数据合并,而replicator是这些合并之后的数据再一式两份,发送给不同的sink。replicator从这个英文名称中就可以看出端倪。
下面是ARM官方文档中的一张截图,大体可以看出这些不同的模块在整个coresight架构中的作用。
关于coresight的Linux kernel支持,在linux版本中没有默认的支持,QC也在从3.18开始从事一些upstream的工作。在QC的opensource的代码之中,这些代码支持从3.4甚至更早就开始了。在Linux 4.0中加入了一些最基本的支持。
这些代码在4.0中是在driver/coresight目录下面,4.1.5是在drivers/hwtracing/coresight下面,这里面实现了最基本的对于funnel/replicator/etm/tpiu/tmc等等的支持。
很可惜的是,这里面并没有对于STM的支持。 幸好高通的内核代码是opensource的,所以都可以从上下载到。