總網頁瀏覽量

顯示具有 Embedded Linux 標籤的文章。 顯示所有文章
顯示具有 Embedded Linux 標籤的文章。 顯示所有文章

2025年7月8日 星期二

(7/12本周六開課 最後3個名額) 自強基金會(台北分會) 加開班[台北班] ARM Cortex-A based 平台之嵌入式Linux作業系統基礎建置實作 (附贈可跑Linux的嵌入式系統開發板 及 相關材料,課程現場實作)(自備NB) 如期開班

 

(最後3個名額) 自強基金會(台北分會)  加開班[台北班]  ARM Cortex-A based 平台之嵌入式Linux作業系統基礎建置實作 (附贈可跑Linux的嵌入式系統開發板 及 相關材料,課程現場實作)(自備NB)  如期開班 

報名連結 : https://edu.tcfst.org.tw/web/tw/class/show.asp?tcfst=yes&courseidori=14C065&fbclid=IwY2xjawLZaSVleHRuA2FlbQIxMABicmlkETFkMEFZb3VFYk81QnZZTHFrAR7tos6xwsLxux7ZfpjOhZH4Rj17zfL0wNqK9_MgSaBu0Kivx0cUXmo6aKkWAA_aem_nuZimA1fP_DQvjMfGE-GNA

因為有3位學員因臨時有事無法全程參與課程(想改成其他梯次上課),所以目前這梯課程目前有3位空缺,請有興趣或者原本是候補備取的學員,若想早些上課,可考慮報名這個梯次喔~ (7/12也就是本周六開始上課,上午9:00~下午16:00,中午1小時午餐休息)。 

每梯次課程的學員人數會有所限制  (因兼顧課程品質,所以會限制每梯次上課人數,學員當場聽我講解完原理及實驗步驟講解之後,馬上當場進行實作實驗操作,我會當場協助解決每位學員實際遇到的問題,所以要花時間,故限制每梯次人數)

課程內容大綱 (包含Linux GPIO驅動程式demo影片) 如下方連結所示:

https://www.facebook.com/sun.wen.liang.580515/posts/pfbid0kaH649i56VadgQqHw1dWoPKya8MRP1eYQNWioFwApHvLd2TGHbj6Kgu8CsaxFJ5Bl?__cft__[0]=AZWfbGKL6LYtzDTu088827Ns3WLAtCWDx5rl1dckyiGuqATaqJz34KTxUib9rocJOrGQGytMGBFXAKc_RifouHIzMuOdSnQrQiKQNVyo693AfWfLvurFGMHsYEEGW4dGnOOn6TJbTG6FcOpkqayeWvbXyW3F430sayWxft9h1qT1Mg&__tn__=%2CO%2CP-R

從GNU ARM Linux Cross compilation toolchain(GNU ARM Linux編譯工具鏈 arm-linux-gnueabi- )、samba server等基礎開發環境建置、及於Host PC Linux distribution(Ubuntu)之上建置 for ARM cortex-A based SoC為核心單元之嵌入式系統開發板(Embedded system dev. board )之 開機啟動程式 Bootloader (U-Boot)、Linux kernel(Linux作業系統核心) 及 根目錄檔案系統 Root filesystem (Busybox)、U-Boot階段Tftp upload kernel image(from PC to the dev. board)等,並於嵌入式系統開發板實際執行驗證之後,接續的課程單元為Linux核心驅動程式的基礎。

Linux核心驅動程式課程基礎課程內容包含Beaglebone black Rev C.的BJT作為開關的電子電路原理、AM3358 SoC(系統晶片)內的 GPIO registers (clock、pinmux、output enable 、clear data及set data等暫存器)、Linux kernel module(driver program/.ko file)撰寫(包含各式基本的系統呼叫System Call、file operation struct、copy_from_user/copy_to_user、裝置註冊相關的Kernel API等等)、及上層應用程式等觀念與實際範例皆逐一介紹,從硬體(電子電路、系統晶片架構、GPIO周邊裝置驅動)到 系統軟/韌體程式開發 皆完整涵蓋(原理與實作實驗)。

#Linux裝置驅動程式

#嵌入式Linux系統

#Linux_kernel_driver

#Linux_kernel_module

#Linux

#Embedded_Linux

#Device_driver

#ARM_CortexA_based_SoC

#TI_AM3358_SoC

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

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

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


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

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

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

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

2025年2月21日 星期五

(NEW)2025年 6月 開在 清大自強基金會(台北)的 嵌入式Linux系統基礎建置課程

 

我近期開在台北自強基金會的課程

🎉🎉🎉熱烈招生中🎉🎉🎉

歡迎有興趣的朋友們踴躍報名~~

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

上課時間:

2025/6/8(日)~7/6(日)9:00~16:00 共30小時

2025/5/25~6/22(日)每週日9:00~16:00 共30小時

(原2025/3/30~5/4(日)每週日9:00~16:00  共30小時(4/6停課))

報名連結➡️ https://edu.tcfst.org.tw/web/tw/class/show.asp?tcfst=yes&courseidori=14C029


#嵌入式系統 #SoC #韌體工程師 #嵌入式系統課程 #微控制器 #韌體工程師課程 #Embedded_Linux 


-----

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

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


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

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

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

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

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年9月3日 星期五

【Embedded Linux(嵌入式Linux)系列課程】Root Filesystem之編譯建置與執行 課程簡介

Root Filesystem之編譯建置與執行 課程簡介

Root Filesystem為根目錄檔案系統。簡而言之,檔案系統為電腦資料的儲存和組織(架構)方式,與作業系統之間有著密切的關係

延續上一節Kernel之編譯建置與執行之課程內容後,這節課程將會帶領學員:

  • 課程實驗內容將透過 純文字指令方式(command line) 進行,符合科技產業界對於此類系統的開發方式

  • Host PC端之Ubuntu Linux開發環境中,取得Busybox這款知名的開源檔案系統建置工具的source code,並透過GNU Toolchain編譯工具對其進行編譯,以建置出給Beaglebone Blcak嵌入式系統開發板所運行使用的Root Filesystem(根目錄檔案系統)

  • 以Busybox建置製作Root Filesystem的過程,包含嵌入式系統目標平台上所需的基本目錄及裝置節點(device nodes)

  • 準備Busybox執行所需之動態連結函數庫(該課程主要實驗方式);也會額外補充介紹靜態連結的編譯方式。

  • 建立檔案系統所需之基礎檔案(如/etc/inittab、/etc/init.d/rcS、/etc/fstab......等等)

  • 如何讓執行於Beaglebone Blcak板子的Linux Kernel從SD卡掛載(mount)學員於課程內所建立的Root Filesystem 

實驗Demo影片:


從上電進行開機流程之後進入根目錄畫面,展示在Beaglebone Black板子上執行ls、cat /proc/interrupts及cat /proc/cpuinfo指令。



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

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

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

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

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




2021年8月23日 星期一

Beablebone Black或Nano Pi很適合拿來作為Embedded Linux的研究/學習平台!

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

先聲明,這篇不是工商服務廣告,單純介紹和分享一些嵌入式系統板子的使用經驗。

BeagleboneBlack(BBB)這板子真的蠻不錯的,

除了上面的AM3358 SoC系統晶片維持TI SoC的一貫風格(TI OMAP系列SoC也是如此) 釋出很多SoC的詳盡手冊資料(眾多開發板上的SoC款式,我看過釋出資料最詳細的就是他們公司)、很適合拿來做有深度的研究之外,

也真的很適合拿來做技術教學,

TI官方網站的AM3358 SoC頁面(上面提供許多詳盡的資料)


BeagleboneBlack板子的schematic(電路圖)PCB設計都有公開,而板子上的User LED有4個,

很方便拿來做Linux Kernel Device Driver串接上層user space的Application program(藉由system call機制存取底層資源)的相關基礎教學Demo用~  

還可順便講解一些基礎的介面電子電路原理 (對較篇向純軟體背景或者非電機電子科系的學員們,也會有不少幫助)。


                                                              圖諞來源: Beaglebone black電路圖
https://github.com/beagleboard/beaglebone-black/blob/master/BBB_SCH.pdf?raw=true



圖諞來源: Beaglebone black電路圖
https://github.com/beagleboard/beaglebone-black/blob/master/BBB_SCH.pdf?raw=true


圖諞來源: https://elinux.org/Beagleboard:BeagleBoneBlack#Minix_.28Discontinued.29


也可以從Beagleboard官方網站連進去觀看各種資訊和資源~

Beagleboard官方網站


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

另外,像是Nano Pi系列的板子也很棒喔,

除了期價格和性能比很好,

其相關的技術文件資訊(如其相關的技術文件資訊連結2)也算頗為豐富,電路圖資訊也很完全,

而板子上面的核心SoC系統晶片的方面,

除了社群網頁上放置其SoC的架構和完整的規格資訊之外(Datasheet),其原廠Allwinner也有在wiki page他們的官方網站上放置關於晶片的介紹。

---------

其它也還有許多很不錯的嵌入式系統開發板,未來若有機會的話再一一介紹,也歡迎各家廠商來洽推廣談合作方式!

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


2021年8月20日 星期五

【Embedded Linux(嵌入式Linux)系列課程】Kernel之編譯建置與執行 課程簡介

Embedded Linux系列之Kernel之編譯建置與執行 課程簡介

Kernel為作業系統的核心,是現代作業系統之中最基本也是最主要的單元,簡略而言,Kernel主要負責整體電腦系統的資源管理。

延續上一節Bootloader開機啟動程式建置與執行之課程內容後,這節課程將會帶領學員:

  • 課程實驗內容將透過 純文字指令方式(command line) 進行,符合科技產業界對於此類系統的開發方式

  • Host PC端之Ubuntu Linux開發環境中,取得Linux Kernel source code,並透過GNU Toolchain編譯工具對其進行編譯,以建置出給Beaglebone Blcak嵌入式系統開發板所運行的Embedded Linux Kernel Image

  • 製作Boot script(包含帶給Kernel的必要啟動參數以及與啟動核心相關的UBoot指令)

  • 介紹如何讓Beaglebone Blcak板子從SD卡載入並啟動Linux Kernel Image

  • 介紹在產業界工作常會使用到的透過TFTP(Trivial File Transfer Protocol)從Host PC端載入Embedded Linux Kernel ImageBeaglebone Blcak板子上並且執行的方式 
  • 介紹如何編譯裝置結構樹devicetree source file(.dts)以得到device tree binary(.dtb),及如何透過UBoot將其載入給Linux Kernel

實驗Demo影片(註: 此為尚未建置Filesystem的狀態):

SD卡(MMC)載入並啟動Linux Kernel (透過boot script自動booting)


透過TFTP從Host PC端載入Embedded Kernel ImageBeaglebone Blcak板子上並且執行 
(刻意敲UBoot指令給大家看)



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

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

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

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

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

2021年8月16日 星期一

【阿良的嵌入式系統技術學習區】 嵌入式Linux (Embedded Linux) 基礎實務 課程內容介紹

課程涵蓋內容如下:


  • 說明:  雖然近年來已經有Yocto、Buildroot、OpenWrt等組件工具可以簡化許多在嵌入式Linux建置過程中的繁複流程(若未來有機會的話,可能會開這些工具的使用教學課程),但是,無論在許多有做SoC的IC design house(IC設計公司) 或者 系統廠 的嵌入式Linux軟韌體相關研發單位,嵌入式Linux各階段軟韌體的基礎建置(包含對應的編譯開發環境的各環節)能力,也就是本課程的教學主軸,仍是非常重要的,在過程中將會學習到許多在進行嵌入式Linux系統開發時所需的基礎觀念和經驗。
  • 在此課程內容中,有著許多細節,通常對於初學者自學而言將會消耗大量的時間在克服一些技術細節方面所帶來的困難,大多需要實際的經驗才能在較短的時間內克服,所以若讓有經驗的人指導,在學習上將會事半功倍。
  • 課程實驗內容將透過 純文字指令方式(command line) 進行,符合科技產業界對於此類系統的開發方式

  • 實驗硬體平台預計為ARM Cortex-A8 based SoC(系統晶片)為核心之開發板(Beaglebone Black)

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

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

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

個人簡介: 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,亦可先參考 課程招生網頁連結

 

2021年7月14日 星期三

【阿良的韌體科普系列】「韌體」到底是什麼? 和軟體有什麼不同? 【下篇】

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

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

承接中篇文章,下篇的內容如下: 

另外有些人可能會認為,被燒錄到裝置產品內的軟體都能叫做韌體,我甚至看過有人認為開發Android 裝置的上層軟體也是在做嵌入式系統韌體開發,對於這種觀念我個人是不同意的。因為畢竟只要是能執行軟體的產品 (有電腦系統在內),有什麼不是裝置呢? 即便個人電腦PC也是裝置的一種。其實或許應該以軟體的所在層次(Level)去區分,會較客觀一些。

無論硬體平台是SoC或者MCU;無論產品類型是小體積的裝置還是PC或家電;無論主要系統軟體是屬於有無OS的類型、無論軟體單元/種類是Linux kernel、BIOS、bootloader等等,只要是位於底層層次的軟體(存取CPU、周邊暫存器記憶體的層次的軟體,我認為即可稱為韌體),撰寫韌體是需要考量到硬體狀況 (如果是控制I/O周邊用的韌體,時常還要考量及整合電腦晶片外部的電子電路設計)。

當然也有因為硬體架構較單純所以將應用程式和韌體混和撰寫的狀況,例如早期標準(至今仍可用於嵌入式基礎教學)的8051 MCU晶片的程式開發即是這種狀況(較早期的MCU硬體架構單純、資源較有限,不一定適合去將其軟體區分出太多高低階層次)。

  • 註: 電腦並非只有指個人電腦(PC),而是在許多人們於日常生活中所會使用到的產品裡面都有電腦(執行軟韌體程式以驅動各式硬體),例如手機、平板電腦、家電(數位電視、電視機上盒、洗衣機、冷氣...) 等等。

-----



嵌入式系統相關觀念教學文:

1.   現代計算機系統核心硬體常見平台的分類與簡介概述

2.   Arduino到底是什麼? MCU又是什麼?

3.   許多人對於8051 MCU的常見錯誤觀念闢除


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


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

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

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

【阿良的韌體科普系列】「韌體」到底是什麼? 和軟體有什麼不同? 【中篇】

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

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

承接上篇文章,中篇的內容如下: 

所以,若要精確一點來說(說好的初學者科普呢),個人認為何到底謂韌體、何謂軟體,其實應該以該軟體所在的層次來區分,而不是以平台來區分。

以許多 初學者 或 學生 時常撰寫non-OS類型的Arduino軟體為例,當要驅動GPIO所對應的某支腳位輸出高電位時,如果使用的方式是是直接在Arduino IDE中去呼叫digitalWrite(Pin_Number, HIGH); 若以嚴格&精確一些的標準來說,呼叫函數的本身的這層程式碼的範疇,算是應用軟體層面(屬於 只負責下參數給這個現成的函數來應用這個函數,但看不到這個函數的內容是如何、實際上是如何接觸操作了什麼硬體暫存器 的層次)。 而 真正去實現digitalWrite這個函數的內容程式碼(對GPIO的暫存器作操作存取)的部分才是意義上較精確的韌體開發。

這時有些人可能會混淆,認為上述Arduino例子的digitalWrite(Pin_Number, HIGH)既然會直接驅動硬體(會讓Arduino板子輸出數位邏輯系統的高電位5V或3.3V(視MCU款式而定)訊號,那呼叫digitalWrite的層次的軟體怎麼會不屬於韌體呢?  

如果有這個疑問的朋友,可以自己想想,有什麼APP的最終功能目的不是驅動硬體動作呢? 例如你使用LINE APP發送文字訊息給朋友,此時手機畫面的硬體、手機通訊相關硬體其實都有做事(work),但難道LINE APP是韌體類的程式嗎?  既然世界上所有的軟體本來就都是為了驅動電腦硬體做事(以達到我們人類所指定的功能),那又何必區分獨立出韌體這個名詞呢?  所以,韌體應該必須是有其特定意義的。

當然了,上述講述的Arduino函數的這例子的說明內容,是比較精確嚴謹的韌體名詞作釐清,但如果將韌體這個名詞的定義放寬、放得更廣泛一些,那通常MCU的軟體等都會被統稱韌體。

又例如許多消費性電子產品(如機上盒、路由器)內的軟體升級,這時的軟體也常被泛稱為韌體,所以使用者會看到的名詞是韌體更新(算是一種泛稱),但是實際上確切到底是更新了哪些部分的軟體、更新的到底是屬於底層還是屬於上層的軟體,其實當然只有原廠負責相關工作的工程師才知道

以及 如果是在科技產業/企業公司的職缺名稱方面,即便是呼叫digitalWrite函數來應用以控制MCU(進而驅動其它硬體)的相關軟體工作(是否接觸更底層的真實定義上的韌體,就看工作性質而定),這些工作職缺通常也都被企業在人力銀行網站上 統稱為 韌體工程師 (畢竟是驅動MCU晶片功能的軟體,直覺上想起來仍是很直接會驅動硬體的軟體工作),

所以各位朋友會發現,有時候人們在這些名詞的使用上是會有混用情況的  (情況有點類似 微控制器Microcontroller 也常被稱作 微處理器Microprocessor,若要探究這兩者的差異細節,則可參考我之前撰寫的這篇文章去了解該兩者的詳細的定義和區別)。





其餘的內容會放在 下篇 繼續介紹(可直接點連結連入關看)。



嵌入式系統相關觀念教學文:

1.   現代計算機系統核心硬體常見平台的分類與簡介概述

2.   Arduino到底是什麼? MCU又是什麼?

3.   許多人對於8051 MCU的常見錯誤觀念闢除


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


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

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

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

【阿良的韌體科普系列】「韌體」到底是什麼? 和軟體有什麼不同? 【上篇】

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

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

說明: 

撰寫此系列文章的目的,主要是希望能讓初學者(甚至非本科系的朋友)能了解一些關於韌體的基本觀念,所以不會使用太艱澀的方式來描述 (盡量)。

(但是後來發現這些內容對有些初學者而言可能還是會有點艱澀,所以順便廣告一下,對於許多初學者來說,有些內容或許真的需要來上課才比較容易更清楚和容易吸收,若需要課程請洽最下方的email)。

某些人對於這些專業名詞的定義和觀念或許有些差異,在這文章中,我將以個人長期以來對於MCU(微控制器,也就是單晶片微電腦) 與 SoC(系統晶片)的 軟韌體程式開發經驗(包含non-OS無作業系統類型 和 OS based有作業系統類型)來進行分析和說明。

字有點多,請見諒,也請發揮耐心擁抱文字。

------


韌體(Firmware),既不是硬體,也不是開發性質較偏向純「軟」、較高階(註1)的那些 應用軟體 (廣泛來說,例如在執行於作業系統之上的APP、網頁、資料庫應用 等層面,都算應用軟體)。此外,韌體也並不是開發數位IC的時候所使用的硬體描述語言所撰寫的程式。

韌體 也是一種 軟體。在開發過程的最後階段,最終都是在經由編譯或組譯之後,經處理(例如燒錄)被放置在記憶儲存單元之中,等待讓CPU提取(fetch) 及 執行(execute) 的 數位碼 (也就是所謂的 機械碼,是二進制碼,由0和1所組成)


然而,既然 韌體(firmware) 也是一種 軟體(software),那為何又會有 韌體 這個名詞的存在呢?

簡單來說,韌體 是 屬於比較「硬」的 軟體,這是什麼意思呢?  有些朋友可能會有疑問,即便是上層的應用軟體(例如APP),其存在的目的,不也都是為了要驅動硬體來完成功能的嗎?  那麼,上層應用軟體 和 韌體 之間的 差異 又是什麼呢?

以我個人的經驗來說,韌體 就是: 「較貼近、較直接存取電腦硬體單元的軟體」


而「貼近電腦硬體」又是什麼意思呢?  

就是位於底層(越接近電腦硬體)、直接對硬體(CPU 及 各式周邊裝置的暫存器)進行操作和存取的軟體所在層次(或者說類型)。而不像是較上層的應用軟體那樣、中間經過很多層的軟體轉換及對應之後才能間接存取硬體資源。

而為何說是「貼近硬體呢? 所謂的」貼近硬體, 是有多貼近呢?

現代因為某些系統的軟韌體的層次多樣,一個規模較大的電腦系統的軟韌體可能會被分很多層次去分工進行開發,有時候其實際狀況也不是那麼容易就可輕易劃分。但簡單來說,越直接對硬體進行存取操作的層次就越是偏向接近韌體的範疇,包含到存取暫存器內容值的相關內容。


  • 註1: 在這邊先解釋一下在電腦系統內的一些用語,越上層越高階是指是越貼近人類(開發者)的技術範疇,越底層越低階指的是越接近電腦硬體(硬體包含: 處理器、周邊裝置、記憶單元 及 周邊相關的電子電路等等)。

所以請注意(再次強調),這裡指的 高階/低階 或者 上層/底,並不是指技術的難度高低,而是指 該技術層次 是否位於 較靠近人類的習慣和直覺(越高階或者說越上層) 還是 比較靠近電腦系統硬體(越低階或者說越底層,離人類習慣直覺認知越遠)。 

通常對於非硬體背景出身的人來說,底層技術的入門通常可能會較需要時間去體驗和學習 (包含要了解一些硬體觀念),如果是由具有實際開發經驗的人指導、幫助學習、給予方向,可大幅提觀念上的理解和學習速度 (這也是我開課的目的)。 


為了避免文章內容太多會導致大家看不下去,剩下的內容會放在 中篇下篇 ,歡迎點入連結繼續觀看下去。



嵌入式系統相關觀念教學文:

1.   現代計算機系統核心硬體常見平台的分類與簡介概述

2.   Arduino到底是什麼? MCU又是什麼?

3.   許多人對於8051 MCU的常見錯誤觀念闢除


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


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

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

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

2020年11月14日 星期六

個人產業經歷相關證明 & 若有技術基礎輔導需求的產業公司與個人,都歡迎來信洽談合作

我是孫文良,因為希望能實現一些理想和分享一些理念

所以開設了 阿良的嵌入式系統技術學習區

如同我的簡歷所示,個人在學生時期就開始接觸一些實作專案並且也有許多參賽獲獎的經驗。而自研究所畢業後,有些在產業界工作的經驗,也曾在一些科技大學擔任業界講師

目前也持續和產業界公司合作,兼任產品研發顧問

相關的證明照片如網址(權限公開,不必登入也可看到): 

https://www.facebook.com/media/set/?set=a.161265529036225&type=3

一直以來,由於個人的求學與產業經驗,看過許多事,有著許多感慨,一直希望能 減少產學落差 以及 振興技職教育體系(國內的大學都不做,而許多號稱技職體系的科技大學大多也不重視產業實務,那我就自己想辦法來做,專業技職/技術教育本來就是國家產業之所需。雖然我個人經常是在做狗吠火車的事情,但是這裡畢竟是自己的國家/家鄉,那就堅持繼續做這些有意義的事吧,這樣日子也會過得踏實且開心點)

故,若有技術基礎輔導需求的產業公司單位 或 個人,都歡迎來信洽談合作

2020年11月13日 星期五

MPU/MCU/Embedded Microprocessor/Embedded Processor名詞定義探討與整理

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

在嵌入式系統的技術領域,某些與處理器或控制器相關的名詞因為常被混合使用,所以常使許多人對於這些名詞感到模糊以致觀念不清,所以這裡繼續寫這篇文章來作整理分析探討(過去我曾寫過[6]和[13]這兩篇Blog文章來解釋一些名詞定義上的觀念差異)

許多人可能較不會注意到,STM32系列其實除了MCU(Microcontroller Unit)產品之外,也有出MPU(Microprocessor Unit)系列的產品[1],例如ST公司的這顆STM32MP151A[2],這顆IC裏頭除了有有雙核心(ARM Cortex-A7和一顆ARM Cortex-M4)的CPU Cores (當然其實ARM處理器單元之中其實不只包含CPU core,以Cortex-M為例,還會有一些相較於一般周邊裝置而言與CPU更有緊密關係的周邊如NVIC、Systick timer之類的裝置)之外, 還有一些週邊單元(如I2C、SPI、UART、Ethernet MAC、USB、Camera interface、ADC、DAC等等)

須注意的是,上面提到的這款MPU指的是Embedded Microprocessor,而不是傳統所稱的微處理機/微處理器(General-Purpose Microprocessor),單一顆內部主要內容只有CPU單元的IC,而沒有包含週邊單元,如Z80或8086)[3][4]

在某些對於名詞定義較嚴謹書籍裏頭有這樣較明確的定義和解釋去區分上述所提及的Microprocessor和Microcontroller之間的差異,如台科大電子系教授林銘波或者國外的Muhannad Ali Mazidi或者Sencer Yeralan等人寫的書[7][8][9][10]

關於Embedded Microprocessor(嵌入式微處理器),除了上面提到的STM32MP151A之外,像是國內廠商新唐的NUC980[5][12]或者國外廠商Microchip/Atmel公司的SAM9G20[11]也是同類的產品

而Embedded Microprocessor(嵌入式微處理器)這個詞,有時與Z80/8086這種只有內含CPU的IC被放到嵌入式系統之中作為運算核心的狀況下所稱的Embedded Processor(嵌入式處理器),在名詞方面也會有在某些技術手冊或甚至一些書籍中被混用的狀況

Ref:
[3] Wikipedia -Zilog Z80: File:Z80_arch.svg https://en.wikipedia.org/wiki/Zilog_Z80#/media/File:Z80_arch.svg
[4] Wikipedia - Intel 8086: Intel_8086_block_scheme.svg , https://en.wikipedia.org/wiki/Intel_8086#/media/File:Intel_8086_block_scheme.svg
[6] 阿良的嵌入式系統技術學習區, "Arduino到底是什麼? MCU又是什麼?", https://jimsun-embedded.blogspot.com/2019/01/arduino-mcu.html
[7] 林銘波, 微算機原理與應用:x86/x64微處理器軟體、硬體、界面與系統 六版 (精裝本), 全華圖書
[8] 林銘波, 8051微算機原理與應用(精裝本), 全華圖書
[9] Muhammad Ali Mazidi, Janice G. Mazidi, Rolin D. McKinlay, The 8051 Microcontroller and Embedded Systems (2nd Edition), Pearson Education Inc.
[10] Sencer Yeralan, Ashutosh Ahluwalia, Programming and Interfacing the 8051 Microcontroller, Addison-Wesley Publishing Company
[11] Microchip 32-BIT ARM-BASED MICROPROCESSORS: SAM9G20, http://ww1.microchip.com/downloads/en/DeviceDoc/DS60001516A.pdf
[12] 新唐科技(Nuvoton) NUC980 Series Datasheet, https://www.nuvoton.com/resource-files/NUC980_Datasheet_EN_Rev1.0.pdf
[13] 阿良的嵌入式系統技術學習區, "現代計算機系統核心硬體常見平台的分類與簡介概述", https://jimsun-embedded.blogspot.com/2019/11/blog-post_22.html?fbclid=IwAR2-G5oveNJ-esTn7SCrBm_rxnF0IHOSoEorJFGzejbInLd5uBvfrANbilU