Trusted Firmware 是 ARM 基於自家具有 TrustZone 功能的處理器所實作的開源程式,其主要目的是讓相關廠商可以更快速地將 TrustZone 架構性的整合到產品當中,此外同時也是廠商要取得 ARM PSA certification 認證的參考資源。由於近年來資安議題逐漸受到重視,愈來愈多客戶開始尋找結合硬體實現的安全方案,因此就有這個機會了解一下 Trusted Firmware 軟體架構及其中的 secure boot 流程。Trusted Firmware 包含了幾個專案,這篇文章是以其中的 Trusted Firmware-M(Arm v7-M & v8-M) 為例,如果是 A 系列的處理器則有 Trusted Firmware-A 可供參考。
2022 新的一年到來,就來回顧一下去年所經歷的重要事情,並且規劃 2022 年的大方向。
工作 回顧 2021 年工作最大的轉變就是從內部 IT 部門轉換到產品向 firmware 部門。在 2020 年時我有約略提到自己在 IT 部門面臨到不適應問題,當時是覺得要把重心放在研究跟公司產品相關 security 專業知識,也確實在轉換心境後有了不少收穫。不過在年中時很榮幸地從 IT 部門正式轉調到 firmware 部門,參與了幾個客戶專案,也主動進行產品 firmware 架構重構發想和討論,更具體的對公司產品做出貢獻,整體來說很有成就感。
用 Golang 刷 leetcode 題目時,如果不太清楚 Golang slice 與相關 function 的運作原理,很容易踩到坑,尤其是使用其他高階語言的開發者,剛轉換到 Golang 時會覺得為什麼同樣的程式邏輯,但是出來的結果卻不一樣。因此本篇簡單說明 Golang 最常使用到的 slice append function 運作原理,並且使用 objdump 來觀察記憶體操作狀況。
LCD 2004/1602 顯示模組應該是玩開發板的入門模組之一。網路上有不少文章和 sample code,不過大部分都是直接教你要怎麼呼叫 library 的 API 來控制模組,沒有說明 API 具體的運作流程和為什麼要這樣寫 code,因此就花了點時間整理相關 IC controller 的 datasheet 及 sample code 的對應關係,希望能讓入門玩家可以了解 sample code 實際上是如何操作 LCD 模組來實現字元顯示的目的。
12/1 是我生日 :) 近期完成了一些事情,像是決定研究所論文題目、回歸 Golang meetup 進行分享、參與 2021 年度 DevFest 盛會,並做了人生中比較完整的一次健康檢查。
TinyGo - Go compiler for small places. TinyGo 自 2019 年正式公開以來,就逐漸受到關注,尤其是 Google 在 2019 年 10 years of Go 也有特別提到 Go 原本將目標放在網路或是雲端等應用程式,不過未來期望能夠更廣泛地應用在 microcontroller 上。在近期 TinyGo 開始支援 Raspberry Pi Pico,再加上 TinyGo 架構也逐漸成熟,因此就來試用看看。
又好一陣子沒有更新 blog 了,先簡單聊一下概況。五月底的時候有一次轉換到新公司的機會,不過和既有公司商量後,雙方同意內轉到研發單位的軟韌體部門,因此就繼續留在現在的公司。也因為剛轉換部門,很多新的流程和產品需要學習,就暫時把心力都放在跟公司產品相關的技術進修,期望自己能快一點跟上腳步。目前轉到新部門約過了三個月的時間,一切適應良好,工作任務也可以在期限內順利完成,同事相處也都很融洽,過的很開心。
在七月中的時候,接到台積電的 SRE 主動面試邀約,直到最近才結束整個面試流程。整個面試流程覺得收穫良多,所以在此簡單記錄一下。面試一共會有專業項目三關 + 人資一關,由於主管希望面試者能有較充足的準備,因此專業項目每一關的間隔時間預定是兩個禮拜,如果有需求需要加快面試速度也是可以調整時程。現在疫情期間,除了測驗要去廠區之外,其他面試一率都是視訊面試。
第一關:專長簡介和專業問題 (60 分鐘) 一面的流程會分成四個部分:
之前 blog 文章有提到 JOS 作業系統初始化流程,包含 x86_64 架構下 muticore 喚醒過程等。而剛好前陣子入手採用 ARM Cortex-M0+ CPU 的 Raspberry Pi Pico 開發板,因此就研究了一下 Raspberry Pi 為 Pico 開發板所撰寫的 bootrom、memory map 和 layout 等。
最近在參與面試的時候,我方考了 extern 關鍵字,雖然這個關鍵字很常用,但是很少有應試者答的完整。因為自己也是韌體新手,因此就參照 ISO/IEC 9899:2011(C11) 的標準,把 extern 的定義和用法紀錄一下。
Declaration & Definition 在討論 extern 之前,先釐清 C 的 declaration 和 definition 差異性。在 C11: 6.
Lab 4 包含三個部分,其中 A 部分介紹 x86 架構的 multiprocessor 啟動與初始化流程,並且實作簡易的 round-robin process scheduling。而我認為從 bootstrap processor 啟動並初始化,到透過 bootstrap processor 把其他的 processor 啟動的整個過程相當重要,可以讓新手更具體地知道 multiprocessor 的運作方式。