總網頁瀏覽量

顯示具有 ARM Cortex-A 標籤的文章。 顯示所有文章
顯示具有 ARM Cortex-A 標籤的文章。 顯示所有文章

2026年3月30日 星期一

【為什麼很多人好像學過嵌入式系統相關課程,卻還是常在上班做開發工作時卡關?】

 


【為什麼很多人好像學過嵌入式系統相關課程,卻還是常在上班做開發工作時卡關?】


這不是能力問題

而是學習方式出了問題

且缺乏厲害的老師去引導



很多課程在教的只是:

✔ API(現成的函數)怎麼用

✔ 範例code怎麼跑

✔ 聽起來很高大上的OS/資料結構的議題



但在電子產品開發實務上,許多韌體工程師每天面對的是:

* code明明寫對,為何沒功能,或者為何功能有問題

* 同一段韌體程式,為什麼有時候正常、有時候異常

* 幾乎看不懂MCU/SoC外面的電路,不易釐清是電路還是韌體的問題

* 如何了解和驅動各種常見的周邊裝置

* 各種暫存器的位址和功能怎麼看

* 該用什麼周邊裝置去完成產品功能、系統架構是什麼

* 工作多年仍無法舉一反三,好像沒有通透原理



很多人以為板子上的LED會亮/滅,就是代表自己「已經懂」 GPIO了


但不知道:


✔ 什麼時候需要上拉 / 下拉

✔ 一個 bit 的值改變(0或1),背後發生了什麼

✔ 為什麼code寫對,有時還是無法讓功能正常



所以從事嵌入式系統的開發,真正的差距其實不是:


👉 會不會寫程式


而是:


👉 能不能把「電路 → 晶片 → 周邊裝置 → 記憶體 → 程式」整個串起來



這也是為什麼有些人:


學過很多課程(大學 or 坊間)

看過很多範例程式,也都照著步驟做過


但一到實際專案開發或者工作現場,還是會經常卡住



嵌入式系統產品的設計研發的核心能力,其實從來不是死板的步驟學習,也不是那些看似高大上的純系統軟體議題


而是「系統設計原理的理解」,包含硬體與軟體



當你開始理解這一層

很多原本覺得很難的問題

反而會變得很直覺



-----

歡迎各方洽談合作,務實/踏實追求共好。歡迎電機電子資工本科系學員,也很歡迎非電機電子資工本科系的學員加入學習嵌入式系統技術/尋求轉職成為研發工程師的行列。

孫文良 個人簡歷: https://sites.google.com/view/wenliangsun/


‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:
本學習區之Facebook粉絲頁如下:

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

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

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


2026年2月5日 星期四

【週日全天班】ARM Cortex-A 系統晶片SoC之嵌入式Linux作業系統建置與系統實作(基礎) 團體面授


ARM Cortex-A 系統晶片SoC之嵌入式Linux作業系統建置與系統實作(基礎)】團體面授

  • 此課程須自備筆電(限Windows)
  • 隨課贈送(每人一套):SoC嵌入式系統開發板、相關材料及紙本講義
  • 本課程為確保教學品質(小班制),名額有限

2023年11月22日 星期三

[台北全新規劃] ARM Cortex-A based平台之嵌入式Linux作業系統基礎建置實作 (結合板材實作)(自備NB)

課程名稱: [台北全新規劃] ARM Cortex-A based平台之嵌入式Linux作業系統基礎建置實作 (結合板材實作)(自備NB)

課程資訊: 

https://edu.tcfst.org.tw/web/tw/class/show.asp?tcfst=yes&courseidori=12C049&fbclid=IwAR3JVkpyck1OLPxWBqcUK0dJOd3bTdO0WekH4xh1K7zn-vo5CEFMxylU8ig

上課時間:

2023/12/2~12/30(六)每週六,9:00~16:00共30小時 

上課時數:

30 小時

上課地點:

台北教育中心(台北市中正區博愛路80號3樓)

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年8月13日 星期五

【Embedded Linux(嵌入式Linux)系列課程】Bootloader開機啟動程式之編譯建置與執行 課程簡介

Embedded Linux系列之Bootloader課程簡介

Bootloader 為 開機啟動程式,其主要任務簡而言之為在電腦系統上電(Power ON)之初的階段,對系統硬體(包含CPU自身、Clock系統、周邊裝置、DRAM、Storage device等)進行一系列的初始化,並負責啟動作業系統核心(OS Kernel)。

註: 若拿SoC based嵌入式系統和PC系統作比對,粗略而言,則嵌入式系統的bootloader,即涵蓋了PC系統的BIOS及bootloader的功能(意思就是負責上電之初的硬體初始化與帶起OS Kernel等工作,在嵌入式系統上都是由bootloader負責)。這只是作個粗略的比對/比擬,當然兩種系統在細節上還是有些差異。

本課程將會帶領學員:

  • 在Host PC端之安裝於虛擬機器的Ubuntu Linux distribution環境中,透過純文字指令式(command line)之方式進行開發(讓學員了解Embedded Linux系統於產業界的常見開發方式)
  • 使用GNU編譯工具練(GNU Toolchain)對UBoot source code進行編譯,建置出MLO或稱x-loader的SPL (Secondary program loader) 與 uboot.img (Third stage program loader),並且於核心系統晶片(SoC)為ARM Cortex-A8 CPU based AM3358的BeagleboneBlack RevC開發板上執行
  • 針對課程實驗內容所用到的Storage Device(SD Card)作妥適的分割與格式化處理
  • 介紹UBoot的部分常用指令並引導學員進行實作練習
  • 背景基礎觀念
    • Bootloader運行流程,從ROM Code(bootROM)到MLO (SPL, Secondary program loader)階段,再到 uboot.img (Third stage program loader)的執行流程基礎原理
    • 相關軟韌硬體平台觀念(non-OS/OS based系統差異、MPU/MCU/SoC、DRAM/SRAM、NOR/NAND/eMMC flash memory特性,何謂Memory map I/O與Port map I/O)

UBoot於BeagleboneBlack開發板之執行之畫面 (尚未置入Linux Kernel與filesystem)如下影片。

註: 實驗用開發板並不一定只限於BeagleboneBlack,若學員希望使用/學習其它款式的硬體平台,請事先與講師討論協議。


本園區之FB粉絲專頁如下:


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

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

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

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