「韋東山」機(jī)會總是留給有準(zhǔn)備的人_嵌入式Linux學(xué)習(xí)經(jīng)驗

最近電子發(fā)燒友(以下稱'發(fā)燒友')采訪了韋東山老師,本文是采訪原稿,展示出來讓大家更深入了解韋老師的同時也進(jìn)一步學(xué)習(xí)嵌入式Linux經(jīng)驗。
機(jī)會總是留給有準(zhǔn)備的人

發(fā)燒友:
為什么要學(xué)習(xí)掌握ARM裸機(jī)?ARM裸機(jī)與從事嵌入式工程師職業(yè)關(guān)聯(lián)度如何?
韋東山:
我們講解的ARM裸機(jī),特殊之處在于:不使用IAR/KEIL/MDK等軟件,而是在純粹的Linux環(huán)境下從0寫代碼。這些好用的開發(fā)工具屏蔽了太多的技術(shù)細(xì)節(jié),比如:位置無關(guān)碼、重定位、中斷環(huán)境的保存與恢復(fù)、鏈接腳本。而這些細(xì)節(jié),在后續(xù)的bootloader學(xué)習(xí)中是需要的。
除上述細(xì)節(jié)外,ARM裸機(jī)的學(xué)習(xí)目的在于:掌握如何編寫程序來控制硬件。后續(xù)的“Linux驅(qū)動=軟件框架+硬件操作”,我們先在單純的裸機(jī)學(xué)習(xí)中掌握硬件操作,在后面的學(xué)習(xí)中就可以把精力放在驅(qū)動軟件框架上。
我們學(xué)習(xí)ARM裸機(jī)的目的,是去學(xué)習(xí)后續(xù)的Linux課程,進(jìn)階為Linux系統(tǒng)工程師。不是要讓你繼續(xù)從事單片機(jī)開發(fā),成為單片機(jī)工程師。
在技術(shù)層面,Linux系統(tǒng)工程師回頭從事單片機(jī)開發(fā),輕而易舉;但是現(xiàn)在不開始著手Linux的學(xué)習(xí),后續(xù)轉(zhuǎn)型很麻煩。2004年我們使用51單片機(jī)從事車載電話開發(fā),所做的軟件已經(jīng)算是單片機(jī)層面頂尖水平了──我們可以在單片機(jī)上開發(fā)自己的操作系統(tǒng)。
但是,我們同事紛紛感覺到了危機(jī),單片機(jī)能做的事情太單一了。當(dāng)年流行wince,Linux剛起步,我們選擇學(xué)習(xí)Linux,現(xiàn)在wince已經(jīng)沒人提及,而Linux仍如日中天。中興公司也是在2005年才全面從vxwork切換到Linux的,我有幸進(jìn)入中興與他們一起研究Linux。
在收入方面,大家盡可以去51job等招聘網(wǎng)站搜“單片機(jī)”、“Linux”,后者一般是前者2倍以上。
在發(fā)展方面,有了Linux知識,幾乎通吃所有產(chǎn)品。我從事過網(wǎng)絡(luò)會議系統(tǒng)、監(jiān)控攝像頭、樓宇對講系統(tǒng)、安防、廣告機(jī)方面的開發(fā),我只是開發(fā)底層系統(tǒng),不是開發(fā)APP,這些產(chǎn)品通通使用Linux?,F(xiàn)在興起的機(jī)器人、人工智能,它們要落地的話,運行Linux系統(tǒng)的硬件是必選項。
就身邊事例而言,我是2008年離開中興,隨后幾年里有幾個同科室的同事也都離開了,他們都做Linux系統(tǒng);現(xiàn)在都做得很不錯。有人在聯(lián)想做Android開發(fā),有人在做POS機(jī),有人自己創(chuàng)業(yè),他們或是團(tuán)隊領(lǐng)導(dǎo),或是有股份。
發(fā)燒友:
根據(jù)您的經(jīng)歷及見聞,現(xiàn)在ARM嵌入式工程師前途如何?含金量、薪資待遇呢?
韋東山:
理想很豐滿,現(xiàn)實很骨感。所有行業(yè)的從事者都是在一個金字塔里,工作好收入高離家近假期多的人,都只是少數(shù)。我只能說,平均而言,ARM嵌入式工程師待遇較好,發(fā)展前途不受限。
說好話之前,先說丑話。
ARM嵌入式工程師入門門檻高,職位需求相對APP來說是少的,很多職位需要你有經(jīng)驗。
所以,有一部分同學(xué)最終只能轉(zhuǎn)行:轉(zhuǎn)而做單片機(jī)或APP開發(fā)。
但是,ARM嵌入式工程師所處位置非常好,向下跟硬件工程師打交道,向上跟APP工程師打交道,可以參與整個系統(tǒng)的開發(fā),前途不受限。
我是個宅男,只能舉身邊的例子:我在中興時從事嵌入式系統(tǒng)的同事,發(fā)展都很不錯。
我的科長,擁有專業(yè)的Linux底層知識的同時,極具大局觀,他向上研究APP的相關(guān)知識、相關(guān)協(xié)議,上下兼通,是中興的產(chǎn)品經(jīng)理、總工了。
同事A,早年從因POS機(jī)開發(fā)(用單片機(jī)),在中興里天天加班深研Linux技術(shù),現(xiàn)在在創(chuàng)業(yè)公司里當(dāng)技術(shù)頭頭,有股份。加班多,但是收入高。
同事B,在中興里是做APP開發(fā),后跳槽到OPPO后,深研底層開發(fā),早幾年單是年終獎就是我的年薪,現(xiàn)在自己創(chuàng)業(yè)。
同事C,女,跑到IBM做服務(wù)器相關(guān)的工作去了,嵌入式Linux的知識絕對是幫上大忙了。
同事D,深研Linux系統(tǒng)知識,人稱大師,從不加班(羨慕死人了),有大BUG必定請他出馬、出差。
對于嵌入式工程師,把Linux知識吃透了,可以游走于幾乎所有行業(yè),因為這些產(chǎn)品基本上都要用Linux。
想當(dāng)領(lǐng)導(dǎo)的話,向上學(xué)習(xí)一下APP、業(yè)務(wù)知識,你就可以掌握整個產(chǎn)品的開發(fā)全流程了。
想創(chuàng)業(yè)的話,向下你知道需要什么樣的硬件,向上你知道需要請哪方面的APP工程師。
對于暫時找不到嵌入式LINUX職位的同學(xué),不用擔(dān)心,你總會發(fā)現(xiàn)機(jī)會的。
做單片機(jī)產(chǎn)品的公司,產(chǎn)品升級的話必定要用Linux,到時你就是公司掌握先機(jī)的人;做APP的話,如果跟硬件相關(guān),你的嵌入式LINUX知識會提供很多幫助。
發(fā)燒友:
一個合格的嵌入式工程師,需要具備哪些性格和職業(yè)特征?一些理工科學(xué)生或剛畢業(yè)不久的工程師老說迷茫,產(chǎn)生迷茫的原因有哪些,為什么?怎么克服?
韋東山:
嵌入式工程師,必須具備的性格和職業(yè)特征:
究根究底:操作系統(tǒng)層面的問題,必須徹底弄清楚原因,徹底解決,否則隱患巨大。
絕對耐心:嵌入式工程師的代碼量很少,多數(shù)時間是在學(xué)習(xí)新知識、協(xié)助調(diào)試。我在中興工作時,曾經(jīng)花了一個月來捕捉、解決一個BUG,最后只增加了一條指令。BUG隨機(jī)出現(xiàn),我不斷地重啟系統(tǒng)、重啟軟件;根據(jù)新現(xiàn)象不斷地現(xiàn)學(xué)現(xiàn)用。
大局觀:你寫的每一個驅(qū)動,功能上要實現(xiàn),性能上也要實現(xiàn)。需要結(jié)合產(chǎn)品的實際需要,根據(jù)APP的特點,調(diào)整你的程序。調(diào)試BUG時,從APP到驅(qū)動再到硬件,各種可能的問題都要考慮。
迷茫,唯一的原因就是對未來感到不確定。
我的專業(yè)是物理,在大一大二時深感迷茫,不知道畢業(yè)后能做什么,我選擇了學(xué)習(xí)第2學(xué)位:計算機(jī)。
我剛工作時用的是51單片機(jī),對所用的落后技術(shù)也深感迷茫,我選擇辭職自學(xué)Linux。
我在中興工作時,加班多、工資少、房價高,仍然迷茫,選擇創(chuàng)業(yè)。
創(chuàng)業(yè)過程中,我錄制Linux視頻,期間IOS火爆、Android APP火爆,很多人趁著風(fēng)頭做IOS、Android培訓(xùn),我也迷茫,最后選擇不跟風(fēng):現(xiàn)在這些培訓(xùn)很快就冷卻了。
我也算工作15年的老工程師了,也接近40歲了,仍不時覺得迷茫。但是我深信兩句話:要收獲,必須先付出;吃得苦中苦,方為人上人。
對于迷茫的工程師,我建議:
根據(jù)自己的興趣,選擇不太偏門的方向,潛心學(xué)習(xí);選定方向后,不跟風(fēng)不追熱門。
發(fā)燒友:
您是否遇到過女嵌入式工程師?在嵌入式工程師職業(yè)上女性有什么優(yōu)勢和劣勢?
韋東山:
我在中興時就帶過一個女同事,但是在這領(lǐng)域女性不多。
我認(rèn)為嵌入式工程師特別適合女性,相對于APP開發(fā),嵌入式工程師工作中的需求交化不大,代碼量也不大,不需要天天加班。
劣勢在于,嵌入式工程師入門門檻高,需要硬件知識、良好的英文閱讀能力、多層面的軟件知識(操作系統(tǒng)、驅(qū)動程序、APP開發(fā)),學(xué)習(xí)強(qiáng)度是挺大的。前期需要付出挺多。

名師引導(dǎo)更容易入門
發(fā)燒友:
很多新手學(xué)習(xí)ARM裸機(jī)都會很迷茫,請問在學(xué)習(xí)ARM裸機(jī)過程中容易遇到哪些坑?
韋東山:
很多小坑,如果自己去解決的話,估計要花上幾個小時,但是有經(jīng)驗的人一眼就能看出來。
最奇葩:拿到開發(fā)板,把電源插到耳機(jī)孔去了。
大多數(shù):粗心,很多人拼寫命令時寫錯了,結(jié)果忙上半天找原因。
儲備知識不足:開始學(xué)習(xí)時,我們只能照著文檔寫命令,這些命令的作用后面才會說明;如果當(dāng)場就講這命令,課程就會又臭又長。
所以,我們都會建議:按著視頻學(xué)習(xí),不懂的、沒講到的,先放著;后面學(xué)完你就全懂了。
發(fā)燒友:
成為一名具備一定開發(fā)能力的嵌入式Linux開發(fā)工程師需要具備哪些知識?
韋東山:
我先說合格的標(biāo)準(zhǔn)吧:能在一個新的板能上搭建出Linux系統(tǒng),能寫出需要的驅(qū)動程序。
所以,需要以下知識:
硬件知識:能看懂電路圖,看懂芯片手冊,看懂硬件協(xié)議。
英文閱讀:上述資料基本是英文的。
C語言:嵌入式工程師常用語言就是C。
操作系統(tǒng)原理:有助于幫助我們理解Linux源碼。
常用驅(qū)動程序框架:精通幾個驅(qū)動程序后,領(lǐng)悟原理后,才有能力開發(fā)新的驅(qū)動程序
紙上得來終覺淺,你學(xué)完后,必須找一塊不同的開發(fā)板,在上面把所學(xué)過的程序自己寫出來,這樣才能真正掌握──這也是我對新同事的要求。
實際上,很多公司招聘時要求有工作經(jīng)驗。對于嵌入式工程師,這個經(jīng)驗非常容易得到:你換一個不同的板子練習(xí)就可以了。
發(fā)燒友:
在學(xué)習(xí)ARM裸機(jī)或ARM Linux過程中,得到資深名師或?qū)煹闹敢心男┖锰帲?/p>
韋東山:
學(xué)習(xí)過程中,很多因為粗心導(dǎo)致的問題層出不窮,自己去解決的話很花時間;
嵌入式學(xué)習(xí)過程中,需要的知識非常廣,自己臨時去學(xué)習(xí)的話,進(jìn)度很慢;能否跳過,自己也不知道。這時候如果能有人指引,效率會很高。
我在2005年學(xué)習(xí)時,市面上基本沒有資料,我學(xué)非常痛苦,在論壇上瘋狂發(fā)貼,那些問題現(xiàn)在回頭看非常簡單,但是當(dāng)時就把我卡住了:茶飯不思,時不時想砸電腦。
發(fā)燒友:
請問韋東山老師最終為何選擇嵌入式授課教育
韋東山:
生活與興趣推著我走上這條路,沒什么情懷。
我2005年適職自學(xué)Linux時,過程痛苦,把自己的學(xué)習(xí)所得寫了一篇文章:S3C2410完全開發(fā)流程,發(fā)布在網(wǎng)上;然后就去中興上班了。
此文流傳甚廣,人民郵電的編輯聯(lián)系我,要我出書。
我答應(yīng)下來,但是因為一邊上班一邊寫書進(jìn)度緩慢,于是在2007年辭職專心寫書。
2008年書出版了,錢花光了,于是接受華清遠(yuǎn)見的邀請,去做兼職講師。
講課過程中,我采用完全不同的風(fēng)格:從0寫代碼,邊講邊寫,大受歡迎,效果超好;慢慢有了名氣后,游走于多家培訓(xùn)機(jī)構(gòu),天天講課,天天現(xiàn)場寫代碼。
這樣天天做同一件事,天天寫同樣的代碼,實在是煩死人,決定自己錄視頻算了。
于是2011年底,發(fā)布第1套視頻,承蒙學(xué)生們、工程師們厚愛,他們幫我一起打擊盜版,口口傳播,于是也就一直堅持到現(xiàn)在。
我發(fā)現(xiàn),我有講課的能力,可以把復(fù)雜的問題講得非常清楚,非常形象。
我希望,眾多像我當(dāng)年初出校園的學(xué)生,他們有學(xué)習(xí)的渴望,我能幫他們一把。
所以,一直以來,我不吹牛,不強(qiáng)拉人學(xué)習(xí),想適合學(xué)習(xí)的人不強(qiáng)求。
如果你要學(xué)習(xí)嵌入式系統(tǒng),而我恰好經(jīng)驗豐富,你愿意的話我就教你。
悅已之作,方能悅?cè)?。這是我們公司的格言,如果做出來的產(chǎn)品你自己都不喜歡,別人怎么會喜歡呢。
在工作中,我就經(jīng)?;仡^去重看視頻(我也會忘記),從未感到臉紅,因為我都是用心錄制的。