Hi,
這邊就不討論轉sw這個決定好或不好了,畢竟自己的選擇自己承擔。
而且資工畢業能夠當做大公司designer,也有過人之處才對。
純粹就你的問題回答:
: 1.
: 如果我要自學把開發板上的周邊裝置帶起來
: (e.g. USB/wifi/藍芽), 想請教建議的入門學習方式?
: 直接 Linux device driver嗎?
: 或者不用OS, 看有無現成的 library 抓下來用 ?
: 但這樣是否對底層硬體運作不夠了解?
: 因為lib procedure calls都幫你把底層該讀寫哪些register包好了?
: 或者有沒有上OS不是重點,重點是能講出你多了解這些周邊運作方式?
OS當然是重點,因為driver就是OS跟裝置溝通的橋樑,例如現在OS要送一筆資料
到USB/wifi/BT,這過程是怎麼發生的?
1.OS要找到裝置的driver
2.OS要呼叫driver把裝置帶起來
3.OS送資料給driver
4.driver轉換資料成USB/wifi/BT的格式
5.driver把上述的資料寫到裝置的register/fifo,完成傳輸
上面#1~#3都跟OS有關係,不同的OS作法會不同,所以OS很重要。
#4就是所謂domain knowledge,你要懂wifi/BT的protocol,才有辦法做對。
#5就是你所謂底層硬體運作,你要知道自家IC的運作方式才能正確把資料送到IC。
所以你可以想一想,用library有沒有辦法了解上述流程。
: 2.
: 我用的開發板目前已有可用的 Linux 版本, 似乎連device driver都有現成的,
: 我不確定是否該從 porting Linux 開始進行學習 ?
: 或者直接看部分code了解 kernel運作 e.g. 記憶體管理/檔案系統 +一些書單 ?
: (e.g. LDD or Linux Device driver之類的)
: 請教這部分有沒有建議的流程/網站(之類的)
: 可以有些題目,讓學習者自己改code 透過做中學深入了解 kernel運作?
這個問題有模糊地帶,實際上應該兩個問題:學習driver 跟 kernel。
這兩個我認為是兩件事情,或許有人認為是一樣的,因為目前裝置都太複雜了,很難
兩個精通。
舉例來說,如果你是做像wifi/BT等裝置,那重點應該是在driver,如果是做平台像是電視/平板/手機
,重點應該是在Linux kernel。 LDD(Linux Device driver)是很好的書,但我不
建議初學者看,這本比較像進階書。如果要練習的話,我建議可以用開發版跑一個非
Linux 的OS,然後練習把一個ethernet driver porting到這OS上面,透過這個過程
你應該會有一些體驗跟"感覺"。 再去讀LDD會有更多領悟。
: 3.
: 請教以上的部分, 該自學到怎樣的程度才有辦法在面試勝出 & 應付未來工作呢?
: 像我的情況, 從整合轉sw, 是否無法一步就跳到國外工作?
: 必須先在台灣找其他願意收無經驗sw的IC廠先歷練幾年?
: (btw我也考慮過內轉不過現在沒管道沒認識做sw的人Q_Q)
如果你是剛畢業沒多久,學歷還是面試最好的武器,加上你有做過IC 整合,
這個是一個優勢,單看你履歷怎麼包裝。
至於跳到國外工作,這應該是一個獨立議題,你就算FW/驗證都很強,還是沒法保證
一定可以到國外工作。 我可以想到的有兩個方法,一個是去國外念書,當然這就是
砍掉重練了,一個是我比較常看到的,就是想辦法去外商,接著把握機會轉到外商HQ。