總網頁瀏覽量

顯示具有 OS 標籤的文章。 顯示所有文章
顯示具有 OS 標籤的文章。 顯示所有文章

2026年4月3日 星期五

【ARM Cortex-A SoC 嵌入式 Linux 系統建置實戰研習:平台建置、移植與整合開發】課程大綱

 

課程大綱(講師將按照該梯次學員之整體背景、學習狀況與時間狀況而彈性調整增減該內容及順序):


1. 嵌入式系統簡介

   - 硬體平台(感測與控制類MCU V.S. 網路多媒體應用類之大型SoC)

   - 大型作業系統軟韌體 V.S. 裸機韌體之差異介紹(基礎觀念)

   - OS與non-OS之差異、用途等(闢除迷思)

   - 裸機(bare metal/non-OS)軟韌體範例介紹與現場demo

   - 嵌入式Linux作業系統與開源軟體專案簡介

   - 手動(Roll Your Ow/Build from Scratch)與使用buildroot或yocto建置BSP之差異

   - 本課程內容與使用高度現成平台(如Raspberry Pi與其官方主要推薦sop方式並作應用)之差異

   - 產業公司相關職缺介紹與概況

   - 如果本身是偏向純軟體背景,對於想成為一個能力堪稱完整的系統軟韌體研發工程師來說,該補足哪些知能?開發時要注意什麼?


2. ARM Cortex-A based SoC大型系統晶片與開發板硬體平台介紹

   - 電腦架構複習: 以各種微電腦晶片之原廠手冊內容為例

   - 課程實驗用之TI SoC AM3358架構、原廠技術文件介紹

   - 課程實驗用之開發板: Beaglebone black規格、電路圖(schematic)導讀、PCB Layout簡介

   - 基礎電子元件介紹、CMOS/TTL觀念、MOSFET/BJT電晶體

   - 記憶體之基礎觀念


3. 開發環境建置: 

   - Host PC端之虛擬機軟體下載與安裝

   - Host PC端之PC Linux distribution下載與安裝

   - Linux基礎指令操作

   - GNU交叉編譯工具鍊(GNU Toolchain)建置

   - Linux環境變數

   - COM Port相關原理(UART、UART to USB晶片模組、VCP等)

   - COM Port應用程式下載與安裝(如teraterm或putty等)

   - 課程實驗用開發板之儲存裝置空間配置規劃實作

   - Samba Server建置

   - SSH Server建置


4. 下列各單元之開源專案原始碼下載、配置(移植之過程)與編譯之步驟與背後原理,並使其成功執行於硬體開發板。包含各種Compile error情況該如何解決、編譯建置過程之log訊息閱讀。


4-1: U-Boot Bootloader(開機啟動程式)

    - 包含開機流程原理說明,從SoC內之ROM code至開機完成之各階段原理

    - 移植所需之.config

    - U-Boot常見指令

    - menuconfig

   

4-2: Linux kernel (Linux作業系統核心)

    - 移植所需之.config

    - uImage與zImage、LOADADDR與mkimage

    - dts/dtb 

    - Boot script建置(for uboot)及其內容指令與參數(如boot arguments)

    - 記憶體空間位址安排規劃、SoC之memory map說明

    - 如何透過uboot的TFTP load Kernel image到目標平台

    

4-3: Busybox Filesystem(檔案系統)

    - 創建rfs基本目錄for目標平台

    - 觀察busybox所需之動態連結函數庫

    - 建立基本device node

    - 創建init

    - 創建執行時期相關配置檔


5. 簡易Linux Device Driver驅動程式1: 基礎觀念

    - Linux系統架構(user/kernel space到硬體)、系統呼叫(system call)機制

    - device node(/dev/xxx)、major/minor number

    - kernel module與built-in觀念

    - 編譯建置方法

    - Makefile、Kconfig、.config與menuconfig

    - /proc與/sys簡介


6. 簡易Linux Device Driver驅動程式2: GPIO驅動程式

    - GPIO周邊裝置簡介

    - GPIO驅動LED之電子電路設計原理

    - 電路圖(schematic)導讀

    - BJT電晶體基礎特性及其作開關應用之電路原理

    - MMIO觀念

    - MMU、虛擬記憶體位址觀念

    - 周邊裝置之暫存器(register)位址與功能查找

    - 系統晶片之原廠技術資料手冊(Datasheet、Manual)內容導讀

    - pin mux

    - C語言重要觀念複習(如:指標、結構指標、暫存器之定址)

    - kernel driver範例程式逐行講解

    - kernel driver基礎kernel api介紹(如: ioremap)

    - 編譯建置.ko(kernel module)檔

    - 範例user app應用程式逐行講解

    - kernel driver與user app整合串接之實作原理


7. 訊號量測儀器操作

   - 三用電表

   - 示波器

   - 邏輯分析儀


8. Linux系統軟韌體開發之Debug除錯技巧與經驗分享


-----

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

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


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

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

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

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


2023年6月7日 星期三

著名的「鳥哥的Linux私房菜」網站/書籍 的 作者,是 崑山科技大學 的老師!

在資訊科技圈之中 相當著名的 「鳥哥的Linux私房菜」網站/書籍 的 作者 鳥哥 就是 蔡德明 教授,他已在 崑山科技大學 資訊傳播系 任教十幾年。

也許很多朋友不太清楚上述這個狀況,故在此分享。
 
長年來,許多台清交成等名校大學的相關領域師生,以及眾多產業界工程師,也因為 鳥哥的Linux教學網站和書籍 而受益良多。

而剛好從這學期開始,我自己也有幸至 崑山科技大學 兼任講師,實在是深感榮幸。

崑山科技大學 Kun Shan University
.


-----

歡迎各方洽談合作,務實/踏實追求共好。

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


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

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

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

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


2021年2月17日 星期三

這個學習區開設的課程目標是什麼? 要找科技業軟體開發相關的工程師工作,不是靠名校碩士學歷或者刷Leetcode比較快嗎?

【這個學習區開設的課程目標是什麼? 要找科技業軟體開發相關工程師工作不是靠名校碩士學歷或者刷Leetcode比較快嗎?】

有些人可能會聽說自己有同學或朋友出身於純軟體背景,在大公司當工程師,也沒有曾經透過架構相對較簡易的MCU去學習嵌入式軟硬體的基本基礎和原理,但也是能去大公司任職工程師的工作。

沒錯,很多大公司主要只看學歷文憑或者工作資歷。但事實上,基礎不紮實的工程師甚多,不少人只了解自身所被分配到的工作範疇,而不一定清楚整個系統的架構,也沒有紮實的理論基礎觀念。

這個園區的課程,沒辦法給你那些大公司喜歡看的表面學歷文憑學位或;也不是教你刷較偏向軟體職務的公司可能考的Leetcode性質白板題的那種課程;也不會教你死背死記資料結構的常見面試題目,然後只為了應付面試時的白板題(那個看ptt科技版的面試考題比較快)。

另外我個人認為,如果是做純韌體或一些嵌入式系統相關的部分,刷Leetcode並不一定很切合實際工作內容(嵌入式系統軟韌體開發的工作也有很多種,例如如果負責周邊裝置驅動程式或韌體,假設有個bug實際上其實是因為電路上的某個零件沒焊上,這種看一下板子和電路圖就能快速解決的問題,但不少純軟體背景又缺乏經驗的工程師總是去查軟體程式碼。或者只是因為不夠懂軟硬體整合而產生的bug,請問刷Leetcode的文化適用於所有軟韌體工作嗎? 有很多嵌入式系統工作,例如一些MCU based的嵌入式系統韌體開發,是韌體和一些電路觀念都必須懂的,不少公司會要求韌體開發人員同時要會設計一些介面電路並與韌體作系統整合性的設計,其實作嵌入式系統軟韌體開發,很大機率時常要去整合硬體系統架構,這些基礎都不是刷Leetcode能得到的,當然也不一定是去讀碩士班洗學歷就能得到,所以建議實際客觀去看實際的職缺所需)

但是這園區的課程可以給你踏實的嵌入式系統軟韌硬體專業相關基礎內容與知識,讓自己知道自己在公司做嵌入式系統軟韌體開發工作到底是在做什麼,以利於視野和長遠發展。這些課程內容主要是想補足大多數學校甚至是產業公司可能都沒辦法仔細教你的那一塊(在嵌入式系統軟韌體開發的方向上)。

如果想去那種只要文憑的公司上班就已經覺得滿足,那確實不一定適合這些課程,建議直接去洗個公司喜歡看的學歷然後死硬的準備傳統面試考題比較快。

這個園區開課不只是想賺錢(以一對一教授專業課程且又可以客製化調整課程內容的狀況來說,目前的收費是真的偏低,重點也是想要真正協助到學員能在產業有長期受用的專業基礎),能協助到學員實際且長遠的發展(就專業基礎面向來說),是這個學習區的設立初衷。

註: 再次強調上面提過的內容,嵌入式系統軟韌體的職務也有種類之分。如果是MCU韌體類的職務大多是希望工程師除了具備MCU基礎架構與韌體撰寫能力外,同時也懂一些周邊介面電路甚至有基礎設計能力,這類職務面試時可能會考些基本的電子電路原理,而非leetcode性質的這種較偏向純軟體職務的考法;而如果是較偏向純軟體的Embedded Linux系統(On 網路多媒體類的SoC平台)的軟韌體工程師的職務職缺,因為很多部門主管也是較偏向軟體背景,就有可能會考leetcode性質的東西或者偏向資料結構的考題。但不論哪一種工作職缺,只要是嵌入式系統,學習基礎、有系統軟硬體觀念,我個人認為才是最重要的,過去也曾經看過許多表面上是Embedded Linux系統的bug其實只是基本的硬體電路問題,但是因軟體工程師沒有相關專業知識背景而只知道要去不斷地往軟體程式碼的方向去找問題,導致時間的浪費(就算主管也未必會知道要去懷疑電路)。整體來說,不一定所有公司/單位/職務的面試就會完全符合/切合該職務的工作內容需求。

某些業界公司的軟韌體單位主管通常因為自身比較缺乏稍微跨領域的背景,尤其是有跑OS的產品的軟韌體單位的許多純軟體背景的主管和工程師對於基礎類比和數位電子電路的觀念是完全陌生的,許多這樣的單位的主管只喜歡用自己比較知道的資料結構和OS觀念來考面試者,而聽說現在某些公司的軟韌體單位流行用leetcode題目去面試/篩選應徵者。

但是,這樣的方式真的客觀嗎? 真的符合所有嵌入式軟韌體職缺工作內容之所需嗎?

再舉個例子,以嵌入式系統平台而言,GPIO是再常見不過的周邊(peripheral)單元,如果只是靠leetcode來學習/檢驗面試者,請問下面這張MCU的AP note中的GPIO等校結構圖,有多少純刷leetcode的人能理解其基本原理呢? 其實光是要對GPIO基本應用所作的初始化配置的韌體就需要理解這些了,否則難免會有Bug。而純軟體背景又只刷leetcode的人有辦法理解何謂push pull/open drain/floating這些屬於周邊內部基本常見名詞的基本含意嗎? 如果只刷leetcode而導致不能理解這些,軟韌體工程師如何能在不完全依靠硬體工程師的協助下獨力發現並解決問題呢? 所以嵌入式系統軟韌體工程師的面試來說,只用純軟體或者只用資料結構、OS等資訊工程系所的傳統學科觀念的角度去學習和篩選面試應徵者,是完全客觀、都符合工作內容所需的嗎? 主管可以都不懂電子電路嗎(包含類比與數位的基本觀念)? 如果周邊的初始配置或者外部電路有小問題時(當硬體工程師也不知道硬體有問題的時候),例如I2C的pull-up resistor沒接、而內部也沒配置啟用,只有軟體背景有能力解決嗎? 有辦法釐清是軟韌體還是硬體的問題嗎? 需要浪費多少無謂的時間? 大家可以自行思考看看。


 STM32 AN4899 Application note


而反過來說,也有不少公司是只有懂上層純軟體(應用程式)和最底層的電路的人,而完全沒有OS觀念。


相關文章:  【課程介紹】本學習區已開設 & 未來即將開設之嵌入式系統軟韌體技術課程 & 課程特色!