ETMv4 sysfs Linux 驅動程式程式設計參考。¶
- 作者:
Mike Leach <mike.leach@linaro.org>
- 日期:
2019年10月11日
現有 ETMv4 驅動程式文件的補充。
Sysfs 檔案和目錄¶
根目錄: /sys/bus/coresight/devices/etm<N>
以下段落解釋了 sysfs 檔案與其影響的 ETMv4 暫存器之間的關聯。請注意,暫存器名稱不帶“TRC”字首。
- 檔案:
mode(rw)- 跟蹤暫存器:
{CONFIGR + 其他}
- 注意事項:
位選擇跟蹤功能。參見下面的“mode”部分。此位將導致跟蹤配置和其他暫存器進行相應的程式設計,以啟用請求的功能。
- 語法 & 示例:
echo bitfield > mode位欄位最多 32 位,用於設定跟蹤功能。
- 示例:
$> echo 0x012 > mode
- 檔案:
reset(wo)- 跟蹤暫存器:
所有
- 注意事項:
重置所有程式設計,不跟蹤任何內容/未程式設計任何邏輯。
- 語法:
echo 1 > reset
- 檔案:
enable_source(wo)- 跟蹤暫存器:
PRGCTLR, 所有硬體暫存器。
- 注意事項:
> 0 : 使用驅動程式中當前持有的值對硬體進行程式設計並啟用跟蹤。
= 0 : 停用跟蹤硬體。
- 語法:
echo 1 > enable_source
- 檔案:
cpu(ro)- 跟蹤暫存器:
無。
- 注意事項:
此 ETM 連線的 CPU ID。
- 示例:
$> cat cpu$> 0
- 檔案:
ts_source(ro)- 跟蹤暫存器:
無。
- 注意事項:
當 FEAT_TRF 實現時,用於跟蹤會話的 TRFCR_ELx.TS 值。否則 -1 表示未知時間源。檢查 trcidr0.tssize 以檢視是否有全域性時間戳可用。
- 示例:
$> cat ts_source$> 1
- 檔案:
addr_idx(rw)- 跟蹤暫存器:
無。
- 注意事項:
用於索引地址比較器和範圍功能的虛擬暫存器。為範圍中的第一對設定索引。
- 語法:
echo idx > addr_idx其中 idx < nr_addr_cmp x 2
- 檔案:
addr_range(rw)- 跟蹤暫存器:
ACVR[idx, idx+1], VIIECTLR
- 注意事項:
由 addr_idx 選擇的地址對,用於一個範圍。根據可選引數決定包含/排除,如果省略則使用當前的“mode”設定。在控制暫存器中選擇比較器範圍。如果索引是奇數值,則報錯。
- 依賴:
mode, addr_idx- 語法:
echo addr1 addr2 [exclude] > addr_range其中 addr1 和 addr2 定義範圍,且 addr1 < addr2。
可選排除值:
0 表示包含
1 表示排除。
- 示例:
$> echo 0x0000 0x2000 0 > addr_range
- 檔案:
addr_single(rw)- 跟蹤暫存器:
ACVR[idx]
- 注意事項:
根據 addr_idx 設定單個地址比較器。當地址比較器用作事件生成邏輯的一部分時使用此功能。
- 依賴:
addr_idx- 語法:
echo addr1 > addr_single
- 檔案:
addr_start(rw)- 跟蹤暫存器:
ACVR[idx], VISSCTLR
- 注意事項:
根據 addr_idx 設定跟蹤起始地址比較器。在控制暫存器中選擇比較器。
- 依賴:
addr_idx- 語法:
echo addr1 > addr_start
- 檔案:
addr_stop(rw)- 跟蹤暫存器:
ACVR[idx], VISSCTLR
- 注意事項:
根據 addr_idx 設定跟蹤停止地址比較器。在控制暫存器中選擇比較器。
- 依賴:
addr_idx- 語法:
echo addr1 > addr_stop
- 檔案:
addr_context(rw)- 跟蹤暫存器:
ACATR[idx,{6:4}]
- 注意事項:
將上下文 ID 比較器連結到地址比較器 addr_idx
- 依賴:
addr_idx- 語法:
echo ctxt_idx > addr_context其中 ctxt_idx 是連結的上下文 ID / vmid 比較器的索引。
- 檔案:
addr_ctxtype(rw)- 跟蹤暫存器:
ACATR[idx,{3:2}]
- 注意事項:
輸入值字串。為連結的上下文 ID 比較器設定型別。
- 依賴:
addr_idx- 語法:
echo type > addr_ctxtype型別為 {all, vmid, ctxid, none} 之一
- 示例:
$> echo ctxid > addr_ctxtype
- 檔案:
addr_exlevel_s_ns(rw)- 跟蹤暫存器:
ACATR[idx,{14:8}]
- 注意事項:
為所選地址比較器設定 ELx 安全和非安全匹配位
- 依賴:
addr_idx- 語法:
echo val > addr_exlevel_s_nsval 是一個 7 位值,用於排除異常級別。輸入值移位到暫存器中的正確位。
- 示例:
$> echo 0x4F > addr_exlevel_s_ns
- 檔案:
addr_instdatatype(rw)- 跟蹤暫存器:
ACATR[idx,{1:0}]
- 注意事項:
設定用於匹配的比較器地址型別。驅動程式僅支援設定指令地址型別。
- 依賴:
addr_idx
- 檔案:
addr_cmp_view(ro)- 跟蹤暫存器:
ACVR[idx, idx+1], ACATR[idx], VIIECTLR
- 注意事項:
讀取當前選定的地址比較器。如果屬於地址範圍,則顯示兩個地址。
- 依賴:
addr_idx- 語法:
cat addr_cmp_view- 示例:
$> cat addr_cmp_viewaddr_cmp[0] range 0x0 0xffffffffffffffff include ctrl(0x4b00)
- 檔案:
nr_addr_cmp(ro)- 跟蹤暫存器:
來自 IDR4
- 注意事項:
地址比較器對的數量
- 檔案:
sshot_idx(rw)- 跟蹤暫存器:
無
- 注意事項:
選擇單次觸發暫存器集。
- 檔案:
sshot_ctrl(rw)- 跟蹤暫存器:
SSCCR[idx]
- 注意事項:
訪問單次觸發比較器控制暫存器。
- 依賴:
sshot_idx- 語法:
echo val > sshot_ctrl將 val 寫入選定的控制暫存器。
- 檔案:
sshot_status(ro)- 跟蹤暫存器:
SSCSR[idx]
- 注意事項:
讀取單次觸發比較器狀態暫存器
- 依賴:
sshot_idx- 語法:
cat sshot_status讀取狀態。
- 示例:
$> cat sshot_status0x1
- 檔案:
sshot_pe_ctrl(rw)- 跟蹤暫存器:
SSPCICR[idx]
- 注意事項:
訪問單次觸發 PE 比較器輸入控制暫存器。
- 依賴:
sshot_idx- 語法:
echo val > sshot_pe_ctrl將 val 寫入選定的控制暫存器。
- 檔案:
ns_exlevel_vinst(rw)- 跟蹤暫存器:
VICTLR{23:20}
- 注意事項:
程式設計非安全異常級別過濾器。設定/清除 NS 異常過濾器位。設定為“1”將從異常級別排除跟蹤。
- 語法:
echo bitfield > ns_exlevel_viinst其中 bitfield 包含用於設定 EL0 到 EL2 的位。
- 示例:
%> echo 0x4 > ns_exlevel_viinst排除 EL2 NS 跟蹤。
- 檔案:
vinst_pe_cmp_start_stop(rw)- 跟蹤暫存器:
VIPCSSCTLR
- 注意事項:
訪問 PE 啟動停止比較器輸入控制暫存器
- 檔案:
bb_ctrl(rw)- 跟蹤暫存器:
BBCTLR
- 注意事項:
定義分支廣播將操作的範圍。預設值 (0x0) 為所有地址。
- 依賴:
BB 已啟用。
- 檔案:
cyc_threshold(rw)- 跟蹤暫存器:
CCCTLR
- 注意事項:
設定將發出迴圈計數的閾值。如果嘗試設定低於 IDR3 中定義的最小值,或者掩碼寬度超出有效位數,則報錯。
- 依賴:
CC 已啟用。
- 檔案:
syncfreq(rw)- 跟蹤暫存器:
SYNCPR
- 注意事項:
設定跟蹤同步週期。2 的冪次方值,0(關閉)或 8-20。驅動程式預設為 12(每 4096 位元組)。
- 檔案:
cntr_idx(rw)- 跟蹤暫存器:
無
- 注意事項:
選擇要訪問的計數器
- 語法:
echo idx > cntr_idx其中 idx < nr_cntr
- 檔案:
cntr_ctrl(rw)- 跟蹤暫存器:
CNTCTLR[idx]
- 注意事項:
設定計數器控制值。
- 依賴:
cntr_idx- 語法:
echo val > cntr_ctrl其中 val 符合 ETMv4 規範。
- 檔案:
cntrldvr(rw)- 跟蹤暫存器:
CNTRLDVR[idx]
- 注意事項:
設定計數器過載值。
- 依賴:
cntr_idx- 語法:
echo val > cntrldvr其中 val 符合 ETMv4 規範。
- 檔案:
nr_cntr(ro)- 跟蹤暫存器:
來自 IDR5
- 注意事項:
已實現的計數器數量。
- 檔案:
ctxid_idx(rw)- 跟蹤暫存器:
無
- 注意事項:
選擇要訪問的上下文 ID 比較器。
- 語法:
echo idx > ctxid_idx其中 idx < numcidc
- 檔案:
ctxid_pid(rw)- 跟蹤暫存器:
CIDCVR[idx]
- 注意事項:
設定上下文 ID 比較器值。
- 依賴:
ctxid_idx
- 檔案:
ctxid_masks(rw)- 跟蹤暫存器:
CIDCCTLR0, CIDCCTLR1, CIDCVR<0-7>
- 注意事項:
一對值,用於設定 1-8 個上下文 ID 比較器的位元組掩碼。自動將掩碼位元組清除為 CID 值暫存器中的 0。
- 語法:
echo m3m2m1m0 [m7m6m5m4] > ctxid_masks由掩碼位元組組成的 32 位值,其中 mN 表示上下文 ID 比較器 N 的位元組掩碼值。
對於上下文 ID 比較器少於 4 個的系統,不需要第二個值。
- 檔案:
numcidc(ro)- 跟蹤暫存器:
來自 IDR4
- 注意事項:
上下文 ID 比較器的數量
- 檔案:
vmid_idx(rw)- 跟蹤暫存器:
無
- 注意事項:
選擇要訪問的 VM ID 比較器。
- 語法:
echo idx > vmid_idx其中 idx < numvmidc
- 檔案:
vmid_val(rw)- 跟蹤暫存器:
VMIDCVR[idx]
- 注意事項:
設定 VM ID 比較器值。
- 依賴:
vmid_idx
- 檔案:
vmid_masks(rw)- 跟蹤暫存器:
VMIDCCTLR0, VMIDCCTLR1, VMIDCVR<0-7>
- 注意事項:
一對值,用於設定 1-8 個 VM ID 比較器的位元組掩碼。自動將掩碼位元組清除為 VMID 值暫存器中的 0。
- 語法:
echo m3m2m1m0 [m7m6m5m4] > vmid_masks其中 mN 表示 VMID 比較器 N 的位元組掩碼值。對於 VMID 比較器少於 4 個的系統,不需要第二個值。
- 檔案:
numvmidc(ro)- 跟蹤暫存器:
來自 IDR4
- 注意事項:
VMID 比較器的數量
- 檔案:
res_idx(rw)- 跟蹤暫存器:
無。
- 注意事項:
選擇要訪問的資源選擇器控制。必須是 2 或更高,因為選擇器 0 和 1 是硬連線的。
- 語法:
echo idx > res_idx其中 2 <= idx < nr_resource x 2
- 檔案:
res_ctrl(rw)- 跟蹤暫存器:
RSCTLR[idx]
- 注意事項:
設定資源選擇器控制值。值符合 ETMv4 規範。
- 依賴:
res_idx- 語法:
echo val > res_cntr其中 val 符合 ETMv4 規範。
- 檔案:
nr_resource(ro)- 跟蹤暫存器:
來自 IDR4
- 注意事項:
資源選擇器對的數量
- 檔案:
event(rw)- 跟蹤暫存器:
EVENTCTRL0R
- 注意事項:
設定最多 4 個已實現的事件欄位。
- 語法:
echo ev3ev2ev1ev0 > event其中 evN 是一個 8 位事件欄位。最多 4 個事件欄位組成 32 位輸入值。有效欄位的數量取決於實現,在 IDR0 中定義。
- 檔案:
event_instren(rw)- 跟蹤暫存器:
EVENTCTRL1R
- 注意事項:
選擇將事件包插入跟蹤流的事件。
- 依賴:
EVENTCTRL0R
- 語法:
echo bitfield > event_instren其中 bitfield 最多為 4 位,具體取決於事件欄位的數量。
- 檔案:
event_ts(rw)- 跟蹤暫存器:
TSCTLR
- 注意事項:
設定將生成時間戳請求的事件。
- 依賴:
TS 啟用- 語法:
echo evfield > event_ts其中 evfield 是一個 8 位事件選擇器。
- 檔案:
seq_idx(rw)- 跟蹤暫存器:
無
- 注意事項:
序列器事件暫存器選擇 - 0 到 2
- 檔案:
seq_state(rw)- 跟蹤暫存器:
SEQSTR
- 注意事項:
序列器當前狀態 - 0 到 3。
- 檔案:
seq_event(rw)- 跟蹤暫存器:
SEQEVR[idx]
- 注意事項:
狀態轉換事件暫存器
- 依賴:
seq_idx- 語法:
echo evBevF > seq_event其中 evBevF 是由兩個事件選擇器組成的 16 位值,
evB : 返回
evF : 前進。
- 檔案:
seq_reset_event(rw)- 跟蹤暫存器:
SEQRSTEVR
- 注意事項:
序列器復位事件
- 語法:
echo evfield > seq_reset_event其中 evfield 是一個 8 位事件選擇器。
- 檔案:
nrseqstate(ro)- 跟蹤暫存器:
來自 IDR5
- 注意事項:
序列器狀態的數量(0 或 4)
- 檔案:
nr_pe_cmp(ro)- 跟蹤暫存器:
來自 IDR4
- 注意事項:
PE 比較器輸入的數量
- 檔案:
nr_ext_inp(ro)- 跟蹤暫存器:
來自 IDR5
- 注意事項:
外部輸入的數量
- 檔案:
nr_ss_cmp(ro)- 跟蹤暫存器:
來自 IDR4
- 注意事項:
單次觸發控制暫存器的數量
注意: 在程式設計任何地址比較器時,驅動程式會用所使用的型別標記比較器——即 RANGE、SINGLE、START、STOP。一旦設定了此標記,則只能使用用於程式設計它的相同 sysfs 檔案/型別來更改值。
因此
% echo 0 > addr_idx ; select address comparator 0
% echo 0x1000 0x5000 0 > addr_range ; set address range on comparators 0, 1.
% echo 0x2000 > addr_start ; error as comparator 0 is a range comparator
% echo 2 > addr_idx ; select address comparator 2
% echo 0x2000 > addr_start ; this is OK as comparator 2 is unused.
% echo 0x3000 > addr_stop ; error as comparator 2 set as start address.
% echo 2 > addr_idx ; select address comparator 3
% echo 0x3000 > addr_stop ; this is OK
要移除所有比較器(以及所有其他硬體)上的程式設計,請使用 reset 引數。
% echo 1 > reset
“mode”sysfs 引數。¶
這是一個位欄位選擇引數,用於設定 ETM 的整體跟蹤模式。下表描述了這些位,使用了驅動程式原始檔中的定義,並附帶了這些位所代表的功能的描述。許多功能是可選的,因此取決於硬體中的實現。
位分配如下所示:
- 位 (0)
ETM_MODE_EXCLUDE
- 描述
這是設定地址範圍時包含/排除功能的預設值。設定為 1 表示排除範圍。當設定 mode 引數時,此值將應用於當前索引的地址範圍。
- 位 (4)
ETM_MODE_BB
- 描述
如果硬體支援 [IDR0],則設定為啟用分支廣播。此功能的主要用途是當代碼在執行時動態修補時,可能無法僅使用條件分支來重建完整的程式流。
Perf 目前不支援向解碼器提供修改後的二進位制檔案,因此此功能僅用於除錯目的或與第三方工具一起使用。
選擇此選項將導致生成的跟蹤量顯著增加——可能存在溢位風險,或覆蓋的指令更少。請注意,此選項還會覆蓋 ETM_MODE_RETURNSTACK 的任何設定,因此當分支廣播範圍與返回堆疊範圍重疊時,該範圍將無法使用返回堆疊。
- 位 (5)
ETMv4_MODE_CYCACC
- 描述
如果支援 [IDR0],則設定為啟用週期精確跟蹤。
- 位 (6)
ETMv4_MODE_CTXID
- 描述
如果硬體支援 [IDR2],則設定為啟用上下文 ID 跟蹤。
- 位 (7)
ETM_MODE_VMID
- 描述
如果支援 [IDR2],則設定為啟用虛擬機器 ID 跟蹤。
- 位 (11)
ETMv4_MODE_TIMESTAMP
- 描述
如果支援 [IDR0],則設定為啟用時間戳生成。
- 位 (12)
ETM_MODE_RETURNSTACK
- 描述
如果支援 [IDR0],則設定為啟用跟蹤返回堆疊使用。
- 位 (13-14)
ETM_MODE_QELEM(val)
- 描述
如果 ETM [IDR0] 實現了 Q 元素支援,則“val”決定了啟用的 Q 元素支援級別。
- 位 (19)
ETM_MODE_ATB_TRIGGER
- 描述
如果支援 [IDR5],則設定為啟用事件控制暫存器 [EVENTCTLR1] 中的 ATBTRIGGER 位。
- 位 (20)
ETM_MODE_LPOVERRIDE
- 描述
如果支援 [IDR5],則設定為啟用事件控制暫存器 [EVENTCTLR1] 中的 LPOVERRIDE 位。
- 位 (21)
ETM_MODE_ISTALL_EN
- 描述
設定為啟用停頓控制暫存器 [STALLCTLR] 中的 ISTALL 位。
- 位 (23)
ETM_MODE_INSTPRIO
- 描述
如果支援 [IDR0],則設定為啟用停頓控制暫存器 [STALLCTLR] 中的 INSTPRIORITY 位。
- 位 (24)
ETM_MODE_NOOVERFLOW
- 描述
如果支援 [IDR3],則設定為啟用停頓控制暫存器 [STALLCTLR] 中的 NOOVERFLOW 位。
- 位 (25)
ETM_MODE_TRACE_RESET
- 描述
如果支援 [IDR3],則設定為啟用 viewinst 控制暫存器 [VICTLR] 中的 TRCRESET 位。
- 位 (26)
ETM_MODE_TRACE_ERR
- 描述
設定為啟用 viewinst 控制暫存器 [VICTLR] 中的 TRCCTRL 位。
- 位 (27)
ETM_MODE_VIEWINST_STARTSTOP
- 描述
設定 viewinst 控制暫存器 [VICTLR] 中 ViewInst 啟動/停止邏輯的初始狀態值。
- 位 (30)
ETM_MODE_EXCL_KERN
- 描述
設定預設跟蹤配置以排除核心模式跟蹤(參見注 a)
- 位 (31)
ETM_MODE_EXCL_USER
- 描述
設定預設跟蹤配置以排除使用者空間跟蹤(參見注 a)
注 a) 啟動時,ETM 被程式設計為使用地址範圍比較器 0 跟蹤完整的地址空間。 “mode”位的 30 / 31 修改此設定,以在地址範圍比較器中設定使用者空間 (EL0) 或核心空間 (EL1) 中 NS 狀態的 EL 排除位。(預設設定排除所有安全 EL 和 NS EL2)
一旦使用了 reset 引數和/或實現了自定義程式設計,使用這些位將以相同的方式設定地址比較器 0 的 EL 位。
注 b) 位 2-3、8-10、15-16、18、22 控制僅適用於資料跟蹤的功能。由於 ETMv4 中架構上禁止 A-profile 資料跟蹤,此處已省略。可能的用途是當核心支援作為異構系統一部分的 R 或 M profile 基礎設施的控制時。
位 17、28-29 未使用。