姓名:李勝偉 學(xué)號:19020100133 學(xué)院:電子工程學(xué)院
轉(zhuǎn)自:(3條消息) 嵌入式linux,老手給新手的建議_zhang_jia_qing的博客-CSDN博客
【嵌牛導(dǎo)讀】嵌入式linux,老手給新手的建議
【嵌牛鼻子】嵌入式 開發(fā)
【嵌牛提問】嵌入式開發(fā)
【嵌牛正文】
嵌入式時代已經(jīng)來臨,你還在等什么?
?---循序漸進(jìn)學(xué)習(xí)嵌入式開發(fā)技術(shù)
最近經(jīng)常有用人單位給 我打來電話墓阀,問我這有沒有嵌入式Linux方面的開發(fā)人員,他們說他們單位急需要懂得在嵌入式linux環(huán)境下的軟件開發(fā)人員芒划,我回答說,現(xiàn)在每年畢業(yè)的 大學(xué)生那么多,還招不到合適的軟件開發(fā)人員嗎?他跟我說翼闹,畢業(yè)大學(xué)生雖然多,但大部分都能力不夠蒋纬,不能達(dá)到他們的工作的要求猎荠。該公司HR的一句話說出來我 們現(xiàn)在的大學(xué)教學(xué)和大學(xué)生就業(yè)的現(xiàn)狀:一方面每年那么多大學(xué)生畢業(yè)找不到合適的工作,另一方面很多用人單位和企業(yè)又找不到合適的人才蜀备。造成這種現(xiàn)象最基本 的原因是學(xué)校教育和社會需求的嚴(yán)重脫節(jié)关摇。其他的專業(yè)和行業(yè)我不清楚,但是對于嵌入式專業(yè)和嵌入式軟件行業(yè)來說碾阁,通過與多所高校的老師和在校高年級本科生输虱, 研究生交流,我還是有所了解的脂凶,高校的嵌入式專業(yè)的教學(xué)現(xiàn)狀我在前一篇文章里仔細(xì)分析過宪睹,造成很多嵌入式專業(yè)的學(xué)生在畢業(yè)后,還是很難達(dá)到用人單位的要求 最主要的原因在于高校在嵌入式教學(xué)方面重理論和輕實踐蚕钦,很多嵌入式專業(yè)的老師也沒有實際的工作經(jīng)驗亭病,這樣培養(yǎng)出的學(xué)生可能讓他講起來頭頭是道,但是讓他去 真正編寫嘶居,調(diào)試一個應(yīng)用程序就傻眼了命贴,不知道從何下手,因為他們在學(xué)校的學(xué)習(xí)可能從來就沒有老師帶著他們實際調(diào)試過嵌入式程序食听,也沒有機(jī)會讓你去調(diào)試嵌入 式應(yīng)用程序胸蛛,那些看起來非常不錯的嵌入式實驗箱大部分時間都躺在實驗室睡大覺,只有在上實驗課的時候搬出來讓大家看2眼樱报,摸2下葬项,還沒有弄明白怎么回事, 又要收到實驗室睡大覺去了迹蛤。這樣的教學(xué)模式民珍,如何能培養(yǎng)出一名合格的嵌入式工程師呢襟士?出現(xiàn)企業(yè)找不到合適的人,大學(xué)畢業(yè)生找不到合適的工作也就不奇怪了嚷量。
嵌入式專業(yè)是一門實踐性非常強(qiáng)的學(xué)科陋桂,只有多動手,多實踐蝶溶,多編程嗜历,多調(diào)試,多看書抖所,多思考才能真正掌握好嵌入式開發(fā)技術(shù)梨州。
現(xiàn) 在很多同學(xué)也意識到了學(xué)校培養(yǎng)模式和社會需求脫節(jié)問題,有一部分同學(xué)也先行行動起來田轧,開始注重培養(yǎng)自己的實際動手能力暴匠,培養(yǎng)自己實際分析問題,解決問題的 問題傻粘,培養(yǎng)自己在嵌入式專業(yè)實際編程每窖,和調(diào)試程序的能力。但是嵌入式專業(yè)不同于其他學(xué)科弦悉,嵌入式專業(yè)是一門綜合性非常強(qiáng)岛请,涉及知識面非常廣的學(xué)科,對于初 學(xué)者來說警绩,面對那么多教程崇败,課本,那么多知識點肩祥,往往不知道從何處下手后室,不知道哪些是重點,哪些不是重點混狠,這些知識點之間有什么關(guān)聯(lián)岸霹,一臉的茫然,然后東 一榔頭将饺,西一棒子贡避,折騰了幾個月甚至大半年后,還是找不著學(xué)習(xí)嵌入式的方向予弧,還徘徊在嵌入式開發(fā)的大門之外刮吧。
那么,如何從零開始學(xué)習(xí)嵌入式開發(fā)技術(shù), 進(jìn)入嵌入式開發(fā)大門呢掖蛤,筆者根據(jù)自己的嵌入式學(xué)習(xí)經(jīng)歷和多年的嵌入式linux教學(xué)經(jīng)驗杀捻,談?wù)勛约簩η度胧綄W(xué)習(xí)的一些想法和意見,希望對大家有所幫助蚓庭。
一致讥、練好基本功
嵌入式系統(tǒng)專業(yè)是綜合了計算機(jī)硬件技術(shù)仅仆,計算機(jī)軟件技術(shù)以及電子電路技術(shù)的一門綜合學(xué)科,所涉及的內(nèi)涵和知識非常廣泛垢袱,包括:數(shù)字電路墓拜,模擬電路,計算機(jī)組成原理请契,單片機(jī)基礎(chǔ)咳榜,C語言基礎(chǔ),操作系統(tǒng)姚糊,數(shù)據(jù)結(jié)構(gòu),編譯原理授舟,計算機(jī)控制救恨,計算機(jī)網(wǎng)絡(luò)等知識。
在真正學(xué)習(xí)嵌入式開發(fā)之前释树,u肠槽。對于C語言,至少能單獨編寫調(diào)試一個3 ~ 500行的程序奢啥,能夠了解C語言的基本語法規(guī)則秸仙,基本語句的使用,理解指針概念并能靈活使用各種指針桩盲。
計算機(jī)組成原理要能理解組成一個計算機(jī)系統(tǒng)的幾大部件寂纪,計算機(jī)系統(tǒng)的結(jié)構(gòu),理解系統(tǒng)總線赌结,理解處理器和計算機(jī)外部設(shè)備的關(guān)系捞蛋,處理器和計算機(jī)外設(shè)是如何協(xié)調(diào)工作完成某一項功能的,計算機(jī)軟件和硬件是如何分工協(xié)作完成某一項任務(wù)的柬姚,理解軟件是通過寄存器來控制硬件的拟杉。
數(shù)字電路,模擬電路要了解其基本原理個概念量承,能看懂簡單模擬搬设、數(shù)字電路原理圖。理解數(shù)字電路中的寄存器撕捍,時序的概念拿穴,能看懂芯片手冊和時序圖。對于其他基礎(chǔ)課程忧风,重點要理解其中的一些基本概念贞言,如何使用等等。
對 于電子阀蒂,自動化该窗,通信弟蚀,計算機(jī)類專業(yè)的學(xué)生,在大二酗失、大三開設(shè)的專業(yè)基礎(chǔ)或?qū)I(yè)課程中基本包含了以上的大部分課程义钉。因為缺乏實踐,可能學(xué)得不是很深入规肴,但 是一些基本的概念和基本知識應(yīng)該還是有所了解捶闸,針對一些薄弱環(huán)節(jié),自己稍微加強(qiáng)學(xué)習(xí)一下拖刃,基本上已經(jīng)具備了學(xué)習(xí)嵌入式開發(fā)的基礎(chǔ)删壮。在嵌入式基本功學(xué)習(xí)階 段,最重要的是C語言和單片機(jī)基礎(chǔ)兑牡,最好是能用C語言開發(fā)一個小的單片機(jī)程序央碟,例如用C語言實現(xiàn)單片機(jī)和PC的串口通信,用C語言控制LED等顯示均函,用C 語言控制數(shù)碼管顯示等小程序亿虽。在這個期間需要的學(xué)習(xí)工具就是單片機(jī)51學(xué)習(xí)開發(fā)板。推薦飛凌的OK-51學(xué)習(xí)開發(fā)板苞也。詳情參考:
二洛勉、嵌入式Linux應(yīng)用開發(fā)
嵌 入式開發(fā)基礎(chǔ)知識學(xué)習(xí)完后,這時候你已經(jīng)有了一定的嵌入式開發(fā)基礎(chǔ)了如迟,可以進(jìn)行基于單片機(jī)的嵌入式系統(tǒng)設(shè)計了收毫。單片機(jī)編程本身也是屬于嵌入式編程,但是在 這里我們只是把單片機(jī)開發(fā)當(dāng)作嵌入式系統(tǒng)開發(fā)的基礎(chǔ)殷勘,不把單片機(jī)開發(fā)作為真正的嵌入式系統(tǒng)開發(fā)牛哺,在這里我們的嵌入式系統(tǒng)開發(fā)是指在帶有操作系統(tǒng)的嵌入式平 臺上的應(yīng)用和驅(qū)動開發(fā),特別指在嵌入式linux平臺上的開發(fā)劳吠。
單片機(jī)開發(fā)在很早以前是非常熱門的引润,現(xiàn)在在一些比較簡單的系統(tǒng)上單片機(jī)也用的非常 廣泛,隨著硬件的成本不斷降低痒玩,在一些比較復(fù)雜的嵌入式設(shè)備一般都采用嵌入式linux操作系統(tǒng)淳附,在嵌入式linux平臺上進(jìn)行開發(fā),這樣可以極大的提高 嵌入式開發(fā)效率蠢古,提高系統(tǒng)的穩(wěn)定性和可靠性奴曙,降低開發(fā)成本。由于linux是一個開源的操作系統(tǒng)草讶,你可以通過閱讀linux內(nèi)核來理解內(nèi)核的實現(xiàn)機(jī)制洽糟,如 果有需要,你甚至可以通過修改內(nèi)核源碼來提高系統(tǒng)的性能;同時坤溃,全球參與linux開發(fā)的隊伍非常龐大拍霜,網(wǎng)上有大量的嵌入式linux開發(fā)資料和源代碼, 很多你需要實現(xiàn)的功能在網(wǎng)上基本都能找到相關(guān)源碼薪介,參考一下別人寫的源碼祠饺,這樣可以極大的提高自己的工作效率和技術(shù)能力,近幾年汁政,隨著參與linux開發(fā) 的人越來越多道偷,linux系統(tǒng)的穩(wěn)定性、實時性有了很大的提高记劈,linux系統(tǒng)無論在服務(wù)器上還是嵌入式設(shè)備平臺上都應(yīng)用越來越廣泛勺鸦,現(xiàn)在包括華為、中 興目木、朗訊的各大通信巨頭都開始把自己設(shè)備的底層平臺從vxworks操作系統(tǒng)遷移到linux系統(tǒng)换途,可以說嵌入式linux是嵌入式技術(shù)發(fā)展一個方向,是 嵌入式技術(shù)的一面旗幟嘶窄』初耍基于以上原因距贷,我的建議是學(xué)嵌入式開發(fā)柄冲,就學(xué)嵌入式linux開發(fā),相對于wince等其他的嵌入式平臺忠蝗,你可以真正學(xué)到更多的東 西现横,學(xué)到嵌入式技術(shù)的精髓,同時他又符合嵌入式產(chǎn)業(yè)發(fā)展的方向阁最,不容易被日新月異的技術(shù)發(fā)展所淘汰戒祠。
有了嵌入式開發(fā)的基礎(chǔ),又知道了我們?yōu)槭裁匆獙W(xué)習(xí)嵌入式linux開發(fā)速种,那我們就要開始動手開始學(xué)習(xí)了姜盈,那如何開始學(xué)習(xí)嵌入式linux開發(fā),從哪里開始著手呢配阵?
很 多同學(xué)這時候就開始買linux書籍馏颂,從圖書館借了一大堆關(guān)于linux的書:什么《linux使用基礎(chǔ)教程》、《linux源碼深度分析》棋傍、 《linux情景分析等》救拉、 《linux高級使用指南》等等。結(jié)果抱著這些圖書看了10天半個月還是不知所云瘫拣,當(dāng)初學(xué)習(xí)的激情慢慢就消退了亿絮,最后不了了之,終究沒有進(jìn)入嵌入式開發(fā)大 門。究其原因派昧,是因為沒有找到合適學(xué)習(xí)嵌入式開發(fā)的方法黔姜,做任何事情都有方法可循,找對了學(xué)習(xí)方法往往就能事半功倍斗锭;否則就可能是事倍功半地淀,甚至勞而無 功。接下來我先分析一下同學(xué)們的幾種常見的嵌入式linux學(xué)習(xí)誤區(qū)岖是,然后提出一種比較合適的嵌入式linux學(xué)習(xí)方法帮毁。
誤區(qū)一、全身投入學(xué)習(xí)桌面或服務(wù)器版本linux系統(tǒng)
很 多想學(xué)嵌入式linux 的同學(xué)經(jīng)常問我豺撑,我不會linux系統(tǒng)烈疚,怎么學(xué)習(xí)嵌入式linux開發(fā),于是他們就花費了大量的精力和時間去研究學(xué)習(xí)桌面版本linux系統(tǒng)的使用聪轿,什么 redhat 爷肝、federo,、ubuntu等等都用過陆错,如何配置linux灯抛,linux的各種使用命令都背的滾瓜爛熟,linux各種服務(wù)器的配置音瓷,還原備份各種操 作非常熟悉对嚼,以為這樣就學(xué)會了嵌入式linux開發(fā)。其實這是一個學(xué)習(xí)嵌入式Linux開發(fā)的誤區(qū)绳慎。
Linux桌面環(huán)境只是嵌入式linux的一 個開發(fā)工具纵竖,開發(fā)環(huán)境而已。我們的目標(biāo)不是學(xué)習(xí)linux服務(wù)器的配置和使用杏愤,linux服務(wù)器的高級配置和使用那是另外一個領(lǐng)域靡砌,不屬于嵌入式 linux討論的范疇。我們進(jìn)行嵌入式linux開發(fā)珊楼,只是把linux桌面環(huán)境當(dāng)作一個工具通殃,在linux桌面環(huán)境下運行嵌入式linux開發(fā)工具,例 如gcc 編譯器厕宗,make工具來開發(fā)我們的嵌入式linux應(yīng)用程序而已画舌,對于嵌入式開發(fā)工程師來說,沒有必要花費那么多的精力和時間去研究linux桌面版和服 務(wù)器的應(yīng)用媳瞪,只要能了解最基本的操作即可∑現(xiàn)在的桌面linux系統(tǒng)的圖形化界面做的也相當(dāng)好,跟window具有相同的易用性能蛇受,例如ubuntu很多 操作都可以在圖形界面下完成句葵,就沒有必要去記每個linux命令了。熟悉linux桌面系統(tǒng)的使用和基本操作命令,安排1~2天時間學(xué)習(xí)基本就可以掌握 了乍丈。
誤區(qū)二剂碴、直接閱讀linux內(nèi)核源代碼
?很多想學(xué)linux,在連linux是什么東西轻专,一點都還不會使用的情況下去就閱讀linux內(nèi)核源代碼忆矛,花了大量時間去閱讀《linux源碼深度分 析》、《linux情景分析等》等書请垛。這樣的結(jié)果很可能就是看的頭昏眼花催训,不知所云,最后只能放棄了宗收。這也是同學(xué)們學(xué)習(xí)嵌入式linux的一個誤區(qū)漫拭,在有 一定嵌入式linux開發(fā)基礎(chǔ)后,帶著一定的目的去閱讀linux源代碼混稽,這樣可以極大的提高你的技術(shù)能力采驻,但是你在沒有任何基礎(chǔ),對linux一點都不 了解的情況下就去閱讀linux內(nèi)核源代碼匈勋,無異于以卵擊石礼旅,最后只能是撞個頭破血流。
以上分析了同學(xué)們學(xué)習(xí)嵌入式linux 開發(fā)的2個誤區(qū)洽洁,那么如何正確的嵌入式linux開發(fā)呢痘系?
u,學(xué)習(xí)嵌入式linux也一樣诡挂。在u碎浇, 學(xué)習(xí)嵌入式linux開發(fā)比較適合的切入點是從嵌入式linux應(yīng)用程序開發(fā)開始临谱,即暫時先不去關(guān)心嵌入式硬件平臺璃俗,不去關(guān)心linux的底層驅(qū)動,先把 精力集中在現(xiàn)有的嵌入式linux平臺上進(jìn)行嵌入式linux應(yīng)用程序設(shè)計開發(fā)悉默。學(xué)習(xí)嵌入式linux開發(fā)絕不是看看書就可以學(xué)好的城豁,需要多實踐,編程調(diào) 試抄课;因為嵌入式開發(fā)不同于普通的基于PC機(jī)或服務(wù)器的應(yīng)用程序開發(fā)唱星,嵌入式開發(fā)的應(yīng)用程序是要燒寫到嵌入式板卡或開發(fā)板上運行的,所以首先你要給自己購買 一塊開發(fā)板跟磨,現(xiàn)在普遍流行的嵌入式開發(fā)板都是基于u星的ARM9 CPU S3C2440,性價比極高间聊,在這里我推薦使用飛凌公司FL-2440 高性價比ARM9學(xué)習(xí)開發(fā)板,開發(fā)板資源豐富抵拘,穩(wěn)定哎榴,同時配有大量的實驗源碼,視頻教程和實驗指導(dǎo)書。
?有了開發(fā)板后 先后開始學(xué)習(xí)嵌入式linux開發(fā)環(huán)境搭建尚蝌、嵌入式linux開發(fā)模型迎变、linux內(nèi)核移植和文件系統(tǒng)、嵌入式linux應(yīng)用程序移植飘言、嵌入式linux 多進(jìn)程衣形,多線程應(yīng)用程序設(shè)計、嵌入式linux網(wǎng)絡(luò)編程姿鸿,如果對嵌入式數(shù)據(jù)庫或圖形軟件開發(fā)有興趣的谆吴,可以進(jìn)一步學(xué)習(xí)嵌入式linux數(shù)據(jù)庫開發(fā)或基于 QT的嵌入式linux圖形應(yīng)用軟件設(shè)計。每學(xué)一章節(jié)都要通過相關(guān)實驗來來驗證你從書上學(xué)到的東西苛预,同時提高自己編寫代碼纪铺,調(diào)試程序的能力。這個過程根據(jù) 不同學(xué)員的基礎(chǔ)不同碟渺,大概要花上1 ~ 2個月時間鲜锚。學(xué)完這些課程后,你就有了在現(xiàn)有的嵌入式linux平臺上進(jìn)行應(yīng)用程序設(shè)計開發(fā)的能力苫拍,到一些嵌入式軟件公司去芜繁,能夠勝任在現(xiàn)有的嵌入式 linux平臺上進(jìn)行上層的應(yīng)用程序開發(fā)工作。但是目前你還不能進(jìn)行嵌入式linux系統(tǒng)和驅(qū)動的開發(fā)绒极,也就是說骏令,你現(xiàn)在只能在一個已經(jīng)構(gòu)建好的嵌入式 linux平臺上進(jìn)行應(yīng)用程序開發(fā),而自己還沒有能力根據(jù)實際需要去重新構(gòu)建一個嵌入式linux平臺垄提。要讓自己有能力根據(jù)實際需要重新構(gòu)建一個嵌入式 linux軟硬件平臺榔袋,這時候就需要進(jìn)行下一階段的學(xué)習(xí)了,即嵌入式linux系統(tǒng)和驅(qū)動開發(fā)铡俐。
三凰兑、嵌入式Linux系統(tǒng)和驅(qū)動開發(fā)
有 了嵌入式linux平臺上開發(fā)應(yīng)用程序的基礎(chǔ),你已經(jīng)對linux的功能审丘、linux對應(yīng)用程序提供的接口和系統(tǒng)調(diào)用有了一定的了解吏够,知道如何利用 linux提供的功能來進(jìn)行應(yīng)用程序開發(fā),知道如何來使用設(shè)備驅(qū)動來進(jìn)行應(yīng)用程序設(shè)計滩报,有了這些知識后锅知,你就可以更深入的去學(xué)習(xí)Linux系統(tǒng)原理和基于 Linux驅(qū)動的開發(fā),Linux內(nèi)核的裁剪脓钾,文件系統(tǒng)構(gòu)售睹,bootloader等等底層的知識了。
想要更深入學(xué)習(xí)嵌入式Linux系統(tǒng)和驅(qū)動開發(fā)可训,要學(xué)的內(nèi)容非常多包括計算機(jī)軟件昌妹、硬件生真、操作系統(tǒng)知識。這時候你可以參照以下的學(xué)習(xí)思路捺宗,u包括:ARM體系架構(gòu)柱蟀、S3C2440微處理器接口設(shè)計、時鐘系統(tǒng)蚜厉、LCD屏接口长已、存儲控制器及系統(tǒng)的存儲空間分配、NAND FLASH接口和NOR FLASH接口等昼牛。u术瓮。 學(xué)完這些知識點并通過相關(guān)實驗驗證后,嵌入式Linux系統(tǒng)和驅(qū)動的開發(fā)就算掌握了差不多了贰健,能夠勝任絕大部分基于linux平臺的驅(qū)動開發(fā)工作了胞四。學(xué)完 這些知識點,根據(jù)學(xué)員的不同情況伶椿,一般需要花三個月到半年時間辜伟。通過這一階段的學(xué)習(xí),你在嵌入式Linux開發(fā)領(lǐng)域已經(jīng)算是有了一定的功底脊另,已經(jīng)不再被人 稱為菜鳥了导狡,已經(jīng)進(jìn)入嵌入式linux開發(fā)高手行列了。
四偎痛、更上一層樓
?深入理解了嵌入式內(nèi)核和驅(qū)動開發(fā)旱捧,這時候?qū)憘€什么驅(qū)動對你已經(jīng)沒有什么問題了,開發(fā)過程中一些基本問題都難不倒你了踩麦。這是你可能想優(yōu)化一下系統(tǒng)的性能枚赡,比 如實時性,提高系統(tǒng)的啟動速度谓谦,或者優(yōu)化系統(tǒng)的內(nèi)存管理機(jī)制贫橙,要達(dá)到修改內(nèi)核核心機(jī)制的境界,你就需要去深入去研讀linux內(nèi)核源碼了茁计,參考 《linux源碼深度分析》料皇、《linux情景分析等》等linux源碼分析的書籍谓松,深入理解linux各部分的實現(xiàn)機(jī)制和原理星压,以及可能存在的問題。你 只有在深入理解現(xiàn)有代碼和實現(xiàn)機(jī)制的基礎(chǔ)上鬼譬,才能提出更好的改進(jìn)方案娜膘。如果你能達(dá)到這個境界,那你已經(jīng)是高手中的高手优质,可以笑傲群雄了竣贪。
以 上是筆者結(jié)合自己的嵌入式學(xué)習(xí)經(jīng)歷和嵌入式培訓(xùn)經(jīng)驗總結(jié)的一些嵌入式學(xué)習(xí)方法和步驟军洼,這只是筆者對嵌入式學(xué)習(xí)的一些看法嚼黔,希望對那些有興趣學(xué)習(xí)嵌入式 linux又不知道從哪開始學(xué)的同學(xué)們有所幫助捏膨。當(dāng)然究恤,每個人融撞,每個同學(xué)的基礎(chǔ)胎撇,各方面的情況都不一樣半哟,每個人都有自己適合的學(xué)習(xí)方式绘证,本文章總結(jié)的一些 學(xué)習(xí)方法和思路僅供參考撵割,希望大家能找到適合自己的學(xué)習(xí)嵌入式開發(fā)的方式歹叮,早日進(jìn)入嵌入式開發(fā)大門跑杭。
萬丈高樓平地起,心動不如行動咆耿,有志從事嵌入式開發(fā)的同學(xué)不要再猶豫了德谅,趕緊拿出實際行動,好好學(xué)習(xí)萨螺,為實現(xiàn)自己的偉大夢想而努力奮斗吧
版權(quán)聲明:本文為CSDN博主「?zhang_jia_qing? ? ??? ? ?」的原創(chuàng)文章窄做,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明慰技。