你好,歡迎進(jìn)入江蘇優(yōu)軟數(shù)字科技有限公司官網(wǎng)!
發(fā)布時(shí)間:2024-07-30
瀏覽次數(shù):0
“
什么是嵌入式?
嵌入式有廣義和狹義之分,廣義的嵌入式是指片上系統(tǒng),包括單片機(jī)、PSOC、NIOS等;狹義的嵌入式是指運(yùn)行操作系統(tǒng)的具體芯片,如ARM9、A8等。這里主要介紹狹義嵌入式的學(xué)習(xí)路線。
還是主流方法,先學(xué)會(huì)使用,再深入底層。
常用的操作系統(tǒng)有Linux、WIN CE、、QNX、OSE等,目前資料最多的是Linux,所以下面就以Linux為例。
”
1.安裝虛擬機(jī)及Linux系統(tǒng)
大多數(shù)人都會(huì)在電腦上安裝操作系統(tǒng),如果想在電腦上運(yùn)行其他系統(tǒng),就得安裝虛擬機(jī)了。目前主流的虛擬機(jī)有、、、等,隨便選一個(gè)安裝即可。然后去官網(wǎng)下載個(gè)人版Linux鏡像(.iso文件)在虛擬機(jī)里安裝。下面是主流Linux系統(tǒng)的官方鏈接:、、、、、、suse。如果你沒用過Linux,建議用它。因?yàn)樗鞘召M(fèi)的,而且改名為RHEL,所以這里就不介紹了。
首先下載一本書,叫《鳥哥的Linux私房菜》。然后進(jìn)入第二、三、四階段(學(xué)習(xí)初期不需要開發(fā)板)。
2. 學(xué)習(xí)使用常見的 Linux 命令
這里要改掉點(diǎn)鼠標(biāo)的習(xí)慣,在Linux下做事都要用命令行。另外在Linux下下載軟件的時(shí)候,不用百度下載,而是用Linux自帶的包管理工具(如:apt-get、dnf、rpm等),如果用的話要修改軟件源(下載軟件的網(wǎng)站),因?yàn)閲獾脑幢容^慢,百度有詳細(xì)的使用說明。接下來你要學(xué)會(huì)最基本的命令,如:ls、cd、find、grep、ps、diff、fdisk等,只要照著教材操作幾遍,你就能學(xué)會(huì),不需要很深的理論知識(shí),不需要掌握所有的命令,也不需要記住所有的命令選項(xiàng),有時(shí)間的話可以去社區(qū)或者Linux公社看看。
3. 學(xué)習(xí)使用常見的 Linux 工具
1.編輯器(寫代碼必備)。有g(shù)edit,vim,emacs等,建議學(xué)習(xí)vim。
2. gcc 和 gdb。gcc 是一個(gè)編譯器,而 gdb 是一個(gè)代碼調(diào)試器。
3.這個(gè)不像VC++6.0,點(diǎn)一下鼠標(biāo)就能幫你編譯,在Linux下,必須用make和make工具才能編譯,make和make可以自動(dòng)生成。
4. ssh、tftp。如果你的ARM開發(fā)板上有web服務(wù)器,可以使用這些工具來訪問。其中,建議使用ssh工具或者。
5、Samba.如果你想要使用Linux來交換數(shù)據(jù),也可以搭建Samba服務(wù)器。
6.版本控制器。有svn,cvs,Git等。建議學(xué)習(xí)git。有了git,就不用手動(dòng)備份代碼了。
4.學(xué)習(xí)編寫shell腳本
在實(shí)際工作中,復(fù)雜的系統(tǒng)管理操作并不是通過一行一行的敲命令來完成的,而是使用腳本(命令是基礎(chǔ))來完成的。腳本也是一種編程語言,只不過是解釋型語言,相對(duì)于C/C++、C#、Java等高級(jí)語言來說,腳本要容易學(xué)得多(因?yàn)榧尤肓苏Z法糖)。Linux下,shell有很多種,如:bsh、bash、csh、tcsh、ksh、zsh等,一般就學(xué)bash,其他的都是碰到再學(xué)也不遲,因?yàn)槎疾畈欢唷A硗鈈ash的語法比較奇特,很多符號(hào)(如:$#、$0、$?等)比較難記,但也沒必要刻意去死記硬背,只要記住,需要的時(shí)候再查手冊(cè)就行了。這里的重點(diǎn)是掌握正則表達(dá)式,如果有時(shí)間的話sublime text 3安卓版,建議大家學(xué)一下腳本。 語法比 bash 簡(jiǎn)單很多,用途也更廣泛。推薦“Shell Tips”。
5.學(xué)習(xí)Linux下的C編程
雖然學(xué)習(xí)bash能做很多事情,但是驅(qū)動(dòng)和內(nèi)核開發(fā)我還是使用C語言,因?yàn)槟菚r(shí)系統(tǒng)還沒起來,不能用bash,另外C語言執(zhí)行效率比bash高,網(wǎng)絡(luò)編程也經(jīng)常用C語言開發(fā)。這里需要掌握基本的文件操作,進(jìn)程/線程控制等。推薦的書籍有《Linux環(huán)境C編程》、《UNIX環(huán)境高級(jí)編程》、《UNIX網(wǎng)絡(luò)編程卷一》、《UNIX網(wǎng)絡(luò)編程卷二》,或許這些教材有點(diǎn)難,但是請(qǐng)不要墨守成規(guī),暫時(shí)不懂的就跳過,等學(xué)完下一階段的理論后再回過頭來看,之前不懂的就變得容易了。
6.增強(qiáng)理論知識(shí)
因?yàn)橛行┤嗣俺淝度胧接布こ處?,但其?shí)嵌入式硬件就是普通硬件工程師的工作,我們這里討論的是軟件,嵌入式又以軟件為主(薪資不高,差距很大)。如果對(duì)硬件有興趣,可以參考《如何學(xué)習(xí)硬件設(shè)計(jì)-理論》和《如何學(xué)習(xí)硬件設(shè)計(jì)-實(shí)踐》這兩篇博客,這里不要求你一定精通硬件,但有一定的了解就足夠了。
1、單片機(jī)。具體學(xué)習(xí)路線可以參考博文《單片機(jī)怎么學(xué)》。如果不想學(xué)單片機(jī),可以學(xué)計(jì)算機(jī)組成原理。
2.數(shù)據(jù)結(jié)構(gòu)。主要掌握表和樹,其中鏈表用于操作系統(tǒng)的調(diào)度算法。
3.操作系統(tǒng)。都很重要,必須深入學(xué)習(xí),才能更全面地了解Linux。
4. 編譯器原理。有時(shí)間的話,最好多看一看。沒時(shí)間的話,也學(xué)一下。對(duì)提高編程水平很有幫助。
5. 數(shù)據(jù)庫。除了基本的數(shù)據(jù)庫理論之外,你還必須掌握或。
6. ARM架構(gòu)。本章主要介紹ARM的架構(gòu)和指令集,在移植uboot和驅(qū)動(dòng)的時(shí)候會(huì)用到。如果不做這兩項(xiàng)工作的話,可以不用學(xué)。
7.計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)。開發(fā)中用到的SSH、TFTP、HTTP等都會(huì)涉及到網(wǎng)絡(luò)相關(guān)的知識(shí)。
8、接口應(yīng)用。如:串口、IIC、SPI、1-wire、USB、HDMI、CAN、IIS、PCIE、藍(lán)牙、陀螺儀等。
在學(xué)習(xí)完上面的理論之后,再回顧一下Linux下的C編程sublime text 3安卓版,你會(huì)收獲更多。
先下載一本韋東山的《嵌入式Linux應(yīng)用開發(fā)完全手冊(cè)》,再買一塊2440開發(fā)板(雖然已經(jīng)停產(chǎn)了,但是這個(gè)芯片是資料最多的),然后進(jìn)入第七、八、九、十階段。第七、八、九階段,用開發(fā)板自帶的就可以了,暫時(shí)不用研究。
7.文件系統(tǒng)
在學(xué)習(xí)操作系統(tǒng)原理的時(shí)候,文件系統(tǒng)已經(jīng)介紹過了,沒必要深究文件系統(tǒng)的具體算法,只需要了解它的特性,學(xué)會(huì)如何使用就可以了。例如:NFS、FAT32、NTFS、ext4、ZFS等。
8. 內(nèi)核修剪
一般初學(xué)者可以先掌握內(nèi)核裁剪(具體工作就是填入幾個(gè)選項(xiàng)??),裁剪只是把內(nèi)核不必要的功能去掉,以減少代碼量,這里只需要熟悉內(nèi)核所有的功能選項(xiàng)即可,如果裁剪后還是達(dá)不到要求,那就得去讀內(nèi)核源碼,修改內(nèi)核了,我推薦《Linux入門》和《Linux閱讀內(nèi)核源碼》,推薦閱讀。
9. 驅(qū)動(dòng)程序開發(fā)
由于系統(tǒng)還沒起來,驅(qū)動(dòng)能用的API還不多(部分內(nèi)核API,如:等),很多函數(shù)還是要自己寫。其中,臨界資源經(jīng)常會(huì)被訪問,所以必須掌握自旋鎖,睡眠鎖。另外,驅(qū)動(dòng)出問題的話,整個(gè)系統(tǒng)就崩潰了,所以必須掌握各種調(diào)試驅(qū)動(dòng)的方法,如:goto語句,日志系統(tǒng),KDB等。接下來,必須熟悉字符設(shè)備和塊設(shè)備的驅(qū)動(dòng)。我推薦《小白的博客》和《Linux》(中文版不推薦)。
10.移植
單片機(jī)也有,在keil C.a51中主要是用來做一些初始化的工作。然后,同樣的功能在ARM上也有,但是不是那么重要,所以放在最后。常用的就是vivi和uboot,一般學(xué)習(xí)uboot主要還是掌握uboot的啟動(dòng)流程和移植。經(jīng)過前面的學(xué)習(xí),uboot對(duì)你來說已經(jīng)很輕松了,一般你只需要學(xué)會(huì)如何使用uboot或者使用移植好的uboot就可以了,沒必要深入研究。建議看下uboot自帶的幫助文檔。閱讀uboot源碼,很推薦。
11.圖形界面開發(fā)
常用的GUI圖形庫有:GTK++、QT、JAVA、等。如果有C++基礎(chǔ),建議學(xué)QT,如果不懂C++,建議學(xué)JAVA。GUI開發(fā)初期,不需要用開發(fā)板,2440跑QT就很合適。如果要跑JAVA或者,建議換個(gè)開發(fā)板,可以考慮開發(fā)板,另外也可以用自帶的開發(fā)圖形界面。推薦的書籍有《QT5編程入門》、《瘋狂JAVA講義》、《瘋狂講義》、《編程入門》。
因?yàn)橄到y(tǒng)是在Linux基礎(chǔ)上封裝了一層API,所以如果要開發(fā)驅(qū)動(dòng),必須掌握Linux(上面前十個(gè)階段),如果只是開發(fā) app,只需要使用或者配合模擬器(最好用手機(jī)),就可以了,不需要學(xué)習(xí)Linux,也不需要學(xué)習(xí)開發(fā)板。
在你做過幾個(gè)GUI項(xiàng)目之后,學(xué)習(xí)UML和設(shè)計(jì)模式,這將大大提升你的代碼架構(gòu)能力。
12. Web 開發(fā)
有時(shí)候需要在ARM板上搭建一個(gè)網(wǎng)頁服務(wù)器,這里就得學(xué)習(xí)HTML、CSS、XML、Ajax、PHP等。看似內(nèi)容很多,其實(shí)不多,因?yàn)檫@些語言入門簡(jiǎn)單。用Adobe開發(fā),入門之后直接用文本瀏覽器就可以了(還需要學(xué)習(xí)MVC模式)。另外還需要會(huì)用bash或者寫GI程序C,這樣才能在網(wǎng)頁上調(diào)用底層C語言接口。推薦《瘋狂HTML 5/CSS3/講義》。
13. 其他
本文不涉及流程圖繪制軟件,文檔生成工具等(這兩個(gè)東西工作中經(jīng)常用到)。
從上面可以看出,嵌入式軟件涉及到很多計(jì)算機(jī)相關(guān)的知識(shí),這對(duì)于電子專業(yè)的學(xué)生來說無疑是跨專業(yè)的難度,另外,就算掌握了上面提到的這些知識(shí),也只不過是打開了一扇小窗戶而已,還有很多東西它做不到,比如二維碼識(shí)別,視頻采集卡等等。
BTW,嵌入式工作也分為幾個(gè)崗位,分別是系統(tǒng)工程師、驅(qū)動(dòng)工程師、軟件工程師(負(fù)責(zé)網(wǎng)頁或者GUI的開發(fā))、UI工程師(也可以叫美工)。
系統(tǒng)工程師:熟悉操作系統(tǒng)內(nèi)核原理,熟悉內(nèi)核源代碼。主要職責(zé)是對(duì)系統(tǒng)打補(bǔ)丁或者增加新功能,比如熱升級(jí),提高系統(tǒng)的容錯(cuò)能力等。一般公司不做這種開發(fā)。
驅(qū)動(dòng)工程師:熟悉各類外設(shè)的驅(qū)動(dòng)開發(fā),為內(nèi)核、GUI提供接口。由于很多IC廠家都提供相關(guān)芯片的驅(qū)動(dòng),很多驅(qū)動(dòng)工程師被裁員(需求減少)。
軟件工程師:熟悉各種編程語言和GUI圖形庫、框架(光會(huì)查文檔是不夠的,需要對(duì)框架非常熟悉),由于項(xiàng)目需求經(jīng)常變化,開發(fā)效率跟不上變化,所以對(duì)軟件工程師的需求大大增加。
UI工程師:主要負(fù)責(zé)界面的美化,有美術(shù)功底的學(xué)生比較適合做此類工作。
1.
2.
如有侵權(quán)請(qǐng)聯(lián)系刪除!
Copyright ? 2023 江蘇優(yōu)軟數(shù)字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服務(wù)提供商
13262879759
微信二維碼