Security Secure Boot using Trusted Firmware-M

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 可供參考。

Other 2021 年度回顧

2022 新的一年到來,就來回顧一下去年所經歷的重要事情,並且規劃 2022 年的大方向。 工作 回顧 2021 年工作最大的轉變就是從內部 IT 部門轉換到產品向 firmware 部門。在 2020 年時我有約略提到自己在 IT 部門面臨到不適應問題,當時是覺得要把重心放在研究跟公司產品相關 security 專業知識,也確實在轉換心境後有了不少收穫。不過在年中時很榮幸地從 IT 部門正式轉調到 firmware 部門,參與了幾個客戶專案,也主動進行產品 firmware 架構重構發想和討論,更具體的對公司產品做出貢獻,整體來說很有成就感。

Go Golang slice append 實作細節

用 Golang 刷 leetcode 題目時,如果不太清楚 Golang slice 與相關 function 的運作原理,很容易踩到坑,尤其是使用其他高階語言的開發者,剛轉換到 Golang 時會覺得為什麼同樣的程式邏輯,但是出來的結果卻不一樣。因此本篇簡單說明 Golang 最常使用到的 slice append function 運作原理,並且使用 objdump 來觀察記憶體操作狀況。

raspberry-pi LCD 2004 module with Rasp Pico

LCD 2004/1602 顯示模組應該是玩開發板的入門模組之一。網路上有不少文章和 sample code,不過大部分都是直接教你要怎麼呼叫 library 的 API 來控制模組,沒有說明 API 具體的運作流程和為什麼要這樣寫 code,因此就花了點時間整理相關 IC controller 的 datasheet 及 sample code 的對應關係,希望能讓入門玩家可以了解 sample code 實際上是如何操作 LCD 模組來實現字元顯示的目的。

other 12/1 生日快樂

12/1 是我生日 :) 近期完成了一些事情,像是決定研究所論文題目、回歸 Golang meetup 進行分享、參與 2021 年度 DevFest 盛會,並做了人生中比較完整的一次健康檢查。

raspberry-pi go Run Go applications on Raspberry Pi Pico using TinyGo

TinyGo - Go compiler for small places. TinyGo 自 2019 年正式公開以來,就逐漸受到關注,尤其是 Google 在 2019 年 10 years of Go 也有特別提到 Go 原本將目標放在網路或是雲端等應用程式,不過未來期望能夠更廣泛地應用在 microcontroller 上。在近期 TinyGo 開始支援 Raspberry Pi Pico,再加上 TinyGo 架構也逐漸成熟,因此就來試用看看。

interview 台積電 SRE 面試心得

又好一陣子沒有更新 blog 了,先簡單聊一下概況。五月底的時候有一次轉換到新公司的機會,不過和既有公司商量後,雙方同意內轉到研發單位的軟韌體部門,因此就繼續留在現在的公司。也因為剛轉換部門,很多新的流程和產品需要學習,就暫時把心力都放在跟公司產品相關的技術進修,期望自己能快一點跟上腳步。目前轉到新部門約過了三個月的時間,一切適應良好,工作任務也可以在期限內順利完成,同事相處也都很融洽,過的很開心。 在七月中的時候,接到台積電的 SRE 主動面試邀約,直到最近才結束整個面試流程。整個面試流程覺得收穫良多,所以在此簡單記錄一下。面試一共會有專業項目三關 + 人資一關,由於主管希望面試者能有較充足的準備,因此專業項目每一關的間隔時間預定是兩個禮拜,如果有需求需要加快面試速度也是可以調整時程。現在疫情期間,除了測驗要去廠區之外,其他面試一率都是視訊面試。 第一關:專長簡介和專業問題 (60 分鐘) 一面的流程會分成四個部分:

Raspberry Pi Boot Flow of Raspberry Pi Pico

之前 blog 文章有提到 JOS 作業系統初始化流程,包含 x86_64 架構下 muticore 喚醒過程等。而剛好前陣子入手採用 ARM Cortex-M0+ CPU 的 Raspberry Pi Pico 開發板,因此就研究了一下 Raspberry Pi 為 Pico 開發板所撰寫的 bootrom、memory map 和 layout 等。

C C extern keyword

最近在參與面試的時候,我方考了 extern 關鍵字,雖然這個關鍵字很常用,但是很少有應試者答的完整。因為自己也是韌體新手,因此就參照 ISO/IEC 9899:2011(C11) 的標準,把 extern 的定義和用法紀錄一下。 Declaration & Definition 在討論 extern 之前,先釐清 C 的 declaration 和 definition 差異性。在 C11: 6.