Re: [請益] 非本科韌體技能樹該怎麼點
不知道你說的韌體是指什麼? 嵌入系有很多種:
* 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, 所以只要痛苦過一次,
很多平台都可以用。
※ 引述《ming0071 (ming)》之銘言:
: 背景:北科非電資大四,畢業後也是在北科讀碩非電資(不打算再重考),碩班未來是跟自: 走車相關的,目標大概是遠離機構設備做韌體/嵌入式系統(不太確定這兩個的詳細差別: ),也不太清楚這個校名科系有沒有辦法
: 目前有修過資工系的資料結構了,不過是用python,現在在考量是該怎麼選擇
: 1. 接著繼續修演算法的課為主,碩班的課有餘力再修
: 2. 修碩班的課為主,把學分拿到,有餘力再修演算法
: 3. 買一塊板子來把C再好好的練熟,也用C練著寫基礎的資料結構,再多了解一些硬體的: 知識
: 爬了文後目前的理解是 硬體的知識>C、C++ >資結、演算法、OS,但是演算法、OS也是蠻: 重要的,不知道該先著重去了解哪一塊好?
: 也想請教修演算法的課是必要的嗎?或者是修作業系統會比演算法來的有效益呢?因為爬文: 後發現提到作業系統的次數其實還比演算法多一些,但又怕直接讀作業系統會看不太懂。: 如果要挑選一個先了解的話要選哪個好呢? 又或者其實都一起了解才最優?
: 最後想問是該多練C還是C++好,發現有的人說C,有的人說C++,似乎都各有各的說法
--
紙上得來終覺淺,絕知此事要躬行。
--
Design house 的 firmware engineer 還要看懂奇怪
的 register 跟幫忙做各種 workaround
謝謝大大分享
謝謝分享!
推一下,編制中型以下的公司是差不多很可能前三個都要
碰一點。如果你還遇到有些產品即時性需求高會用自己os
的公司,那porting還有os概念都是逃不掉的
但實際上如果是在公司裡面實戰,很少讓新人自幹,也不
太可能希望一個新人這些都會XD
Linux userspace progrmming的話聖經就是TLPI
推分享
推推
推推
清楚明瞭,連我這外行都看得懂,而且很有系統化的介紹
推推
17
首Po背景:北科非電資大四,畢業後也是在北科讀碩非電資(不打算再重考),碩班未來是跟自 走車相關的,目標大概是遠離機構設備做韌體/嵌入式系統(不太確定這兩個的詳細差別 ),也不太清楚這個校名科系有沒有辦法 目前有修過資工系的資料結構了,不過是用python,現在在考量是該怎麼選擇 1. 接著繼續修演算法的課為主,碩班的課有餘力再修4
因為科系不合,那我建議投系統廠。 (而且不會是一線。) C語言花時間練熟。太新的C++不用練。 很多晶片停在C++03,就萬年不升級了。 那C++03到C++20中間變化多大。13
小魯本科學碩,在IC Design House寫過幾年FW 分享自己的經驗以及一點淺見 要進這行的順序: 1. C練熟,至少要有大一計概與程設課程等級 具體目標是用C寫出八皇后、河內塔...等經典問題9
這個玩具熟悉之後, 差不多該會的都用過了: Toolchain/Makefile/GDB/OpenOCD/DFU(Device Firmware Upgrade,USB)/RTOS 不買硬體也有 YT 影片可以看。也可以用 QEMU 來試用。 1.
爆
[心得]從系統廠BSP RD到豬屎屋Firmware engineer網誌好讀版: (with自製解說圖XD) 整理目前從系統廠擔任BSP RD轉職到IC design house擔任Firmware engineer 一年半以來的心得...爆
Re: [請益] Linux device driver好不好自學上手?同學你好,我最近跟學生一起編撰《The Linux Kernel Module Programming Guide》, 這本電子書原本在 2007 年 (相當於 Linux v2.6.20 釋出的年代) 就停止更新,但秉持 「路見不平,拿 patch 來填」的精神,我們就接手維護,更新書中描述和對應的範例程 式碼到 Linux v5.x (配合 Ubuntu Linux LTS 的發布)。可線上免費存取:30
[請益] Offer 請益 (原公司/群聯)小弟從去年底就有換環境的意願(外商or豬屎屋) 三年系統廠(工業控制)經驗,研究所系統晶片組 會verilog / embedded system design 有去面 GOOGLE新店的派遣職缺,不過被網友一致認為要多考慮 所以最後並沒有接受此職缺22
[請益] Linux device driver好不好自學上手?各位版友好 最近小弟有考上資工在職專班 有問到教授是做無線網路演算法 他說要熟linux device driver怎麼寫 但是無奈小弟是用python做儀控比較多13
[請益] 面試分享與請益代 PO, 目前面臨轉領域問題,以下是最近面試的過程與結果。 以下 N 為 gg未調薪前, (一) 海邊 FIT: 職務名稱:智慧音箱嵌入式 LINUX 工程師10
Re: [請益] 韌體初學者韌體工程師的工作內容其實範圍還滿大的 最小的4~7bit MCU,這種幾乎都用組語在寫 大概也不會有職缺純做這種MCU 一堆被ARM打趴的通用MCU,例如8051 PIC AVR MSP430 ..... 不是沒人在用,只是這些都會越用越少,也不推去學10
Re: [討論] EDA與軟韌體未來性哪個比較好呢?本ID搞Linux device driver 以前只搞周邊,現在努力轉型platform owner中 來說一下軟韌要k那些書 C語言要念到指標資料結構滾瓜爛熟 演算法倒是不用,基本的知道就好5
[請益] USB device開發請益最近因為想要弄一些東西,所以開始自修USB相關開發 因為自己對USB device / host / host driver幾乎是完全陌生, 所以想先跳過host driver的部分,之後再回來補QQ 目前想要完成的目標: 1. PC 跟device能夠透過USB交換資料,2
Re: [請益] 請問為什麼純軟比韌體好玩?推 flypaper: 我身邊純軟至上的人 大多對資料結構與演算法不熟悉 07/23 18:33 → flypaper: 又對CPU硬體架構與編譯器的行為沒有概念 07/23 18:33 → flypaper: 不過可能是樣本數大多位落在 網路前後端吧 07/23 18:35 阿肥我扯這些 只是曾經看到有些人只寫過應用層 卻說軔體很無聊 工作盡是查spec1
[請益] 職能發展方向請教小弟EE master畢業,JAVA會寫,第一份工作從C++上位機(PC程式)開始開發,對C++/OO P還算熟悉 ;(但C++實在太深了,也只學到C++03) 後來在工廠玩了一點adaptive control和多變量分析,接著又回來碰mcu,因爲有電子學 背景,還算能上手單晶片開發和週邊電路的除錯,對韌體算是有興趣,也會往更深入的編