A. 手機的硬體,CPU,軟體,操作系統各是指什麼,還有那個JAVA又是什麼,個操作系統有何區別可以通過刷...
「嵌入」的概念
主要從三個方面上來理解。
1、從硬體上,將基於CPU的處圍器件,整合到CPU晶元內部,比如早期基於X86體系結構下的計算機,CPU只是有運算器和累加器的功能,一切晶元要造外部橋路來擴展實現,象串口之類的都是靠外部的16C550/2的串口控制器晶元實現,而目前的這種串口控制器晶元早已集成到CPU內部,還有PC機有顯卡,而多數嵌入式處理器都帶有LCD控制器,但其種意義上就相當於顯卡。比較高端的ARM類Intel Xscale架構下的IXP網路處理器CPU內部集成PCI控制器(可配成支持4個PCI從設備或配成自身為CPI從設備);還集成3個NPE網路處理器引擎,其中兩個對應於兩個MAC地址,可用於網關交換用,而另外一個NPE網路處理器引擎支持DSL,只要外面再加個PHY晶元即可以實現DSL上網功能。IXP系列最高主頻可以達到1.8G,支持2G內存,1G×10或10G×1的乙太網口或Febre channel的光通道。IXP系列應該是目標基於ARM體系統結構下由intel進行整合後成Xscale內核的最高的處理器了。
2、從軟體上前,就是在定製操作系統內核里將應用一並選入,編譯後將內核下載到ROM中。而在定製操作系統內核時所選擇的應用程序組件就是完成了軟體的「嵌入」,比如WinCE在內核定製時,會有相應選擇,其中就是wordpad,PDF,MediaPlay等等選擇,如果我們選擇了,在CE啟動後,就可以在界面中找到這些東西,如果是以前PC上將的windows操作系統,多半的東西都需要我們得新再裝。
3、把軟體內核或應用文件系統等東西燒到嵌入式系統硬體平台中的ROM中就實現了一個真正的「嵌入」。
以上的定義是我在6、7年前給嵌入式系統下自話側重於理解型的定義,書上的定義也有很多,但在這個領域范圍內,誰都不敢說自己的定義是十分確切的,包括那些專家學者們,歷為畢竟嵌入式系統是計算機范疇下的一門綜合性學科
二、嵌入式系統的分層與專業的分類。
嵌入式系統分為4層,硬體層、驅動層、操作系統層和應用層。
1、硬體層,是整個嵌入式系統的根本,如果現在單片機及介面這塊很熟悉,並且能用C和匯編語言來編程的話,從嵌入式系統的硬體層走起來相對容易,硬體層也是驅動層的基礎,一個優秀的驅動工程師是要能夠看懂硬體的電路圖和自行完成CPLD的邏輯設計的,同時還要對操作系統內核及其調度性相當的熟悉的。但硬體平台是基礎,增值還要靠軟體。
硬體層比較適合於,電子、通信、自動化、機電一體、信息工程類專業的人來搞,需要掌握的專業基礎知識有,單片機原理及介面技術、微機原理及介面技術、C語言。
2、驅動層,這部分比較難,驅動工程師不僅要能看懂電路圖還要能對操作系統內核十分的精通,以便其所寫的驅動程序在系統調用時,不會獨占操作系統時間片,而導至其它任務不能動行,不懂操作系統內核架構和實時調度性,沒有良好的驅動編寫風格,按大多數書上所說添加的驅動的方式,很多人都能做到,但可能連個初級的驅動工程師的水平都達不到,這樣所寫的驅動在應用調用時就如同windows下我們打開一個程序運行後,再打開一個程序時,要不就是中斷以前的程序,要不就是等上一會才能運行後來打開的程序。想做個好的驅動人員沒有三、四年功底,操作系統內核不研究上幾編,不是太容易成功的,但其工資在嵌入式系統四層中可是最高的。
驅動層比較適合於電子、通信、自動化、機電一體、信息工程類專業尤其是計算機偏體系結構類專業的人來搞,除硬體層所具備的基礎學科外,還要對數據結構與演算法、操作系統原理、編譯原理都要十分精通了解。
3、操作系統層,對於操作系統層目前可能只能說是簡單的移植,而很少有人來自已寫操作系統,或者寫出缺胳膊少腿的操作系統來,這部分工作大都由驅動工程師來完成。操作系統是負責系統任務的調試、磁碟和文件的管理,而嵌入式系統的實時性十分重要。據說,XP操作系統是微軟投入300人用兩年時間才搞定的,總時工時是600人年,中科院軟體所自己的女媧Hopen操作系統估計也得花遇幾百人年才能搞定。因此這部分工作相對來講沒有太大意義。
4、應用層,相對來講較為容易的,如果會在windows下如何進行編程介面函數調用,到操作系統下只是編譯和開發環境有相應的變化而已。如果涉及Jave方面的編程也是如此的。嵌入式系統中涉及演算法的由專業演算法的人來處理的,不必歸結到嵌入式系統范疇內。但如果涉及嵌入式系統下面嵌入式資料庫、基於嵌入式系統的網路編程和基於某此應用層面的協議應用開發(比如基於SIP、H.323、Astrisk)方面又較為復雜,並且有難度了。
三、目標與定位。
先有目標,再去定位。
學ARM,從硬體上講,一方面就是學習介面電路設計,另一方面就是學習匯編和C語言的板級編程。如果從軟體上講,就是要學習基於ARM處理器的操作系統層面的驅動、移植了。這些對於初學都來說必須明確,要麼從硬體著手開始學,要麼從操作系統的熟悉到應用開始學,但不管學什麼,只要不是純的操作系統級以上基於API的應用層的編程,硬體的寄存器類的東西還是要能看懂的,基於板級的匯編和C編程還是要會的。因此針對於嵌入式系統的硬體層和驅動程的人,ARM的介面電路設計、ARM的C語言和匯編語言編程及調試開發環境還是需要掌握的。
因此對於初學者必然要把握住方向,自己的目標是什麼,自己要在那一層面上走。然後再著手學習較好,與ARM相關的嵌入式系統的較為實際的兩個層面硬體層和驅動層,不管學好了那一層都會很有前途的。
如果想從嵌入式系統的應用層面的走的話,可能與ARM及其它體系相去較遠,要著重研究基嵌入式操作系統的環境應用與相應開發工具鏈,比如WinCe操作系統下的EVC應用開發(與windows下的VC相類似),如果想再有突破就往某些音視頻類的協議上靠,比如VOIP領域的基於SIP或H.323協議的應用層開發,或是基於嵌入式網路資料庫的開發等等。
對於初學者來講,要量力而行,不要認為驅動層工資高就把它當成方向了,要結合自身特點,嵌入式系統四個層面上那個層面上來講都是有高人存在,當然高人也對應的高工資,我是做硬體層的,以前每月工資中個人所得稅要被扣上近3千大元,當然我一方面充當工程師的角色,一方面充當主管及人物的角色,兩個職位我一個人干,但上班時間就那些。硬體這方面上可能與我PK的人很少了,才讓我拿到那麼多的工資。
四、開發系統選擇。
很多ARM初學者都希望有一套自己能用的系統,但他們住住會產生一種錯誤認識就是認為處理器版本越高、性能越高越好,就象很多人認為ARM9與ARM7好,我想對於初學者在此方面以此入門還應該理智,開發系統的選擇最終要看自己往嵌入式系統的那個方向上走,是做驅動開發還是應用,還是做嵌入式系統硬體層設計與板級測試。如果想從操作系統層面或應用層面上走,不管是驅動還是應用,那當然處理器性能越高越好了,但這個東西自學,有十分大的困難,不是幾個月或半年或是一年二年能搞定的事。
在某種意義上請,ARM7與9的差別就是在某些功能指令集上豐富了些,主頻提高一些而已,就比如286和386。對於用戶來講可能覺查不到什麼,只能是感覺速度有些快而已。
ARM7比較適合於那些想從硬體層面上走的人,因為ARM7系列處理器內部帶MMU的很少,而且比較好控制,就比如S3C44B0來講,可以很容易將Cache關了,而且內部介面寄存器很容易看明白,各種介面對於用硬體程序控制或AXD單步命令行指令都可以控制起來,基於51單片機的思想很容易能把他搞懂,就當成個32位的單片機,從而消除很多51工程師想轉為嵌入式系統硬體ARM開發工程師的困惑,從而不會被業界某此不是真正懂嵌入式爛公司帶到操作系統層面上去,讓他們望而失畏,讓業界更加缺少這方面的人才。
而嵌入式系統不管硬體設計還是軟體驅動方面都是十分注重介面這部分的,選擇平台還要考察一個處理器的外部資源,你接觸外部資源越多,越熟悉他們那你以後就業成功的機率就越高,這就是招聘時所說的有無「相關技能」,因為一個人不可能在短短幾年內把所有的處理器都接觸一遍,而招聘單位所用的處理器就可能是我們完全沒有見過的,就拿台灣數十家小公司(市價幾千萬)的公司生產的ARM類處理器,也很好用,但這些東西通用性太差,用這些處理器的公司就只能招有相關工作經驗的人了,那什麼是相關工作經驗,在硬體上講的是外圍介面設計,在軟體上講是操作系統方面相關介面驅動及應用開發經驗。我從業近十年,2000年ARM出現,我一天始做ARM7,然後直接跑到了Xscale(這個板本在ARM10-11之間),一做就是五年,招人面試都不下數百人,在這些方面還是深有體會的。
我個人認為三星的S3C44b0對初學者來說比較合適,為什麼這么說哪?因為介面資源比較豐富,技術成熟,資料較多,應該十分適合於初學者,有問題可能很容易找人幫且解決,因為大多數人都很熟悉,就如同51類的單片機,有N多位專家級的人物可以給你幫忙,相關問題得以很快解答,所然業界認為這款ARM都做用得爛了,但對於初學者來,就卻是件好事。
因此開發系統的選擇,要看自己的未來從來目標方向、要看開發板介面資源、還要看業界的通用性。
五、如何看待培訓。
首先說說我自己,我目前從業近十年,與國內嵌入式系統行業共同起步,一直站在嵌入式系統行業前沿,設計過多款高端嵌入式系統平台產品並為眾多公司提供過解決方案,離職前為從事VOIP的美資公司設計IP-PBX,歷任項目經理、項目主管、技術總監、部門經理,積累眾多人脈,並集多年經驗所得,考慮到學生就業與公司招人的不相匹配,公司想招人招不到,而學生和剛畢業的工程師想找份工作也不太容易,於此力創知天行科技有限公司,開展嵌入式系統教育培訓。
因一線的科研人員和一線的教師不相接觸,導至國內嵌入式人才缺乏,國外高校的技術超前於業界公司,而國內情況是業界公司方面的嵌入式系統技術要遠遠領先於高校。為架構業界與高校溝通的橋梁,把先進技能帶給高校學子,為學生在就業競爭中打造一張王牌,並為業界工程師快速提升實現自我創造機遇,我就這樣辭去了外企年薪20多萬的職位,做嵌入式系統方面的培訓了。
對於培訓來講,是花錢來買時間,很多工程師都喜歡自己學,認為培訓不值,這也是有可能的,純為賺錢的培訓當然不會太有價值,但對於實力型的培訓他們可能就虧大了,有這樣一筆帳不知他們算過沒有,如果一個一周的培訓,能帶給他們自學兩年後才能掌握的知識,在培訓完後他們用三個月到半年時間消化培訓內容,這樣他會省約至少一年半的時間來學其它的或重新站在另一個高度上工作,那麼他將最遲一年後會拿到他兩年後水平所對應的工資,就是在工資與水平對應的關繫上比同批人縮短一年,每月按最少1千計,再減去培訓費用至少多1.0萬,同時也省了一年時間,不管是休閑也好,再繼續提高也好,總之是跑到了隊伍的前面了。
另一層面上講,對於新人的培訓相當於他們為自己提前買了份失業保險,有師傅會帶領他們入道,我今年暑假時班裡最年輕的一個學生是大二的,今年才上大三,這學期才剛學單片機,但現在ARM方面的編程工作已經搞得有聲有色了,再過一年多畢業,他還會失業嗎?
再者通過培訓,你可以知道很多業界不為常人所知的事,同時也為自己找了個師傅,就比如說,兩個工程師分別用S3C2410和PXA255來做手持設備,同樣兩人都工作四年,再出去找工作,兩人工資可能最多可相差一倍,為什麼?這就是業界不為常人所知的規則,2410屬於民品,被業界用爛了,做產品時成本特敏感,當然也對人才成本敏感了,PXA255是intel的東西,一個255 CPU能買三個2410,一直被業界定義為貴族產品,用的公司都是大公司或為軍方服務的公司,不會在乎成本,只要把東西做好,一切都好說,但這方面做的人也少啊,因為開發系統貴啊。
對於說為自已找了個好師傅,我想是這樣的,因為同級工程師間存在著某此潛在的競爭關系,有很多人不願意把自己知道的東西教給別人,這意味著他將要失業,就是所說的教會徒弟,餓死師傅,但對於我們這些人就不存在這樣的關系了,我是在嵌入式系統平台設計上走到了一定程序,目前在國內這塊的技術上已經是自己很難再突破自己,因此很多東西我對大家都是OPEN的,就比如說下面那部分關於介面設計中所提到的時序介面東西,我要是不講,卻使是高級硬體工程師我想也幾乎只有10%的人能知道吧。
六、成為高級嵌入式系統硬體工程師要具備的技能。
首先我聲明,我是基於嵌入式系統平台級設計的,硬體這個方向我相對來講比較有發言權,如果是其它方面所要具備的基本技能還要和我們培訓中心其它專業級講師溝通,或去網站看看。他們的方面上我只能說是知道些,但不是太多,初級的問題也可以問我。
對於硬體來講有幾個方向,就單純信號來分為數字和模擬,模擬比較難搞,一般需要很長的經驗積累,單單一個阻值或容值的精度不夠就可能使信號偏差很大。因此年輕人搞的較少,隨著技術的發展,出現了模擬電路數字化,比如手機的Modem射頻模塊,都採用成熟的套片,而當年國際上只有兩家公司有此技術,自我感覺模擬功能不太強的人,不太適合搞這個,如果真能搞定到手機的射頻模塊,只要達到一般程度可能月薪都在15K以上。
另一類就是數字部分了,在大方向上又可分為51/ARM的單片機類,dsp類,FPGA類,國內FPGA的工程師大多是在IC設計公司從事IP核的前端驗證,這部分不搞到門級,前途不太明朗,即使做個IC前端驗證工程師,也要搞上幾年才能勝任。dsp硬體介面比較定型,如果不向驅動或是演算法上靠攏,前途也不會太大。而ARM單片機類的內容就較多,業界產品佔用量大,應用人群廣,因此就業空間極大,而硬體設計最體現水平和水準的就是介面設計這塊,這是各個高級硬體工程師相互PK,判定水平高低的依據。而介面設計這塊最關鍵的是看時序,而不是簡單的連接,比如PXA255處理器I2C要求速度在100Kbps,如果把一個I2C外圍器件,最高還達不到100kbps的與它相接,必然要導致設計的失敗。這樣的情況有很多,比如51單片機可以在匯流排接LCD,但為什麼這種LCD就不能掛在ARM的匯流排上,還有ARM7匯流排上可以外接個Winband的SD卡控制器,但為什麼這種控制器接不到ARM9或是Xscale處理器上,這些都是問題。因此介面並不是一種簡單的連接,要看時序,要看參數。 一個優秀的硬體工程師應該能夠在沒有參考方案的前提下設計出一個在成本和性能上更加優秀的產品,靠現有的方案,也要進行適當的可行性裁剪,但不是胡亂的來,我遇到一個工程師把方案中的5V變1.8V的DC晶元,直接更換成LDO,有時就會把CPU燒上幾個。前幾天還有人希望我幫忙把他們以前基於PXA255平台的手持GPS設備做下程序優化,我問了一下情況,地圖是存在SD卡中的,而SD卡與PXA255的MMC控制器間採用的SPI介面,因此導致地圖讀取速度十分的慢,這種情況是設計中嚴重的缺陷,而不是程序的問題,因此我提了幾條建議,讓他們更新試下再說。因此想成為一個優秀的工程師,需要對系統整體性的把握和對已有電路的理解,換句話說,給你一套電路圖你終究能看明白多少,看不明白80%以上的話,說明你離優秀的工程師還差得遠哪。其次是電路的調試能力和審圖能力,但最最基本的能力還是原理圖設計PCB繪制,邏輯設計這塊。這是指的硬體設計工程師,從上面的硬體設計工程師中還可以分出ECAD工程師,就是專業的畫PCB板的工程師,和EMC設計工程師,幫人家解決EMC的問題。硬體工程師再往上就是板級測試工程師,就是C語功底很好的硬體工程師,在電路板調試過程中能通過自已編寫的測試程序對硬體功能進行驗證。然後再交給基於操作系統級的驅動開發人員。
總之,硬體的內容很多很雜,硬體那方面練成了都會成為一個高手,我時常會給人家做下方案評估,很多高級硬體工程師設計的東西,經常被我一句話否定,因此工程師做到我這種地步,也會得罪些人,但硬體的確會有很多不為人知的東西,讓很多高級硬體工程師也摸不到頭腦。
那麼高級硬體件工程師技術技能都要具備那些東西哪,首先要掌握EDA設計的輔助工具類如Protel\ORCAD\PowperPCB\Maplux2\ISE、VDHL語言,要能用到這些工具畫圖畫板做邏輯設計,再有就是介面設計審圖能力,再者就是調試能力,如果能走到總體方案設計這塊,那就基本上快成為資深工程師了。
硬體是要靠經驗,也要靠積累的,十年磨一劍,百年磨一針。
B. 匯編語言有什麼特點
1、機器相關性
這是一種面向機器的低級語言,通常是為特定的計算機或系列計算機專門設計的。因為是機器指令的符號化表示,故不同的機器就有不同的匯編語言。使用匯編語言能面向機器並較好地發揮機器的特性,得到質量較高的程序。
2、高速度和高效率
匯編語言保持了機器語言的優點,具有直接和簡捷的特點,可有效地訪問、控制計算機的各種硬體設備,如磁碟、存儲器、CPU、I/O埠等,且佔用內存少,執行速度快,是高效的程序設計語言。
3、編寫和調試的復雜性
由於是直接控制硬體,且簡單的任務也需要很多匯編語言語句,因此在進行程序設計時必須面面俱到,需要考慮到一切可能的問題,合理調配和使用各種軟、硬體資源。這樣,就不可避免地加重了程序員的負擔。與此相同,在程序調試時,一旦程序的運行出了問題,就很難發現。
(2)編譯原理的總體結構圖擴展閱讀
匯編語言的發展歷程:
說到匯編語言的產生,首先要講一下機器語言。機器語言是機器指令的集合。機器指令展開來講就是一台機器可以正確執行的命令。電子計算機的機器指令是一列二進制數字。計算機將之轉變為一列高低電平,以使計算機的電子器件受到驅動,進行運算。
上面所說的計算機指的是可以執行機器指令,進行運算的機器。這是早期計算機的概念。在我們常用的PC機中,有一個晶元來完成上面所說的計算機的功能。這個晶元就是我們常說的CPU(Central Processing Unit,中央處理單元)。
每一種微處理器,由於硬體設計和內部結構的不同,就需要用不同的電平脈沖來控制,使它工作。所以每一種微處理器都有自己的機器指令集,也就是機器語言。
早期的程序設計均使用機器語言。程序員們將用0, 1數字編成的程序代碼打在紙帶或卡片上,1打孔,0不打孔,再將程序通過紙帶機或卡片機輸入計算機,進行運算。這樣的機器語言由純粹的0和1構成,十分復雜,不方便閱讀和修改,也容易產生錯誤。
程序員們很快就發現了使用機器語言帶來的麻煩,它們難於辨別和記憶,給整個產業的發展帶來了障礙,於是匯編語言產生了。
C. 嵌入式需要學習什麼
嵌入式開發學習路線圖-尚觀嵌入式研究室-嵌入式路線圖
-------作者:尚觀嵌入式研究室UEA0908班 范同學
為什麼選擇學習嵌入式?
嵌入式系統無疑是當前最熱門最有發展前途的IT應用領域之一,同時也是當今IT領域僅存的幾個金領職位之一。當前的中國IT人才面臨嚴重的「後繼乏人」,
而且這種缺口由於培訓缺乏、教育模式等原因造成的,而缺口最大的,就是高級IT人才。如果你從事的IT培訓不專業,面對競爭越來越激烈的職場,基本找不到
工作。據專家預測,嵌入式每年人才缺口在30萬左右。
入式職業發展講解視頻
視頻中主要講解什麼樣的人適合從事嵌入式行業、嵌入式行業從業人員需要具備哪些基本素質、嵌入式行業的特點以及嵌入式行業的現狀與發展。
嵌入式研發方向職業生涯講解視頻(1)
嵌入式研發方向職業生涯講解視頻(2)
嵌入式研發方向職業生涯講解視頻(3)
嵌入式研發方向職業生涯講解視頻(4)
嵌入式研發方向職業生涯講解視頻(5)
ARM+linux嵌入式底層內核驅動方向學習總體路線圖
基礎學習Ⅰ---Linux入門
目前嵌入式主要開發環境有
Linux、Wince等;Linux因其開源、開發操作便利而被廣泛採用。而Linux操作系統也只是一個簡單的操作系統,簡單的使用對於嵌入式開發人
員來說價值並不很高,真正有價值的是掌握Linux的基本服務和Linux的設計理念、思想,這對於嵌入式開發人員的長期發展是很極其重要的。Linux
系統有很多發行版,RedHat、Ubuntu、Fedora等。作為嵌入式開發人員,我們沒有必要把精力放到使用哪個Linux發行版上,而是盡快把
Linux系統盡快安裝好。如果打算堅持長期學習,那麼建議您把自己的電腦做成雙系統,而不要在虛擬機上安
裝
基礎學習Ⅱ---C語言
C語言是嵌入式開發必備的基礎知識。在Linux下從事C語言的開發,你會覺得更為順暢、更為自然,因為C語言是因unix的出現而誕生的,Linux內
核幾乎完全是由C語言編寫完成的。學習C語言,如果不會用指針,那麼就稱不上會C語言。做嵌入式開發指針更顯得尤為重要,所以做嵌入式開發除了掌握位操
作、限定詞等,對指針的掌握是不可或缺的。而且要掌握多級指針、函數指針等等。涉及到指針,那麼就會講到內存分配。在大學中,學習C語言一般的學習很少講
到內存分配,但是如果期望從事嵌入式開發,那麼就必須懂得C語言是怎麼做內存分配管理的。指針之外,還要學習模塊化編譯處理、指針與數組、gcc、
Makefile、GDB、遞歸、結構體、宏定義使用等。C語言是整棟嵌入式大廈的基礎,所以在學習嵌入式時,必須把C語言重視起來,多敲代碼,多練。一
名優秀的程序員必定是通過「體力勞動」再轉向「腦力勞動的」,這也是為什麼我們要有「寫不出代碼=0」思想的原因所在。
如果說C語言相當於文字,那麼數據結構就相當於在造句、寫文章。代碼質量有一部分取決於對數據結構的掌握程度。在數據結構部分我們要把鏈表、樹、排序作
為學習重點。而且我們也可以查看一些比較常見的函數(如str、strcat、printf等)在內核中是如何實現的,以及編寫代碼模擬堆棧,這
不僅有利於編寫代碼質量的提高,而且還可以初步了解Linux內核精髓,為今後工作打下堅實的基礎。
C++、QT在嵌入式開發領域,是用來開發圖形界面的,希望從事上層應用開發及圖形界面,那麼在C++、QT方面需要比較深入的學習。
B)經典學習視頻推薦:
1-1c語言編輯器vi的使用
1-2c語言編譯過程及編譯器gcc
2-1c語言的數據類型
2-2數據快速引用
2-3c語言運算符及表達式
3-1c語言的分支結構
3-2c語言的循環結構
4-1c語言函數的定義及傳
4-2c語言函數調用
5-1-1c語言的一維數組
5-1-2二維數組及多維數組
5-1-3c語言字元數組
5-2-1c語言結構體-Struct
5-2-2C語言聯合體-Union
6-1c語言指針的概念
6-2c語言指針與一維數組
6-3指針與二維數組及字元
6-4指針與結構體、聯合體
6-5c語言指針與函數
6-6c語言指針常量與常量
7c語言存儲空間管理
8-1c語言存儲模型分析
8-2雙向循環鏈表的創建增
8-3雙向循環鏈表的數據管
C)經典學習案例:
1、學員成績管理系統2、計算器3、電子詞典4、文件壓縮器
基礎進階---Linux應用程序設計
Linux的思想源於Unix。Linux繼承了Unix的優點,但是沒有用UNIX的代碼,所有程序都是重新編寫的,而且Linux與Unix的源碼級兼容。Linux是類Unix操作系統。Linux
不僅符合 POSIX 標准,而且還包括其它 UNIX 標準的多種特性,例如,UNIX 的 System V 介面文檔(System V Interface
Document,SVID)和伯克利軟體發布(Berkeley Software Distribution,BSD)版本。Linux 採用了折衷的策略,包含了
UNIX 幾個典型特性當中最實用的一些功能:
Linux 採用了 SVR4 的進程間通信(IPC)機制:共享內存、消息隊列、信號。
Linux 支持 BSD Socket 網路編程介面。
許多 Linux 發行版採用 SysV init
機制,支持運行級別。
此階段的學習是從事嵌入式上層應用開發以及底層開發人員的必修課程。進程、線程、信號、文件鎖、socket是這部分內容的重點。要把這些內容學的透徹非要下些苦功夫不可。而且函數是系統提供給我們的,難免要對計算機系統深入理解一番。TCP/IP協議也是要涉及到的。有問題建議用Google搜索及登陸chinaunix論壇。通過這個階段的學習,我們就可以初步實現一些應用程序的開發了,如做自己的shell命令解析器、簡單的聊天軟體、視頻多播等。
A)經典書籍推薦:
B)經典學習視頻推薦:
Linux網路開發-1、ARP攻擊原理
Linux網路開發-2、ARP攻擊實例分析
Linux網路開發-3、ARP攻擊程序代碼分析和socket構造
C)經典學習案例:
1、串口監聽程序
2、圖片瀏覽器 3、MP3播放器 4、聊天程序 5、 ftp程序
6、音頻廣播程序 7、ping的實現
8、DDos攻擊程序 9、ARP攻擊程序
嵌入式入門---ARM體系結構
從這部分開始,我們將真正進入嵌入式開發學習階段。首先我們要知道採用哪種處理器。目前通用嵌入式處理器有ARM、MIPS、PowerPC、X86等。從市場產品佔有率上看,ARM處理器遠遠領先於同類其它處理器,並逐步掠奪傳統51單片機和英特爾市場份額。據招聘網站統計,目前用人單位在技術水平上要求開發人員掌握ARM9及以上平台的開發技術。ARM公司在發布ARM11產品後,更改以往的數字標記更新方式,轉為發布ARM
Cortex。但是Cortex並不是更高端,而是全新系列的處理器,比如Cortex
M3,它主要應用於機械加工、工控領域,目的是取代以前的ARM7處理器。
在開始學習前,建議有一塊自己的開發板,目前ARM9
2440的開發板價格在400-600元之間,ARM11
6410的開發板價格要高一些,最便宜的也要1200元以上。在此,提醒大家盡量不要買mini開發板,雖然mini開發板的價格要便宜些,但是與正常開發板相比,mini板功能是不完善的。嵌入式匯編有別於X86匯編,所以如果以前沒有接觸過匯編語言,那麼沒有必要先去學X86匯編再學嵌入式匯編,可以直接學習嵌入式匯編。除了匯編我們還要學習ARM指令集。有了開發板,我們要下載相對應處理器的DataSheet及開發板電路原理圖。ARM體系結構的學習我們是不能完全照抄別人代碼的,因為我們自己手中的開發板及處理器與別人是不同的,除非所用的代碼是根據你手中的開發板來編寫的。所以,我們要先去看書、看視頻資料理解原理及工作方式等,然後根據自己開發板的電路原理圖和DataSheet來編寫代碼,達到理解外圍設備工作原理和操作硬體的目的。
B)經典學習視頻推薦:
1)嵌入式掃盲篇
嵌入式漫談1
嵌入式漫談2
嵌入式漫談3
十問嵌入式1-什麼是嵌入式,創業
十問嵌入式2-嵌入式實例iphone
十問嵌入式3-嵌入式前景
十問嵌入式4-嵌入式學習
十問嵌入式5-ARM概述
十問嵌入式6-ARM概述
開發板
十問嵌入式7-ARM與單片機
十問嵌入式8-匯編語言的作用
十問嵌入式9-操作系統的選擇
十問嵌入式10-編程語言選擇
2)嵌入式開發概述
嵌入式開發入門經典教程-1
嵌入式開發入門經典教程-2
嵌入式開發入門經典教程-3
嵌入式開發入門經典教程-4
嵌入式開發入門經典教程-5
嵌入式開發入門經典教程-6
嵌入式開發入門經典教程-7
嵌入式開發入門經典教程-8
嵌入式開發入門經典教程-9
嵌入式開發入門經典教程-10
嵌入式開發入門經典教程-11
嵌入式開發入門經典教程-12
嵌入式開發入門經典教程-13
3)ARM體系結構與Bootloader開發
1、ARM基礎概念介紹與開發板使用教程
2、編譯器高級應用與裸機代碼編寫教程
3、ARM指令與ARM匯編入門
4、ARM匯編高級教程與APCS規范詳解
5、ARM體系結構詳解與異常處理機制
6、ARM中斷機制詳解與Watchdog驅動開發實例
7-1、ARM外部中斷機制詳解與LED驅動開發實例
7-2、ARM嵌入式開發之ARM外部中斷機制詳解與實例
8、AMBA匯流排結構與ARM時鍾配置
9、時序圖詳解與NAND
FLASH驅動開發實例
10-1、內存控器與SDRAM原理詳解(上)
10-2、內存控器與SDRAM原理詳解(下)
11、UART串口詳解與通信開發實例
12、ARM協處理器CP15配置原理
13、從零開始寫Bootloader開發過程詳解
C)經典學習案例:
1. ARM模擬器開發 2. Watchdog控製程序 3.
RTC時鍾控製程序
4. Uart控製程序 5. LCD控製程序 6.
觸摸屏控製程序
7. DMA控製程序 8. 音頻控製程序 9. 網卡控製程序
10.
文件系統製作 11. ARM-Linux移植
嵌入式提升---Linux內核、驅動
眾所周知嵌入式開發包含至少兩個級別,一個是嵌入式內核驅動級別,另外一個是嵌入式應用層開發,而薪酬高的、最具價值的無疑是嵌入式內核驅動級別的開發者。真正的嵌入式高手或者企業中的核心開發人員,一定是嵌入式底層的內核驅動開發工程師,這些工程師成長比較緩慢,造成對內核驅動人才的大量需求,所以這些人才是真正企業需要的香餑餑。掌握驅動開發會讓自己的核心能力有極大的飛躍,真正實現嵌入式最有價值的就業。
由於Linux內核更新速度很快,書籍和視頻不可能及時更新,所以我們再看書和視頻後,要自己動手下載內核源碼包,去看內核中的代碼,在這里可以充分檢驗C語言、數據結構等基礎知識的掌握程度。而驅動的編寫還是要藉助外設硬體電路原理圖和晶元手冊。內核和驅動的知識是讓我們根據不同的硬體,編寫對應的驅動、合理剪裁內核、製作文件系統,並移植到硬體開發板上。如果手裡有ARM11
6410及以上的開發板,可以試試在裸板上編寫驅動並移植Android系統到開發板上吧。
B)經典學習案例:
1. GPIO驅動 2. RTC時鍾驅動 3.
WatchDog驅動 4. Udev移植 5. 觸摸屏輸入設備驅動
6. LCD顯示設備驅動 7. DMA驅動 8.
音頻設備驅動 9. Nand Flash塊設備驅動 10. 網路設備驅動
有不明白的可以到尚觀嵌入式研究室咨詢,或者聽聽免費的網路公開課,希望對你有幫助
D. 想要學習怎樣編寫程序和製作軟體
你既然喜歡編程,就應該認認真真的學習一門語言,先從VB開始,VB是比較好的入門語言,可視化的,比較簡單,是非常好的入門語言。書籍最少應該准備兩本,不可能一本書籍會包含VB的所有內容,在看書的時候,可以交叉的看,一本書籍中沒有講到的內容可以在另一本中看到,這樣對學習是很有好處的,也能保證所學知識的完整性。學編程是一個很漫長的過程,不要著急,要理論與實踐想結合,常式書籍洞和改也是很重要的,看源代碼對學習也是很有幫助的,等你學完這門VB語言之後,學習別的語言是非棚賀常簡單,可以嘗試C語言,按照C——C++——VC的順序學習,有助於知識的連貫性,我也希望你能學好的。
學習C語言,譚浩強的《C程序設計》是一部非常好的C語言書籍,學習程序設計是一個非常漫長的過程,不要著急,一本書多看兩遍三遍,學會交叉學習法,在學習C的過程中,可以看看數據結構,編譯原理,操作系統等書籍,對編成都是很有幫助的。最開始學習的時候,先不要編一些比較大的程序,多編一些小程序,比如數組運算,字元組合等等,指針是C語言的精華,是比較復雜的部分。如果有一天你能熟練駕馭指針的操作了,我相信你,你一定能學習好C語言的。
我是2001年接觸編程的,剛開始只是大概了解一下,並沒有進行比較深入的學習,我是從VB開始入門的,學了1年多,然後轉入C語言,按照C——C++——VC的順序學習,C學了兩年,現在開始學習C++,C++的學習是很有難度的,類,標准庫,多態,繼承等等比較抽象難道懂的概念,雖然他秉承了C語言的風格,但是有很多很多是C語言不具備的,要多看書,上機實踐也是必不可少的。《C++編程思想》,《C++標准庫》,這些書都非常好,內容也很全面,常式書籍也是必不可少的,多看源代碼對編程是很有幫助的,也會少走很多彎路。總之,C++的學習是一個比較漫長的過程,大概需要兩年的時間,這只是底限,如果想學通,學精,還需要更多的時間。
我向你推薦一些C++經典書籍:
c++程序設計教程
c++編程思想
c++大學教程
c++程序設計語言
數據結構演算法與應用c++語言描述
c++標准模板庫------自修教程與參考手冊
泛型編程與STL
深度探索c++對象模型
設計模式---可復用面向對象軟體的基礎
重構---改善既有代碼的設計
Essential c++
Effective c++
More Effctive c++
C++ primer
前五本應該屬於入門書籍,後面的屬於學習難度比較大的,想提高C++的編程能力,看看這些書籍有好處。建議你把編程思想這本書多看看。多做練習題,對提高編程水平的幫助是很大的。
其實語言是相通的,一門語言學會了,學習其他語言就比較容易了。
業界有這樣一種說法,因為JAVA這門語言包含了C++的一些特性,掌握了C++,就等於掌握了JAVA的80%,
在掌握了C++之後(我說的掌握指的是,可以熟練用C++編程序了,並沒有要求你完全掌握C++的所有部分,沒有人能達到這一點,因為C++太龐大了,如果能堅持不懈的學習C++兩年到三年的時間了,你就可以學習其他的語言了)可以試著學習一些其他的語言,如JAVA,VC++等等比較復雜的語言.
這時候可以說你已經對程序設計語言有個大體的認識了,可以明確自己學習的方向,根據自己的學習情況而定,是學習一些自己比較感興趣的語言啊(從興趣出發),還是為了找工作啊,開始進行納判更深入的學習.比如學習windows下的框架編程和.net編程等等比較復雜的語言.
如果是為了找工作的話我建議你學好C,C++,JAVA三門語言.
在我國目前的軟體開發行業中,北方C,C++,JAVA的需求量是非常大的.南方以VB為主.
關於英語對學習程序設計有沒有幫助的文章這個話題已經有很多人議論過了,我個人建議把計算機專業術語弄明白了就可以了,你可以買一本計算機英語教程看一看,對程序設計是有幫助的。其實程序設計當中的英文都是一些非常簡單的,如for,else,while.......並沒有太高深的,而且學習程序設計不像學習網路,如CCNA這類認證需要掌握大量的英文。但是在學習程序設計的時候身邊有兩個工具應該足夠了-----------金山詞霸,計算機詞典。相信你一定能學好程序設計的。
學習數學和學習程序設計有一個共同點------鍛煉邏輯思維能力。在程序設計的學習中涉及到數學的地方並不多,所以也沒有必要去認真的學習數學也可以學好程序設計的。
如果你是一個肯吃苦,肯用心學習程序設計的人,具有堅持不懈的精神的人,我相信,只要你認認真真去學,即使你的英語數學水平再差,你也一定能夠學好程序設計的。
我是一名大三的學生,我也正在學習C++這門語言,一年多的時間,學習的感覺真的很累的,希望能和你成為朋友!
好了,說了這么多,可以參考一下,為自己做個學習計劃,要對自己有信心,最後祝你在學習編程的道路上走的更好更遠,祝你學有所成!!
E. 怎麼學習linux
Linux主體分為「運維」與「開發」兩個方向,無論你是Linux相關從業者,還是說愛好都可以歸類到這里,其中「運維」一般是初學者或者轉行人員的首選,而Linux運維主要是對伺服器穩定、性能與安全方面的維護和調試。
實際上Linux入門並不困難,只要具備Linux基礎,讀懂Linux的命令格式,大多數的服務架構都是可以按照文檔部署出來。當然做Linux開發,個人建議去參加培訓學習更有效率,如果報班學習則大概需要4-6個月時間。
學習主要內容有:
1)網路基礎與linux系統的管理
2)優化及高可用技能
3)虛擬化與雲平台技術
4)開發運維
畢業後可從事的工作有:
1)Linux運維工程師
2)資料庫工程師
3)雲計算運維工程師
4)自動化運維工程師
5)雲計算架構工程師等
互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。
祝你學有所成,望採納。