說明:
本文講述的是armv8-aarch64、armv9架構(gòu)在設(shè)計(jì)模式上,本文帶有一些個(gè)人的見解,如有不同的見解,可以評(píng)論區(qū)或微信群參與討論。
思考:
1、一個(gè)大的系統(tǒng)里,有多少個(gè)Timer?這些Timer的作用分別是什么?這些Timer有什么區(qū)別?它們的精確度有什么不同嗎?
2、Linux Kernel的Tick使用的是哪個(gè)Timer?watchdog是用的哪個(gè)Timer?
3、一個(gè)ARM Core里有又多少個(gè)Timer?不同軟件系統(tǒng)中的Timer的使用方式有何不同嗎?
4、應(yīng)用程序中的 setitimer()這樣的函數(shù)是否會(huì)調(diào)用到底層程序?
5、應(yīng)用程序要讀取當(dāng)前系統(tǒng)時(shí)間戳的時(shí)候,是否需要調(diào)用到kernel space? 在glibc中是否就可以實(shí)現(xiàn)了?
6、什么是arch timer?什么是SOC Timer、apb timer、memory-mapped timer?
7、對(duì)于arch timer,又分為物理timer和虛擬timer?那么什么時(shí)候使用物理timer,什么時(shí)候使用虛擬timer?為什么?
8、EL1和S-EL1中使用的arch timer是如何隔離的?(這里所說的隔離是指寄存器如何隔離的,中斷如何隔離的)9、EL3 Physical Timer對(duì)應(yīng)的寄存器為什么是xxxEL1, 不應(yīng)該是xxxEL3嗎?
1、系統(tǒng)里面有多少個(gè)Timer?
如上圖所示,在一個(gè)SOC中一定/可能存在:
core timer(也叫arch timer),每個(gè)core中都有這個(gè)Timer
SOC Timer(也叫apb timer、memory-mapped Timer),可能會(huì)有多個(gè),可以存在以下這樣的:
(1) 、一個(gè)專門給Non-secure 使用的timer
(2) 、一個(gè)專門給Secure 使用的timer
(3) 、一個(gè)專門用于特定用途的timer
(4) 、綁定core的Timer,例如8個(gè)timer,固定某個(gè)timer給某個(gè)core使用
2、每一個(gè)core里面又有多少個(gè)Timer
2.1、四個(gè)物理Timer
EL1 Physical Timer不區(qū)分secure和non-secure,但在ATF的switch cpucontext的時(shí)候,會(huì)保存和恢復(fù)相關(guān)寄存器,所以從軟件視角來看是有兩套寄存器,也就是有non-secure EL1PhysicalTimer和secure EL1PhysicalTimer,這也是最最理想的設(shè)計(jì)方案。然而非常非常非常非常的遺憾的是,寄存器通過軟件switch cpucontext可以變成2套,但中斷呢?中斷是無法同時(shí)給non-secure和secure同時(shí)使用的,也無法做到中斷在Security State之間的隔離。既然這樣,說明這樣的硬件是一個(gè)"非常嚴(yán)重"的問題,那么我們看下軟件是怎么使用的呢?
(1)Linux Kernel正常使用,在讀取counter值、counter頻率的同時(shí),也會(huì)設(shè)置CTL、CVAL、TVAL等相關(guān)寄存器,也會(huì)觸發(fā)和處理30中斷(EL1 Physical Timer的默認(rèn)中斷號(hào)是30);
(2)optee中,僅僅是讀取counter值、counter頻率的同時(shí),就可以計(jì)算時(shí)間戳了。optee不會(huì)讀取CTL、CVAL、TVAL等相關(guān)寄存器,當(dāng)然也不會(huì)觸發(fā)和處理30中斷了。
以上便是軟件基于“硬件缺陷”而進(jìn)行的設(shè)計(jì),自然也不會(huì)出現(xiàn)什么問題。然后你說ARM Timer有缺陷就有缺陷了?你真的懂它們的設(shè)計(jì)嗎?事實(shí)上ARM的設(shè)計(jì)中,也考慮了上面描述的問題。你仔細(xì)看看它的EL3PhysicalTimer,他的寄存器的名字竟然是xxx_EL1(而不是xxx_EL3),也就是說它本身就是想給secure security用的(EL3也屬于secure security)。另外我也參考了具體的arm core trm手冊(cè),發(fā)現(xiàn)EL3PhysicalTimer所對(duì)應(yīng)的中斷號(hào)(29號(hào)中斷)的signal configuration描述為"Secure EL1 Pyhsical Timer"。我們?cè)俨橐幌翨L32(Secure EL1)的參考程序trusted-firmware-a/bl32/tsp/tsp_timer.c, 它操作的也正是EL3PhysicalTimer。
總結(jié):
(1)、EL1PhysicalTimer不區(qū)分secure和non-secure,在secure和non-secure之間也無法做到隔離。一般情況下它是給NS-EL1使用的。當(dāng)然S-EL1如果是僅僅讀取counter和頻率獲取當(dāng)前時(shí)間戳,也是可以用的,但這不應(yīng)該是建議的。因?yàn)檫@樣造車non-secure也可以竊取到secure側(cè)的時(shí)間戳。
(2)、EL3PhysicalTimer的本意就是想給secure用的,包括EL3和S-EL1
EL2 Physical Timer給non-secure EL2使用的
S-EL2 Physical Timer給secure EL2使用的
EL3 Physical Timer給Secure使用的,包括EL3和S-EL1
2.2、三個(gè)虛擬Timer
EL1VirtualTimer主要是給EL1 OS(guest os)使用的,那么對(duì)于一個(gè)操作系統(tǒng),它到底是使用 EL1PhysicalTimer還是使用 EL1VirtualTimer ? 由宏控決定,在編譯的時(shí)候就決定了。例如你這個(gè)OS沒有跑在VM中,那么就使用 EL1PhysicalTimer,如果你這個(gè)OS是要跑在VM中的,那么就使用 EL1VirtualTimer
EL2PhysicalTimer是很好理解的,就是給EL2管理程序使用的嘛,但是 EL2VirtualTimer是給誰(shuí)用的呢? 這里就需要一點(diǎn)虛擬化的概念了, EL2VirtualTimer是給Host App使用的。
審核編輯 :李倩
-
寄存器
+關(guān)注
關(guān)注
31文章
5435瀏覽量
124589 -
Timer
+關(guān)注
關(guān)注
1文章
64瀏覽量
13221
原文標(biāo)題:圖解SOC中的Timer(一):系統(tǒng)里有哪些Timer?
文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
cybt343026-01 scan的話,最多能scan到多少個(gè)?
定時(shí)模塊app_timer用法及常見問題—nRF5 SDK模塊系列二

評(píng)論