Re: [請益] 非本科韌體技能樹該怎麼點

軟工

11100

不知道你說的韌體是指什麼? 嵌入系有很多種:

* embedded linux
* 使用 rtos, 例如: freertos/vxworks
* bare metal 程式
* 手機
* 其他:

每種都有自己需要修練的功課, 但大概都脫離不了 c 語言,
除了 bare metal 都需要一些 os 相關知識,
也不是 bare metal 不需要 os 相關知識,
而是在 bare metal 要打造 os 機制蠻難的,
選一個 os 來用會比較容易。
雖然 OS 觀念大同小異, 但大同之中的小異就足夠讓人傷透腦筋。

細節很多, 提一些大方向。

embedded linux:
device driver
porting 到新 chip
user mode 應用程式

這 3 個各有其功課要修練, porting 到新 chip 大概是最難的,
一般人也比較沒有機會練習到, 大概連第0手資料也沒有。

device driver 由於和硬體有關, 會和硬體打交道, 需要使用
一些硬體相關工具, 示波器之類的。也要熟悉 linux device driver
架構。這個要練習比較麻煩, 書籍大概都過時, 需要自己看第0手資料,
也就是自己要看 device driver souce code, 然後想辦法把
自己要 porting 的硬體寫出來。

user mode 應用程式有很多書籍可以學習, 要看懂他們並不容易,
需要花費不少時間。
尤其是 signal/fork/thread 議題都很難搞懂,
但這只是其中一部分而已。

https://descent-incoming.blogspot.com/2020/03/linuxunix-signal.html

signal 議題可以看看這篇, 知道 signal 有哪些複雜的議題。

rtos 則是看使用那一套, 就需要去學習其中的用法,
使用起來應該會和 linux 有點差異。
有 ice 會比較容易 debug, 一般大概也會需要用 ice。

bare metal 程式也是很難, 需要從開機程式開始撰寫,
如果 chip 廠商有給範例或是相關函式庫, 也許會簡單一些。
但如果 c 基礎不夠, 可能有 bug 時, 不太容易找到問題。
會需要使用 ice 的經驗。

至於課本的演算法, 資料結構, 不能說不重要,
但可以從基本先熟悉, 不用著急學比較難的,
例如 queue, linked list, 基本 tree,
avl tree, rbtree 可以先緩點。

另外大概都會需要一些反組譯的能力,
所以還需要略懂該 cpu 的組合語言。

在沒有 ice 下或是沒有開發版, 可以使用 qemu 來練習開發,
例如可以使用 qemu 模擬 raspberry pi 2/3,
因為通常沒有 ice 來連接 raspberry pi 2/3,
這樣就可以得到 ice 等級的 debugger,
使用 qemu + gdb 來除錯, 一開始應該會覺得很痛苦,
但取得這個能力是很重要的。

我甚至用 qemu + gdb 來 debug uefi 程式,
因為都是使用 gdb, 所以只要痛苦過一次,
很多平台都可以用。

: 背景:北科非電資大四,畢業後也是在北科讀碩非電資(不打算再重考),碩班未來是跟自
: 走車相關的,目標大概是遠離機構設備做韌體/嵌入式系統(不太確定這兩個的詳細差別
: ),也不太清楚這個校名科系有沒有辦法
: 目前有修過資工系的資料結構了,不過是用python,現在在考量是該怎麼選擇
: 1. 接著繼續修演算法的課為主,碩班的課有餘力再修
: 2. 修碩班的課為主,把學分拿到,有餘力再修演算法
: 3. 買一塊板子來把C再好好的練熟,也用C練著寫基礎的資料結構,再多了解一些硬體的
: 知識
: 爬了文後目前的理解是 硬體的知識>C、C++ >資結、演算法、OS,但是演算法、OS也是蠻
: 重要的,不知道該先著重去了解哪一塊好?
: 也想請教修演算法的課是必要的嗎?或者是修作業系統會比演算法來的有效益呢?因為爬文
: 後發現提到作業系統的次數其實還比演算法多一些,但又怕直接讀作業系統會看不太懂。
: 如果要挑選一個先了解的話要選哪個好呢? 又或者其實都一起了解才最優?
: 最後想問是該多練C還是C++好,發現有的人說C,有的人說C++,似乎都各有各的說法

--
紙上得來終覺淺,絕知此事要躬行。

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.200.83.215 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1676189634.A.BA2.html
withoutshine1樓Design house 的 firmware engineer 還要看懂奇怪 02/12 16:40
withoutshine2樓的 register 跟幫忙做各種 workaround 02/12 16:40
nicetw20xx3樓謝謝大大分享 02/12 17:26
ming00714樓謝謝分享! 02/12 21:58
alex702665樓推一下,編制中型以下的公司是差不多很可能前三個都要 02/12 22:26
alex702666樓碰一點。如果你還遇到有些產品即時性需求高會用自己os 02/12 22:26
alex702667樓的公司,那porting還有os概念都是逃不掉的 02/12 22:26
alex702668樓但實際上如果是在公司裡面實戰,很少讓新人自幹,也不 02/12 22:30
alex702669樓太可能希望一個新人這些都會XD 02/12 22:30
alex7026610樓Linux userspace progrmming的話聖經就是TLPI 02/12 23:48
viper970911樓推分享 02/12 23:54
MoonCode12樓 02/13 01:29
v8686106213樓推推 02/13 08:58
e1251816633914樓推推 02/13 09:49
DrTech15樓清楚明瞭,連我這外行都看得懂,而且很有系統化的介紹 02/13 12:27
timofEE16樓推推 02/15 22:56
knme17樓推推 02/17 11:40