總網頁瀏覽量

顯示具有 輔導課程 標籤的文章。 顯示所有文章
顯示具有 輔導課程 標籤的文章。 顯示所有文章

2021年10月7日 星期四

【Embedded Linux】【開機啟動程式】關於bootloader/bootstrap名詞之探討&想法

因為前陣子剛好trace到bootstrap相關的code,今天看到Youtube上的台大資工系的OS課程影片,所以就稍微探討一下關於Bootstrap這名詞的使用與定義差異,雖然這些名詞或許本來就難免會隨著年代及平台的差異而被混用。 

該台大資工系課程影片中16:38開始的部分 (對應這篇po文的第一張截圖圖片) https://www.youtube.com/watch?v=OQiCacvx5rQ&t=997s 

以下是探討的部分: 

雖然boot就是源自於bootstrap的縮寫,但有些名詞如果要細究,似乎又有些在名詞定義有所差異的狀況可以探討。 

後來發現上面那課程投影片以及說法是恐龍本(恐龍書)內的部分描述,而課程影片似乎是更簡化一些的PPT呈現與描述方式。

實際上如果是ARM(如Cortex-Ax系列) based的嵌入式SoC Linux系統,從bootROM到head.o、misc.o(被包含在被壓縮的kernel核心的zImage之中)之間包含許多階段的軟韌體程式。 

在系統啟動/上電之初負責初始化hardware(例如課程影片照恐龍本內容所提到的CPU registers, device controller , memory)的程式,其實就嵌入式系統常見說法是bootloader (此處將這些名詞區分得詳細些) (註: 關於初始化硬體的部分,在常見的PC架構則是會有一部分稱作BIOS,而在嵌入式系統通常將這些部分統稱為bootloader。所以若要對照常見的嵌入式系統架構的話,可對照或類似於嵌入式系統的bootloader的某一部分,如許多SoC內的boot ROM內的ROM code就是類似的其中一部分,當然其實也還包含ROM code之後的一些部分)。 

因為有著上述被包含在被壓縮的kernel核心的zImage之中的head.o、misc.o等程式(注意,這篇po文所講的head.o指的並不是那個不包含一堆object file的那個Linux核心本尊vmlinux內的那個head.o,雖然它們都在zImage之中。另外要注意有兩種情況都叫作vmlinux),

所以若嚴格或精確一點來說(至少在開頭描述過的嵌入式系統上),或許 不適合 將 負責 繁複的硬體初始化 及 zImage階段的處理器配置(如快取、暫時關閉中斷訊號、準備C code執行環境等) 的head.o、負責解壓縮、重定址Linux kernel等步驟的misc.o等程式 都全部統稱為Bootstrap program或全部統稱為bootloader,因為head.o、misc.o等程式,主要是負責把被壓縮的OS核心zImage解壓縮 & 重新定址等等的動作的部分,而並不是負責所謂的initialize all aspect of the system hardware。 

國外有一本有名的、介紹嵌入式Linux的書籍([1])的5.1.3節的內容是將Bootstrap program與Bootloader作出區隔,這本書將zImage之中的head.o與misc.o等程式歸類為Bootstrap program,但這樣的區隔方式也可能會造成混淆,畢竟boot這詞源自於bootstrap,會讓人覺得Bootstrap program原本就是bootloader不是嗎? 但head.o、misc.o也是屬於將OS kernel帶起的重要程式(只是不屬於我們常講的bootloader的範疇),所以我認為[1]這本書的作者會想要作出這種區隔也還算可以理解。 

總結一下,簡單來說,在有跑Linux的嵌入式系統中,負責課程影片內所指的(系統啟動/上電之初的)initialize all aspect of the system hardware(如memory)的階段通常稱為bootloader;而被包含於zImage的階段的head.o、misc.o等帶起核心的必要程式,已經不屬於我們常講的bootloader階段,

所以如果在OS課程中將這些部分都統稱為bootstrap program或bootloader,可能是會顯得比較rough一些。當然了,一般大學部的OS課程若要講得很詳細的話,或許也不容易,但如果是針對一般的PC系統講解,則負責最初initialize all aspect of the system hardware的應該是BIOS,在BIOS負責的任務結束之後才換成bootloader(bootstrap program)接手。 

另外,其實bootloader初始化系統硬體之後,也不一定就要接著帶起一個OS kernel,也可以是接著帶起non-OS program,端看實際的應用需求而定。 

題外話,關於開機初始化memory的方面 (於bootloader的階段),小弟個人過去在科技業工作時,曾實際負責過相關內容多次 (bring up過多款會跑Linux/Android的SoC系統晶片的公版軟韌體)。 

Ref: [1] Embedded Linux Primer: A Practical Real-World Approach, 2/e,https://www.tenlong.com.tw/products/9780137017836




--------------------

孫文良 (阿良的嵌入式系統技術學習區)

個人簡介: https://sites.google.com/view/wenliangsun/

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先參考 課程招生網頁連結


2021年7月6日 星期二

【阿良的韌體科普系列】系列文章─開張文

這幾年來逐漸發現,現在因為某些議題被過度炒作和放大(如AI,不論在新聞媒體/報章雜誌上面),且學術界(大學校院)又過於績效導向,大多為了角逐計畫和資源,而不斷地去追求所謂比較的名詞的相關議題(未必能反映台灣產業界的真實專業技術人才需求),導致一些重要的紮實專業技術教育越來越不受到重視。

於電腦相關領域(資訊工程領域),在較上層的程式語言(如Python)隨著上述議題而一同受到社會高度重視的同時,越來越學生 或 初入社會的人士,能了解何謂電腦系統的底層(如 韌體硬體),

但是,其實產業界對於電腦底層相關的工程師職務需求量是很大的(可自行搜尋人力銀行求證),

許多人似乎都快忘記,軟體終究是被拿來控制/驅動電腦硬體的、軟體是被硬體所執行的,

而且,其實軟體也有很多不同的層面和種類,軟體 並不是 只有一般人眼睛看得到的 視窗介面軟體、APP 或 網頁 而已,

不少人似乎把底層系統都給忘記,甚至不太曉得 較底層的系統軟體(韌體、驅動程式、開機啟動程式、作業系統核心等名詞)存在和意義


有鑑於上述狀況,本園區這邊最近會開始撰寫並分享【阿良的韌體科普系列】系列文章,希望透過比較淺顯易懂的文字介紹方式,讓更多人對於電腦底層、韌體相關的軟體程式、硬體等底層單元,能有更多的了解。

這系列文章的撰寫風格,會盡量避免太過繁瑣詳細的內容,但同時保持內容的正確性,雖然這樣的有可能會犧牲一些詳細的說明,但還是希望能藉此方式,讓更多朋友能對於電腦底層的軟硬體相關知識有些了解。

希望讓大家能擴展自己對於職涯的選擇性和技術視野,而不是等到去工作了,才知道自己做的工作到底是在做什麼。

--------------------


孫文良 (阿良的嵌入式系統技術學習區)

個人簡介: https://sites.google.com/view/wenliangsun/

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章