初學(xué)嵌入式開發(fā)ARM的學(xué)習(xí)方法
這個(gè)題目很大,給人一種感覺(jué)我好像很成功,其實(shí)不然。實(shí)際上自己水平不高,甚至很低,但是做過(guò)了一些曲折的學(xué)習(xí)道路,同時(shí)把自己真實(shí)的學(xué)習(xí)歷程表達(dá)出來(lái),希望對(duì)后來(lái)者有借鑒的意義,甚幸!
工作三年、幾成廢人!
我2000年畢業(yè)于華中地區(qū)的一個(gè)理工科大學(xué),專業(yè)是機(jī)械電子,我當(dāng)時(shí)已經(jīng)簽了一家內(nèi)陸某個(gè)省級(jí)機(jī)關(guān)工作,家里八輩是農(nóng)民,并且很偏遠(yuǎn),能夠進(jìn)入這樣的 地方是祖墳有風(fēng)水。但在畢業(yè)前夕有個(gè)進(jìn)入it的機(jī)會(huì),我本想進(jìn)去的,家里人極力反對(duì),阻力可想而知。同時(shí)要交4000元的違約金,對(duì)我來(lái)說(shuō)是天文數(shù)字。大 學(xué)里的費(fèi)用很多是借的,幾乎將近一半的費(fèi)用是在大學(xué)勤工儉學(xué)掙的,為了省錢,高中一個(gè)學(xué)期回家一次,大學(xué)一年回去一次。并且我個(gè)人也有特殊的人生背景(悲 景更確切),這里不多說(shuō)了,寫十篇也寫不完,同時(shí)偏離主題。這樣我就參加了工作。一張報(bào)紙一杯茶的日子,幾乎下班后有種很空虛和恐慌的感覺(jué)。在工作中雖然 是與自己專業(yè)有點(diǎn)關(guān)系,但是很少。專業(yè)幾乎荒廢。我自己也思考,如果再不出去,自己將會(huì)成廢人,只好讓國(guó)家養(yǎng)了。兩年后決定出去,但是幾成廢人,誰(shuí)要呢, 只好到學(xué)校去鍍金。這是中國(guó)教育和社會(huì)的悲哀!
至于專業(yè)就改為計(jì)算機(jī)方面,聽說(shuō)好找工作,我說(shuō)實(shí)話不是很對(duì)計(jì)算機(jī)特別感興趣,生存第一需要。不要笑我,哈哈!
考研成績(jī)出來(lái),超過(guò)了國(guó)家線幾十分。那個(gè)方向要兩個(gè),我第三,但是那年非碘,不面試就按分?jǐn)?shù)來(lái)排,自然我落選了。其實(shí)給我面試機(jī)會(huì)也不一定要我,哈哈,自己幾斤幾兩很清楚。
最后調(diào)劑到另外一個(gè)學(xué)校,交錢,咬咬牙,交吧!現(xiàn)在仍然債臺(tái)高筑!
進(jìn)入學(xué)校前夕為什么要把這段列出,看后就知道了。
單位有網(wǎng)絡(luò),經(jīng)常上網(wǎng)查些英語(yǔ)資料,在那里唯獨(dú)英語(yǔ)沒(méi)有丟很多。于是我就在網(wǎng)上查資料,學(xué)什么好呢,最后確定學(xué)嵌入式把,聽說(shuō)跟硬件相對(duì)比較緊密!而我 在大學(xué)里多少學(xué)習(xí)了數(shù)字電路,單片機(jī)等,所以多少也有所利用,不會(huì)真的一無(wú)所知。當(dāng)然在這之前也自學(xué)過(guò)數(shù)據(jù)結(jié)構(gòu),計(jì)算機(jī)組成原理等。C 語(yǔ)言在大學(xué)就學(xué)了。哈哈這就是我的家底。
我知道自己的基礎(chǔ)差,于是我就拿操作系統(tǒng),數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)、c++來(lái)看,機(jī)關(guān)有這個(gè)好處,空余時(shí)間多,于是平常就看書,很痛苦,沒(méi)有人請(qǐng)教。
另外就上網(wǎng)到論壇上去,我就到各個(gè)專業(yè)的技術(shù)論壇,其實(shí)是電子論壇和嵌入式論壇。我?guī)缀鯖](méi)有發(fā)帖,幾乎把幾個(gè)大型的出名的論壇的帖子翻遍了,雖然有很多重復(fù)的,我才知道嵌入式是個(gè)什么東東。這些帖子對(duì)我以后的學(xué)習(xí)產(chǎn)生了極大的影響。
最關(guān)鍵兩點(diǎn):1、嵌入式是什么?
2、嵌入式需要哪些知識(shí)?
知道了這兩點(diǎn),好辦!我就開始規(guī)劃學(xué)習(xí)路線。計(jì)算機(jī)的基本理論不能丟,于是重點(diǎn)看組成原理,數(shù)據(jù)機(jī)構(gòu),操作系統(tǒng)、c++.同時(shí)論壇上了解到,實(shí)時(shí)操作系 統(tǒng)ucos是一個(gè)很好的嵌入式操作系統(tǒng),對(duì)初學(xué)者很好。于是我就買了一本書,但是代碼在電腦里調(diào)不通,網(wǎng)上也有很多相同的問(wèn)題,我就看書,分析代碼,一遍 不行就兩遍,三遍,這樣才看了入了門,才知道什么是進(jìn)程。原來(lái)看操作系統(tǒng)書時(shí),根本就不知道進(jìn)程是個(gè)什么東西。在這段時(shí)間掌握的東西不多,但是,對(duì)我以后 的影響很大,我想起了大學(xué)時(shí)一個(gè)同學(xué)跟我說(shuō)過(guò)了一句話:大學(xué)里最重要的不是學(xué)到了什么,最重要的是學(xué)會(huì)怎么學(xué)!大概是這個(gè)意思。
進(jìn)入我的避難所對(duì)我來(lái)講,再次進(jìn)入大學(xué)不再是大學(xué),而是避難所。希望這次進(jìn)入給我喘氣和養(yǎng)精蓄銳的機(jī)會(huì)和時(shí)間。我是這樣認(rèn)為和實(shí)踐的。
在學(xué)校我有三件事:上課,上圖書館,上網(wǎng)。
對(duì)于上課,學(xué)校開了很多課程,非常好,很多是名人名師講解,于是很多同學(xué)都想學(xué),都去聽。我也考慮過(guò),最后放棄。我是這樣認(rèn)為的,時(shí)間是有限的,什么都 想學(xué),什么都學(xué)不成。于是我把我自己學(xué)的課進(jìn)行了分化,一般的課程通過(guò)就行,重要的一定好好學(xué)。我希望不要什么爭(zhēng)論學(xué)習(xí)課程多和少的問(wèn)題,這僅僅是我的看 法。所以我的成績(jī)應(yīng)該是很差的。分?jǐn)?shù)低。好在后來(lái)的單位沒(méi)有要我的成績(jī)單,否則就慘。
我個(gè)人感覺(jué)是上圖書館的效率比在寢室里高多了,這是我的經(jīng)驗(yàn)。
上網(wǎng),我給自己定了規(guī)矩:不玩游戲,不灌水,少看電影!因?yàn)闀r(shí)間對(duì)我來(lái)說(shuō)太少和寶貴了,我沒(méi)有資格和資本來(lái)浪費(fèi)這些。上網(wǎng)我就在幾個(gè)重要的專業(yè)技術(shù)網(wǎng)站上逛,下載技術(shù)資料?!?br> 有人會(huì)問(wèn),您下了那么多資料,怎么看的完和消化的了呢?
我是這樣對(duì)待這個(gè)問(wèn)題的:1、 網(wǎng)上資料比較零散,不系統(tǒng),但是如果把差不多的東西收集起來(lái)看就相對(duì)完整了,(嵌入式的圖書就是這兩年特別多,特別是2004年,簡(jiǎn)直是向外涌!2003年想買本嵌入式,特別是嵌入式linux的不多。)
2、 對(duì)于像我這種入門的來(lái)說(shuō),很多看不懂,沒(méi)關(guān)系,反復(fù)看,我個(gè)人對(duì)學(xué)習(xí)方法的一個(gè)總結(jié)是:重復(fù)是最好的老師!
3、 即使有的用不上,也可以收集以后用的上時(shí)查閱。
但是我并非什么都要,目前我的技術(shù)路線是嵌入式linux,所以像wince之類基本上不收集。
總之,我在學(xué)校里我充分利用時(shí)間來(lái)學(xué)習(xí),我看到一些同學(xué)整天的掛在網(wǎng)上打游戲,發(fā)些無(wú)關(guān)痛癢的帖子,浪費(fèi)時(shí)間呀!我真的很痛心!
學(xué)習(xí)嵌入式在這里我把它單獨(dú)列出,文章有點(diǎn)紊亂,但是內(nèi)容希望有益。
1、學(xué)習(xí)linux根據(jù)我在論壇的了解,我選擇學(xué)習(xí)嵌入式linux,剛好我們學(xué)校也重視嵌入式linux,從實(shí)驗(yàn)室到課程安排都是關(guān)于嵌入式linux方面,天時(shí)地利!這里我把學(xué)習(xí)linux的經(jīng)驗(yàn)和教訓(xùn)說(shuō)說(shuō)。
可以這樣說(shuō),在論壇里說(shuō)道學(xué)習(xí)linux差不多就學(xué)習(xí)linux內(nèi)核。于是我電腦里安裝了linux就開始看linux內(nèi)核方面的書了。我記得來(lái)學(xué)校以 前就買到一本陳莉君的講linux內(nèi)核的第一版,現(xiàn)在有第二版了。我就開始看那本說(shuō),大家說(shuō)linux內(nèi)核情景分析不錯(cuò),我就買了上下冊(cè),后來(lái)又買了 《深入理解linux內(nèi)核》,最后猜蛄嗣?虜俚摹肚度朧較低場(chǎng)芬彩欠治鰈inux內(nèi)核代碼的,主要講arm相關(guān)的。
看內(nèi)核期間是個(gè) 非常痛苦的過(guò)程,看情景分析有種在森林中找出路,其間我組織了一些同學(xué)學(xué)習(xí)內(nèi)核,幾乎沒(méi)有幾個(gè)能堅(jiān)持下來(lái)的。我認(rèn)為我是堅(jiān)持下來(lái)了。情景分析在看第一、第 二遍是幾乎沒(méi)有摸到門道,我分析有三個(gè)方面的原因:1、自己的基礎(chǔ)差,這是最關(guān)鍵的。2、內(nèi)核本身很難。3、沒(méi)有交流和高人指點(diǎn)。到了第三遍時(shí)我才摸到 門,才差不多知道個(gè)linux的大概脈絡(luò),很多細(xì)節(jié)也是稀里糊涂。
學(xué)習(xí)linux總結(jié),這里聲明一下,我指的嵌入式主要是偏向軟件的嵌入式。學(xué)習(xí)嵌入式的重點(diǎn)和難點(diǎn)關(guān)鍵在操作系統(tǒng),如果沒(méi)有掌握操作系統(tǒng),我認(rèn)為很難把握一個(gè)嵌入式系統(tǒng)。即使在做嵌入式開發(fā)中,作應(yīng)有層的開發(fā)幾乎可以不知道操作系統(tǒng)也可以開發(fā),我認(rèn)為那是浮在表面的。很難深入和提高自己的層次。聲明:一孔之見!不可深究!
在學(xué)習(xí)linux內(nèi)核過(guò)程中犯了一個(gè)極其嚴(yán)重路線錯(cuò)誤:對(duì)linux幾乎不懂就開始學(xué)習(xí)內(nèi)核。我個(gè)人推薦一個(gè)學(xué)習(xí)路線是:使用linux—〉linux系統(tǒng)編程開發(fā)——〉驅(qū)動(dòng)開發(fā)和分析linux內(nèi)核。而我差不多相反,實(shí)際上你不會(huì)使用linux也可以學(xué)習(xí)內(nèi)核,但是如果你懂了這些東西學(xué)習(xí)更有效率。
關(guān)于要不要學(xué)習(xí)內(nèi)核的問(wèn)題,我的回答如下:不一定。如果你是喜歡鉆研的那你進(jìn)入內(nèi)核會(huì)滿足你的欲望。同時(shí)對(duì)你以后的嵌入式系統(tǒng)的開發(fā)有很好的影響。如果 你想從事嵌入式linux系統(tǒng)開發(fā),最好對(duì)內(nèi)核有所了解。如果僅僅是做應(yīng)用開發(fā)沒(méi)有必要。我打個(gè)比喻:c、c++、java等語(yǔ)言是武林中的某個(gè)武林派別 的話,如什么拳法,什么刀法等,那么linux 內(nèi)核應(yīng)該是一個(gè)人的內(nèi)功的反應(yīng)。
怎么開始學(xué)linux內(nèi)核:最好有三件寶物:《深入理解linux內(nèi)核》《情景分析》和源代碼。
先看《深》,那主要講原理,好像市場(chǎng)上有本講原理性并且更淺,《linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》聽說(shuō)不錯(cuò)。如果沒(méi)有學(xué)習(xí)操作系統(tǒng)的,像我這樣的,最好先看看 操作系統(tǒng)原理的書。看了幾遍后,就看情景分析,最好對(duì)著《深》看。兩本交*看,《深》是綱,《情》是目。最后深入代碼。
2、學(xué)習(xí)嵌 入式linux學(xué)習(xí)嵌入式,我認(rèn)為兩個(gè)重點(diǎn),cpu和操作系統(tǒng),目前市場(chǎng)是比較流行arm,所以推薦大家學(xué)習(xí)arm.操作系統(tǒng)很多,我個(gè)人對(duì)開始學(xué)習(xí)的人,特別不是計(jì)算機(jī)專業(yè)的,推薦學(xué)習(xí)ucos.那是開源的,同時(shí)很小。學(xué)習(xí)很好。為什么選linux,我不想講太多,網(wǎng)上這方面的太多,但是我在工作中發(fā) 現(xiàn),做linux的技術(shù)路線很難,在windows幾乎不會(huì)有的問(wèn)題,在linux開發(fā)中幾乎遍地陷阱。一掉進(jìn)去劃很長(zhǎng)時(shí)間出來(lái),一旦解決自己又長(zhǎng)進(jìn)了! 相對(duì)來(lái)說(shuō)開發(fā)周期長(zhǎng),難度大?,F(xiàn)在資料也逐漸豐富起來(lái),難度也降低了些!
至于怎么學(xué)習(xí),這是他的特色地方,必須有塊開發(fā)板,我是同學(xué)里最早買學(xué)習(xí)板的,雖然化錢,我認(rèn)為值。對(duì)我實(shí)習(xí)和工作產(chǎn)生了很大的影響。
如果沒(méi)有開發(fā)板,那是紙上談兵。有人說(shuō),那要1000-2000亞,的確是,兄弟,看長(zhǎng)遠(yuǎn)的,對(duì)您的職業(yè)和發(fā)展那點(diǎn)錢不算什么!有的人說(shuō)我站著說(shuō)話不腰 痛,好吧,錢這東西對(duì)我影響很大,我在大學(xué)里掃廁所,掃的不錯(cuò),獎(jiǎng)5元/月。兄弟你有過(guò)嗎?我認(rèn)為教育投資是效益最有保障的!我實(shí)習(xí)拿3k,很多同學(xué)拿 1-2k,當(dāng)然比我高的也有。雖然我現(xiàn)在沒(méi)有畢業(yè),但一家公司就簽了。從事目前流行的高檔的消費(fèi)電子的研發(fā)。對(duì)于我兩年前一無(wú)所知的我,應(yīng)該有質(zhì)的變化, 我感謝學(xué)校收了我這個(gè)廢品。當(dāng)然我也非常的努力。說(shuō)這么多并不是要炫耀我什么,實(shí)際上根本不值得炫耀,雖然現(xiàn)在工作環(huán)境和待遇比較滿意,但是,我發(fā)現(xiàn)我很 差,特別是代碼能力,我希望平常大家少玩游戲,多編程。編程才是硬道理!3、 學(xué)習(xí)板和培訓(xùn)你可以不接受培訓(xùn),但是不能不買開發(fā)板。如果你想學(xué)習(xí)嵌入式一定要買塊學(xué)習(xí)板,最好買塊arm9的,貴些也值??梢耘芨呒?jí)操作系統(tǒng)。這 個(gè)不要什么品牌公司的,一般不會(huì)出什么問(wèn)題,市場(chǎng)上的板子一般是三星的2410,基本上是抄的。如果是做產(chǎn)品那要注意些。一般的公司一般要2000,加 lcd要3000甚至更多。我接觸到有的板只要1200,加lcd也就2000,差別比較大,我認(rèn)為學(xué)習(xí)都?jí)蚶病?br>
對(duì)于培訓(xùn),如果有 條件最好參加,主要是嵌入式相對(duì)別的不同,自己摸索很費(fèi)時(shí),如果有高手指點(diǎn)非常的好,進(jìn)步快。特別是認(rèn)識(shí)做這些的朋友。我接受過(guò)培訓(xùn),認(rèn)識(shí)個(gè)朋友。在以后 的工作中幫我很多,在這里謝謝他!我記得哈佛的一個(gè)MBA的學(xué)生這樣說(shuō),大意是:在哈佛學(xué)到什么不重要,最重要的是這些未來(lái)各大公司的高級(jí)管理人員是我的同學(xué)!真是有遠(yuǎn)見!
目前市場(chǎng)是培訓(xùn)比較貴,一個(gè)星期兩三千,真正算起來(lái)也要,那些講師待遇絕對(duì)不會(huì)低。但是有個(gè)致命的問(wèn)題是連續(xù)上課,一連幾天,效果不佳。我希望社會(huì)上多出些1000元左右,并且時(shí)間長(zhǎng)些,如一個(gè)月,一周一到兩次課。如果沒(méi)人做,我來(lái)做,哈哈!
沒(méi)有想到,一下寫了這么多,其實(shí)還想寫的,比如在中科院的一位老兄是怎樣學(xué)習(xí)linux內(nèi)核和看書的,真的很感動(dòng)。他的為人我很欽佩。也想介紹毛德操的 《嵌入式系統(tǒng)》那本書,對(duì)學(xué)習(xí)arm linux的很好,也想介紹實(shí)習(xí)和工作的東西,太長(zhǎng)了,耽誤大家時(shí)間。我也不想檢查里面的錯(cuò)別字了,很多!就寫到這里吧。
?
評(píng)論
查看更多