• <em id="6vhwh"><rt id="6vhwh"></rt></em>

    <style id="6vhwh"></style>

    <style id="6vhwh"></style>
    1. <style id="6vhwh"></style>
        <sub id="6vhwh"><p id="6vhwh"></p></sub>
        <p id="6vhwh"></p>
          1. 国产亚洲欧洲av综合一区二区三区 ,色爱综合另类图片av,亚洲av免费成人在线,久久热在线视频精品视频,成在人线av无码免费,国产精品一区二区久久毛片,亚洲精品成人片在线观看精品字幕 ,久久亚洲精品成人av秋霞

            嵌入式學習路線

            更新時間:2023-02-28 21:34:41 閱讀: 評論:0

            嵌入式工程師的學習路線是什么?

            關于這個方向,我認為大概分3個階段:
            1、嵌入式linux上層應用,包括QT的GUI開發
            2、嵌入式linux系統開發
            3、嵌入式linux驅動開發

            嵌入式目前主要面向的幾個操作系統是,LINUX,WINCE、VxWorks等等
            Linux是開源免費的,而且其源代碼是開放的,更加適合我們學習嵌入式。

            所以你可以嘗試以下路線:
            (1) C語言是所有編程語言中的強者,單片機、DSP、類似ARM的種種芯片的編程都可以用C語言搞定),因此必須非常熟練的掌握。
            推薦書籍:《The C Programming Language》 這本經典的教材是老外寫的,也有中譯版本。
            (2) 操作系統原理,是必需的,如果你是計算機專業畢業那也就無所謂了,如果是非計算機專業的就必須找一本比較淺顯的計算機原理書籍看一看,把啥叫“進程”“線程”“系統調度”等等基本問題搞清楚。
            (3)Linux操作系統就是用C語言編寫的,所以你也應該先學習下Linux方面的編程,只有你會應用了,才能近一步去了解其內核的精髓。
            推薦書籍:《UNIX環境高級編程》(第2版)
            (4) 了解ARM的架構,原理,以及其匯編指令,我們在嵌入式開發中,一般很少去寫匯編,但是最起碼的要求是能夠看懂arm匯編。
            (5) 系統移植的時候,就需要你從最下層的bootloader開始,然后內核移植,文件系統移植等。而移植這部分對硬件的依賴是非常大的,其配置步驟也相對復雜,也沒有太多詳細資料。
            (6) 驅動開發
            linux驅動程序設計既是個極富有挑戰性的領域,又是一個博大精深的內容。
            linux驅動程序設計本質是屬于linux內核編程范疇的,因而是對linux內核和內核編程是有要求的。在學習前你要想了解linux內核的組成,因為每一部分要詳細研究的話足夠可以擴展成一本厚書。

            以上只不過是大概的框架,在實際的開發中還會涉及很多東西,比如:交叉編譯、makefile、shell腳本等等,所以說學習嵌入式的周期較長,門檻較高,自學的話更是需要較強的學習能力和專業功底。只要能堅持下來一定會取得成功!
            …………………………………………
            嵌入式非常難,看書的話比較晦澀難懂,不容易入門,我個人比較偏向于看視頻教程,因為有老師帶著比較容易入門。給看看一篇文章是關于一位專科生怎么自學嵌入式的。

            做個自我介紹,我07年考上一所很爛專科民辦的學校,學的是生物專業,具體的學校名稱我就不說出來獻丑了。09年我就輟學了,我在那樣的學校,一年學費要1萬多,但是根本沒有人學習,我實在看不到希望,我就退學了。
            退學后我也迷茫,大專都沒有畢業,我真的不知道我能干什么,我在糾結著我能做什么。所以輟學后我一段時間,我想去找工作,因為我比較沉默寡言,不是很會說話,我不適合去應聘做業務。我想應聘做技術的,可是處處碰壁。
            一次偶然的機會,我才聽到嵌入式這個行業。那天我去新華書店,在計算機分類那邊想找本書學習。后來有個女孩子走過來,問我是不是讀計算機的,有沒有興趣學習嵌入式,然后給我介紹了一下嵌入式現在的火熱情況,告訴我學嵌入式多么的有前景,給我了一份傳單,嵌入式培訓的廣告。聽了她的介紹,我心里癢癢的,確實我很想去學會一門自己的技術,靠自己的雙手吃飯。
            回家后,我就上網查了下嵌入式,確實是當今比較熱門的行業,也是比較好找工作的,工資也是相對比較高。我就下決心想學嵌入式了。于是我去找嵌入式培訓的相關信息,說真的,我也很迷茫,我不知道培訓是否真的能像他們宣傳的那樣好,所以我就想了解一段時間再做打算。
            后來,我在百度知道看到一篇讓我很鼓舞的文章,是一個嵌入式高手介紹沒有基礎的朋友怎么自學入門學嵌入式,文章寫的很好,包含了如何學習,該怎么學習。他提到一個方法就是看視頻,因為看書實在太枯燥和費解的,很多我們也看不懂。這點我真的很認同,我自己看書往往看不了幾頁。
            我在想,為什么別人都能自學成才,我也可以的!我要相信自己,所以我就想自學,如果實在學不會我再去培訓。
            主意一定,我就去搜索嵌入式的視頻,雖然零星找到一些嵌入式的視頻,但是都不系統,我是想找一個能夠告訴我該怎么學的視頻,一套從入門到精通的視頻,一個比較完整的資料,最好能有老師教,不懂可以請教的。
            后來我又找到一份很好的視頻,是在IT學習聯盟網站推出的一份視頻《零基礎嵌入式就業班》(喜歡《零基礎嵌入式就業班》的可以復制 sina.lt/qKh 粘貼瀏覽器按回車鍵即打開)。里面的教程還不錯,很完整,可以讓我從基礎的開始學起。視頻比較便宜。
            下面介紹下我的學習流程,希望對和我一樣完全沒有基礎的朋友有所幫助。
            收到他們寄過來的光盤后,我就開始學習了,由于我沒有什么基礎,我就從最簡單的C語言視頻教程學起,話說簡單,其實我還是很多不懂的,我只好請教他們,他們還是很熱心的,都幫我解決了。C語言我差不多學了一個禮拜,接下來我就學了linux的基本命令,我在他們提供linux虛擬機上都有做練習,敲linux的基本命令,寫簡單的C語言代碼,差不多也就三個禮拜。我每天都在不停的寫一些簡單的代碼,這樣一月后我基本掌握了C和linux的基本操作。
            接下來我就去學習了人家的視頻的培訓教程,是整套的,和去參加培訓沒有多大的區別,這一看就是兩個月,學習了ARM的基本原理,學習嵌入式系統的概念,也掌握了嵌入式的環境的一些搭建,對linux也有更深層次的理解了,明白了嵌入式應用到底是怎么做的,但是驅動我只是有一點點的了解,這個相對難一點,我想以后再慢慢啃。
            這兩個月,除了吃飯睡覺,我幾乎都在學習。因為我知道幾乎沒有基礎,比別人差勁,我只能堅持努力著,我不能放棄,我必要要靠自己來養活自己,必須學好這門技術,然后我就把不懂的問題總結記下來,這樣慢慢積累了一段時間,我發現自己真的有點入門了。
            最后的一個月,我就去看關于實踐部分的內容,了解嵌入式項目具體的開發流程,需要什么樣的知識,我就開始準備這方面的知識,也就是學習這方面的視頻,同時他們建議我去找了找一些嵌入式面試的題目,為自己以后找工作做準備。我就到網上找了很多嵌入式的題目,把他們理解的記下來,這樣差不多準備了20天左右
            我覺得自己差不多入門了,會做一些簡單的東西了。我就想去找工作看看,于是我就到51job瘋狂的投簡歷,因為我學歷的問題,專科沒有畢業,說真的,大公司沒有人會要我,所以我投的都是民營的小公司,我希望自己的努力有所回報。沒有想過幾天過后,就有面試了,但是第一次面試我失敗了,雖然我自認為筆試很好,因為我之前做了準備,但是他們的要求比較嚴格,需要有一年的項目經驗,所以我沒有被選中。
            后來陸續面試了幾家公司,終于功夫不負有心人。我終于面試上的,是在閔行的一家民營的企業,公司規模比較小,我的職務是嵌入式linux應用開發,做安防產品的應用的。我想我也比較幸運,經理很看重我的努力,就決定錄用我,開的工資是3500一個月,雖然我知道在上海3500只能過溫飽的生活,但是我想我足夠了。我至少不用每天都要靠父母養,我自己也能養活自己的。我想只要我繼續努力,我工資一定會翻倍的。
            把本文寫出來,希望能讓和我一樣的沒有基礎的朋友有信心,其實我們沒有必要自卑,我們不比別人笨,只要我們肯努力,我們一樣會成功。
            …………………………………………………………

            希望不久的將來你也成為嵌入式的高手。

            有沒有嵌入式開發的學習路線,越詳細越好

              看方向
              如果選擇嵌入式硬件開發,就不懂了
              軟件開發的話,分底層和應用層
              我是從事wince驅動開發的(快滿一年),
              以wince為例,底層就是boot、bsp修改、驅動開發這幾部分
              學習路線:
              1、買個開發板
              2、按照開發板上的例子玩玩,ARM匯編稍微能看懂,寫點簡單的程序跑跑,對匯編有個大概的了解,bootloader等等會多少涉及點匯編的東西
              然后就是開發板上的一些驅動玩玩。如果可以拿相似的BSP移植到開發板上就更好了,對BSP就有更多的認識了,學完以上可能可以找到工作,在工作中進一步加深理解
              如果是應用的話,wince,我們寫應用用的是VS2005,VC++,和PC的開發基本差不多
              學完一個操作系統,切換到另一個平臺相對而言還是蠻快的,基本都是相通的
              我之前的經驗是,我買了開發板玩了ADS程序寫了小型的程序,就是把LED啊、液晶屏啊、等等驅起來,然后,在linux下玩驅動,寫了幾個簡單的流驅動,去應聘,鬼使神差被招進去玩wince驅動了,感覺差得不是很多,玩了2周就開始上手,2個月之后,底層這塊就都扔給我了

              以上,僅供參考(至于開發板,如果是消費電子類的,好像三星的S3C系列用的人比較多,開發板也很多,工業類的就不懂了。至于選哪家開發板廠家,百度google一下)

            學習嵌入式,要如何學好嵌入式

            原文鏈接:網頁鏈接

            嵌入式Linux學習路線圖

            我是1999年上的大學,物理專業。在大一時,我們班里普遍彌漫著對未來的不安,不知道學習了物理后出去能做什么。你當下的經歷、當下的學習,在未來的一天肯定會影響到你。畢業后我們也各自找到了自己的職業:出國深造轉行做金融、留校任教做科研、設計芯片、寫程序、創辦公司等等,這一切都離不開在校時學到的基礎技能(數學、IT、電子電路)、受過煅煉的自學能力。

            所以,各位正在迷茫的在校生,各位正在嘗試轉行的程序員,未來一定有你的位置,是好是壞取決于你當下的努力與積累。

            我不能預言幾年后什么行業會熱門,也不能保證你照著本文學習可以發財。我只是一個有十幾年經驗的程序員,給對編程有興趣的你,提供一些建議。

            1.程序員的三大方向

            程序員的方向,一般可以分為3類:專業領域、業務領域、操作系統領域。你了解它們后,按興趣選擇吧。

            對于專業領域,我提供不了建議。

            業務,也就是應用程序,它跟操作系統并不是截然分開的:

            ①開發實體產品時,應用程序寫得好的人,有時候需要操作系統的知識,比如調度優先級的設置、知道某些函數可能會令進程休眠。

            ②寫應用程序的人進階為系統工程師時,他需要從上到下都了解,這時候就需要有操作系統領域的知識了,否則,你怎么設計整個系統的方案呢?

            ③做應用程序的人,需要了解行業的需求,理解業務的邏輯。所以,當領導的人,多是做應用的。一旦鉆入了某個行業,很難換行業。

            ④而操作系統領域,做好了這是通殺各行業:他只負責底層系統,在上面開發什么業務跟他沒關系。這行很多是技術宅,行業專家。

            ⑤操作系統和業務之間并沒有一個界線。有操作系統經驗,再去做應用,你會對系統知根知底,碰到問題時都有解決思路。有了業務經驗,你再了解一下操作系統,很快就可以組成一個團隊自立門戶,至少做個CTO沒問題。

            1.1 專業領域

            它又可以分為下面2類。

            1.1.1 學術研究

            比如語音、圖像處理、人工智能,這類工作需要你有比較強的理論知識,我傾向于認為這類人是“科學家”,他們鉆研多年,很多時候是在做學術研究。

            在嵌入式領域,需要把他們的成果用某種算法表達出來,針對某種芯片進行優化,這部分工作也許有專人來做。

            1.1.2 工程實現

            也有這樣一類人,他們懂得這些專業領域的概念,但是沒有深入鉆研。可以使用各類開源資料實現某個目標,做出產品。比如圖像處理,他懂得用opencv里幾百個復雜函數來實現頭像識別。有時候還可以根據具體芯片來優化這些函數。

            “專業領域”不是我的菜,如果你要做這一塊,我想最好的入門方法是在學校學習研究生、博士課程。

            1.2 業務領域

            換句話說,就是應用程序,這又可以分為下面2類。

            1.2.1 界面顯示

            做產品當然需要好的界面,但是,不是說它不重要,是沒什么發展后勁。

            現在的熱門詞是Android APP和IOS APP開發。你不要被Android、IOS兩個詞騙了,它們跟以前的VC、VB是同一路貨色,只是、僅僅是一套GUI控件的實現。

            希望沒有冒犯到你,我有理由。

            一個程序需要有GUI界面,但是程序的內在邏輯才是核心。Android、IOS的開發工具給我們簡化了GUI的開發,并提供了這些控件的交互機制,封裝并提供了一些服務(比如網絡傳輸)。但是程序內部的業務邏輯、對視頻圖像聲音的處理等等,這才是核心。另外別忘了服務器那邊的后臺程序:怎樣更安全地保存數據、保護客戶的隱私,怎樣處理成千上萬上百萬的并發訪問,等等,這也是核心。

            但是,從Android、IOS APP入門入行,這很快!如果你是大四,急于找到一份工作,那么花上1、2個月去學習Android或IOS,應該容易找到工作,畢竟APP的需求永遠是最大的,現在這兩門技術還算熱門。在2011、2012年左右,Android程序員的起薪挺高,然后開始下滑。Android APP的入門基本只要1個月,所以懂的人也越來越多。2013、2014年,IOS開發的工資明顯比Android高了,于是各類IOS培訓也火曝起來。中華大地向來不缺速成人才,估計再過一陣子IOS工程師也是白菜價了。

            會Android、IOS只是基本要求,不信去51job搜搜Android或IOS,職位要求里肯定其他要求。

            1.2.2 業務邏輯

            舉個簡單例子,做一個打卡軟件,你需要考慮這些東西:

            ①正常流程是上班下班時都要打卡

            ②有人忘記了怎么辦?作為異常記錄在案,推送給管理員

            ③請假時怎么處理?

            ④加班怎么處理?

            對于更復雜的例子,視頻會議系統里,各個模塊怎么對接,各類協議怎么兼容,你不深入這個行業,你根本搞不清楚。

            應用開發的職位永遠是最多的,入門門檻也低。基本上只要你會C語言,面試時表現比較得體,一般公司都會給你機會。因為:

            ①你進公司后,還需要重新培訓你:熟悉它們的業務邏輯。

            ②你要做的,基本也就是一個個模塊,框架都有人給你定好了,你去填代碼就可以了。

            說點讓你高興的事:軟件公司里,做領導的基本都是寫應用程序的(當然還有做市場的)。寫應用程序的人,對外可以研究市場接待客戶,對內可以管理程序員完成開發,不讓他做領導讓誰做?

            如果你的志向是寫應用程序,那么我建議你先練好基本功:數據結構、算法是必備,然后憑興趣選擇數據庫、網絡編程等等進行深入鉆研。

            最后,選擇你看好的、感興趣的行業深耕個10年吧。做應用開發的人選擇了某個行業,后面是很難換行業的,選行很重要!

            1.3 操作系統領域

            UCOS太簡單,VxWorks太貴太專業,Windows不玩嵌入式了,IOS不開源,所以對于操作系統領域我們也只能玩Linux了。

            在嵌入式領域Linux一家獨大!

            Android呢?Android跟QT一樣,都是一套GUI系統。只是Google的實力太強了,現在Android無處不在,所以很多時候Linux+Android成了標配。注意,在這里我們關心的是Android的整個系統、里面的機制,而不是學習幾個API然后開發界面程序。操作系統領域所包含的內容,簡單地說,就是制作出一臺裝好系統的專用“電腦”,可以分為:

            ①為產品規劃硬件:

            按需求、性能、成本選擇主芯片,搭配周邊外設,交由硬件開發人員設計。

            ②給單板制作、安裝操作系統、編寫驅動

            ③定制維護、升級等系統方案

            ④還可能要配置、安裝Android等GUI系統:

            ⑤為應用開發人員配置開發環境

            ⑥從系統角度解決疑難問題


            這個領域,通常被稱為“底層系統”或是“驅動開發”。

            先解決2個常見誤區:

            ①這份工作是寫驅動程序嗎?

            看看上面羅列的6點,應該說,它包含驅動開發,但遠遠不只有驅動開發。

            ②我們還需要寫驅動嗎?不是有原廠嗎?或者只需要改改就可以?

            經常有人說,芯片原廠都做好驅動了,拿過來改改就可以了。如果,你的硬件跟原廠的公板完全一樣,原廠源碼毫無BUG,不想優化性能、削減成本,不想做一些有特色的產品,那這話是正確的。


            但是在這個不創新就是找死的年代,可能嗎?!原因有二:

            ①即使只是修改代碼,能修改的前提是能理解;能理解的最好煅煉方法是從零寫出若干驅動程序。

            ②很多時候,需要你深度定制系統。


            以前做聯發科手機只需要改改界面就可以出貨了,現在山寨廠一批批倒下。大家都使用原廠的方案而不加修改時,最后只能拼成本。

            舉個例子,深圳有2家做交通攝像頭、監控攝像頭的廠家,他們曾經找我做過4個項目:

            ①改進廠家給的SD卡驅動性能,使用DMA。

            ②換了Flash型號后,系統經常出問題,需要修改驅動BUG。

            ③觸摸屏點擊不準,找原因,后來發現是旁路電容導致的。

            ④裁減成本,把4片DDR換為2片DDR,需要改bootloader對DDR的初始化。

            這些項目都很急,搞不定就無法出貨,這時候找原廠?除非你是中興華為等大客戶,否則誰理你?


            我在中興公司上班時,寫驅動的時間其實是很少的,大部分時間是調試:系統調優,上幫APP工程師、下幫硬件工程師查找問題。我們從廠家、網上得到的源碼,很多都是標準的,當然可以直接用。但是在你的產品上也許優化一下更好。比如我們可以把攝像頭驅動和DMA驅動揉合起來,讓攝像頭的數據直接通過DMA發到DSP去。我們可以在軟件和硬件之間起橋梁作用,對于實體產品,有可能是軟件出問題也可能是硬件出問題,一般是底層系統工程師比較容易找出問題。


            當硬件、軟件應用出現問題,他們解決不了時,從底層軟件角度給他們出主意,給他們提供工具。再比如方案選擇:芯片性能能否達標、可用的BSP是否完善等等,這只能由負責整個方案的人來考慮,他必須懂底層。


            在操作系統領域,對知識的要求很多:

            ①懂硬件知識才能看懂電路圖

            ②英文好會看芯片手冊

            ③有編寫、移植驅動程序的能力

            ④對操作系統本身有一定的理解,才能解決各類疑難問題

            ⑤理解Android內部機制

            ⑥懂匯編、C語言、C++、JAVA


            它絕對是一個大坑,沒有興趣、沒有毅力的人慎選。

            ①這行的入門,絕對需要半年以上,即使全天學習也要半年。

            ②它的職位,絕對比APP的職位少

            ③并且你沒有1、2年經驗,招你到公司后一開始你做的還是APP。


            優點就是:

            ①學好后,行業通殺,想換行就換行;想自己做產品就自己做產品。

            ②相比做應用程序的人,不會被經常變動的需求搞得天天加班。

            ③門檻高,當然薪水相對就高。


            操作系統領域,我認為適合于這些人:

            ①硬件工程師想轉軟件工程師,從底層軟件入門會比較好

            ②單片機工程師,想升級一下。會Linux底層的人肯定會單片機,會單片機的人不一定會Linux。

            ③時間充足的學生:如果你正讀大二大三,那么花上半年學習嵌入式Linux底層多有益處。

            ④想掌握整個系統的人,比如你正在公司里寫APP,但是想升為系統工程師,那么底層不得不學。

            ⑤想自己創業做實體產品的工程師,你有錢的話什么技術都不用學,但是如果沒錢又想做產品,那么Linux底層不得不學。

            ⑥做Linux APP的人,沒錯,他們也要學習。

            這部分人不需要深入,了解個大概就可以:bootloader是用來啟動內核,Linux的文件系統(第1個程序是什么、做什么、各目錄干嘛用)、APP跟驅動程序的調用關系、工具鏈,有這些概念就可以了

            本文中,就把操作系統默認為Linux,講講怎么學習嵌入式Linux+Android系統。


            1.4 嵌入式Linux+Android系統包含哪些內容

            嵌入式Linux系統包含哪些東西?不要急,舉一個例子你就知道了。

            ①電腦一開機,那些界面是誰顯示的?

            是BIOS,它做什么?一些自檢,然后從硬盤上讀入windows,并啟動它。

            類似的,這個BIOS對應于嵌入式Linux里的bootloader。這個bootloader要去Flash上讀入Linux內核,并啟動它。


            ②啟動windows的目的是什么?

            當然運行應用程序以便上網、聊天什么的了。

            這些上網程序、聊天程序在哪?

            在C盤、D盤上。

            所以,windows要先識別出C盤、D盤。在Linux下我們稱之為根文件系統。

            ③windows能識別出C盤、D盤,那么肯定有讀寫硬盤的能力。


            這個能力我們稱之為驅動程序。當然不僅僅是操作硬盤,還有網卡、USB等等其他硬件。嵌入式Linux能從Flash上讀出并執行應用程序,肯定也得有Flash的驅動程序啊,當然也不僅僅是Flash。


            簡單地說,嵌入式LINUX系統里含有bootloader、內核、驅動程序、根文件系統、應用程序這5大塊。而應用程序,我們又可以分為:C/C++、Android。

            所以,嵌入式Linux+Android系統包含以下6部分內容:

            ①bootloader

            ②Linux內核

            ③驅動程序

            ④使用C/C++編寫的應用程序

            ⑤Android系統本身

            ⑥Android應用程序


            Android跟Linux的聯系實在太大了,它的應用是如此廣泛,學習了Linux之后沒有理由停下來不學習Android。在大多數智能設備中,運行的是Linux操作系統;它上面要么安裝有Android,要么可以跟Android手機互聯。現在,Linux+Android已成標配。


            2. 怎么學習嵌入式Linux操作系統

            本文假設您是零基礎,以實用為主,用最快的時間讓你入門;后面也會附上想深入學習時可以參考的資料。


            在實際工作中,我們從事的是“操作系統”周邊的開發,并不會太深入學習、修改操作系統本身。

            ①操作系統具有進程管理、存儲管理、文件管理和設備管理等功能,這些核心功能非常穩定可靠,基本上不需要我們修改代碼。我們只需要針對自己的硬件完善驅動程序

            ②學習驅動時必定會涉及其他知識,比如存儲管理、進程調度。當你深入理解了驅動程序后,也會加深對操作系統其他部分的理解

            ③Linux內核中大部分代碼都是設備驅動程序,可以認為Linux內核由各類驅動構成


            但是,要成為該領域的高手,一定要深入理解Linux操作系統本身,要去研讀它的源代碼。

            在忙完工作,閑暇之余,可以看看這些書:

            ①趙炯的《linux內核完全注釋》,這本比較薄,推薦這本。他后來又出了《Linux 內核完全剖析》,太厚了,搞不好看了后面就忘記前面了。

            ②毛德操、胡希明的《LINUX核心源代碼情景分析》,此書分上下冊,巨厚無比。當作字典看即可:想深入理解某方面的知識,就去看某章節。

            ③其他好書還有很多,我沒怎么看,沒有更多建議


            基于快速入門,上手工作的目的,您先不用看上面的書,先按本文學習。


            2.1 入門路線圖

            假設您是零基礎,我們規劃了如下入門路線圖。前面的知識,是后面知識的基礎,建議按順序學習。每一部分,不一定需要學得很深入透徹,下面分章節描述。

            2.2 學習驅動程序之前的基礎知識

            2.2.1 C語言

            只要是理工科專業的,似乎都會教C語言。我見過很多C語言考試90、100分的,一上機就傻了,我懷疑他們都沒在電腦上寫過程序。

            理論再好,沒有實踐不能干活的話,公司招你去干嘛?

            反過來,實踐出真知,學習C語言,必須練練練、寫寫寫!

            當你掌握基本語法后,就可以在電腦上練習一些C語言習題了;

            當你寫過幾個C程序后,就可以進入下一階段的裸機開發了。


            ①不需要太深入

            作為快速入門,只要你會編寫“Hello, world!”,會寫冒泡排序,會一些基礎的語法操作,暫時就夠了。

            指針操作是重點,多練習;

            不需要去學習過多的數據結構知識,只需要掌握鏈表操作,其他不用學習,比如:隊列、二叉樹等等都不用學;不需要去學習任何的函數使用,比如文件操作、多線程編程、網絡編程等等;這些知識,在編寫Linux應用程序時會用,但是在操作系統特別是驅動學習時,用不著!

            永往直前吧,以后碰到不懂的C語言問題,我們再回過頭來學習。

            在后續的“裸機開發”中,會讓你繼續練習C語言,那會更實戰化。

            C語言是在寫代碼中精進的。


            ②可以在Visual Studio下學習,也可以在Linux下學習,后者需要掌握一些編譯命令,我們暫時沒有提供C語言的教程,找一本C語言書,網上找找免費的C語言視頻(主要看怎么搭建環境),就可以自學了。


            2.2.2 PC Linux基本操作:

            對于PC Linux,我們推薦使用Ubuntu,在它上面安裝軟件非常簡便。

            我們的工作模式通常是這樣:在Windows下閱讀、編寫代碼,然后把代碼上傳到PC Linux去編譯。實際上,Ubuntu的桌面系統已經很好用了,我們拿到各種智能機可以很快上手,相信Ubuntu的桌面系統也可以讓你很快上手。為了提高工作效率,我們通常使用命令行來操作Ubuntu。


            不用擔心,你前期只需要掌握這幾條命令就可以了,它們是如此簡單,我干脆列出它們:

            ①cd : Change Directory(改變目錄)

            cd 目錄名 // 進入某個目錄cd .. // cd “兩個點”:返回上一級目錄cd - // cd “短橫”:返回上一次所在目錄

            ②pwd : Print Work Directory(打印當前目錄 顯示出當前工作目錄的絕對路徑)

            ③mkdir : Make Directory(創建目錄)

            mkdir abc // 創建文件夾abcmkdir -p a/b/c // 創建文件夾a,再a下創建文件夾b,再在b下創建文件夾c

            ④rm : Remove(刪除目錄或文件)

            rm file // 刪除名為file的文件rm -rf dir // 刪除名為dir的目錄

            ⑤ls : List(列出目錄內容)

            ⑥mount : 掛載

            mount -t nfs -o nolock,vers=2 192.168.1.123:/work/nfs_root /mntmount -t yaffs /dev/mtdblock3 /mnt

            ⑦chown : Change owner(改變文件的屬主,即擁有者)

            chown book:book /work -R //對/work目錄及其下所有內容,屬主改為book用戶,組改為book

            ⑧chmod : Change mode(改變權限),下面的例子很簡單粗暴

            chmod 777 /work -R // 對/work目錄及其下所有內容,權限改為可讀、可寫、可執行

            ⑨vi : Linux下最常用的編輯命令,使用稍微復雜,請自己搜索用法。


            要練習這些命令,你可以進入Ubuntu桌面系統后,打開終端輸入那些命令;或是用SecureCRT、putty等工具遠程登錄Ubuntu后練習。


            2.2.3 硬件知識

            我們學習硬件知識的目的在于能看懂原理圖,看懂通信協議,看懂芯片手冊;不求能設計原理圖,更不求能設計電路板。

            對于正統的方法,你應該這樣學習:

            ①學習《微機原理》,理解一個計算機的組成及各個部件的交互原理。

            ②學習《數字電路》,理解各種門電路的原理及使用,還可以掌握一些邏輯運算(與、或等)。

            ③《模擬電路》?好吧,這個不用學,至少我在工作中基本用不到它,現在全忘光了。


            就我個人經驗來說,這些課程是有用的,但是:

            ①原理有用,實戰性不強。

            比如《微機原理》是基于x86系統,跟ARM板子有很大差別,當然原理相通。

            我是在接觸嵌入式編程后,才理解了這些課程。

            ②每本書都那么厚,內容都很多,學習時間過長,自學有難度。


            針對這些校園教材的不足,并結合實際開發過程中要用到的知識點,我們推出了《學前班_怎么看原理圖》的系列視頻:

            學前班第1課第1節___怎么看原理圖之GPIO和門電路.wmv

            學前班第1課第2.1節_怎么看原理圖之協議類接口之UART.wmv

            學前班第1課第2.2節_怎么看原理圖之協議類接口之I2C.wmv

            學前班第1課第2.3節_怎么看原理圖之協議類接口之SPI.wmv

            學前班第1課第2.4節_怎么看原理圖之協議類接口之NAND Flash.wmv

            學前班第1課第2.5節_怎么看原理圖之協議類接口之LCD.wmv

            學前班第1課第3節___怎么看原理圖之內存類接口.wmv

            學前班第1課第4.1節_怎么看原理圖之分析S3C2410開發板.wmv

            學前班第1課第4.2節_怎么看原理圖之分析S3C2440開發板.wmv

            學前班第1課第4.3節_怎么看原理圖之分析S3C6410開發板.wmv


            即使你只具備初中物理課的電路知識,我也希望能通過這些視頻,讓你可以看懂原理圖,理解一些常見的通信協議;如果你想掌握更多的硬件知識,這些視頻也可以起個索引作用,讓你知道缺乏什么知識。


            這些視頻所講到的硬件知識,將在《裸板開發》系列視頻中用到,到時可以相互對照著看,加深理解。


            2.2.4 要不要專門學習Windows下的單片機開發

            很多學校都開通了單片機的課程,很多人都是從51單片機、AVR單片機,現在比較新的STM32單片機開始接觸嵌入式領域,并且使用Windows下的開發軟件,比如keil、MDK等。

            問題來了,要不要專門學習Windows下的單片機開發?

            ①如果這是你們專業的必修課,那就學吧

            ②如果你的專業跟單片機密切相關,比如機械控制等,那就學吧

            ③如果你只是想從單片機入門,然后學習更廣闊的嵌入式Linux,那么放棄在Windows下學習單片機吧!


            理由如下:

            ①Windows下的單片機學習,深度不夠

            Windows下有很好的圖形界面單片機開發軟件,比如keil、MDK等。

            它們封裝了很多技術細節,比如:

            你只會從main函數開始編寫代碼,卻不知道上電后第1條代碼是怎么執行的;

            你可以編寫中斷處理函數,但是卻不知道它是怎么被調用的;

            你不知道程序怎么從Flash上被讀入內存;

            也不知道內存是怎么劃分使用的,不知道棧在哪、堆在哪;

            當你想裁剪程序降低對Flash、內存的使用時,你無從下手;

            當你新建一個文件時,它被自動加入到工程里,但是其中的機理你完全不懂;

            等等等。


            ②基于ARM+Linux裸機學習,可以學得更深,并且更貼合后續的Linux學習。實際上它就是Linux下的單片機學習,只是一切更加原始:所有的代碼需要你自己來編寫;哪些文件加入工程,需要你自己來管理。

            在工作中,我們當然傾向于使用Windows下更便利的工具,但是在學習階段,我們更想學習到程序的本質。


            一切從零編寫代碼、管理代碼,可以讓我們學習到更多知識:

            你需要了解芯片的上電啟動過程,知道第1條代碼如何運行;

            你需要掌握怎么把程序從Flash上讀入內存;

            需要理解內存怎么規劃使用,比如棧在哪,堆在哪;

            需要理解代碼重定位;

            需要知道中斷發生后,軟硬件怎么保護現場、跳到中斷入口、調用中斷程序、恢復現場;

            你會知道,main函數不是我們編寫的第1個函數;

            你會知道,芯片從上電開始,程序是怎么被搬運執行的;

            你會知道,函數調用過程中,參數是如何傳遞的;

            你會知道,中斷發生時,每一個寄存器的值都要小心對待;

            等等等。


            你掌握了ARM+Linux的裸機開發,再回去看Windows下的單片機開發,會驚呼:怎么那么簡單!并且你會完全明白這些工具沒有向你展示的技術細節。


            驅動程序=Linux驅動程序軟件框架+ARM開發板硬件操作,我們可以從簡單的裸機開發入手,先掌握硬件操作,并且還可以:

            ①掌握如何在PC Linux下編譯程序、把程序燒錄到板子上并運行它

            ②為學習bootloader打基礎:掌握了各種硬件操作后,后面一組合就是一個bootloader


            2.2.5 為什么選擇ARM9 S3C2440開發板,而不是其他性能更好的?

            有一個錯誤的概念:S3C2440過時了、ARM9過時了。

            這是不對的,如果你是軟件工程師,無論是ARM9、ARM11、A8還是A9,對我們來說是沒有差別的。

            一款芯片,上面有CPU,還有眾多的片上設備(比如UART、USB、LCD控制器)。我們寫程序時,并不涉及CPU,只是去操作那些片上設備。

            所以:差別在于片上設備,不在于CPU核;差別在于寄存器操作不一樣。

            因為我們寫驅動并不涉及CPU的核心,只是操作CPU之外的設備,只是讀寫這些設備的寄存器。

            之所以推薦S3C2440,是因為它的Linux學習資料最豐富,并有配套的第1、2期視頻。


            2.2.6 怎么學習ARM+Linux的裸機開發

            學習裸機開發的目的有兩個:

            ①掌握裸機程序的結構,為后續的u-boot作準備

            ②練習硬件知識,即:怎么看原理圖、芯片手冊,怎么寫代碼來操作硬件


            后面的u-boot可以認為是裸機程序的集合,我們在裸機開發中逐個掌握各個部件,再集合起來就可以得到一個u-boot了。

            后續的驅動開發,也涉及硬件操作,你可以在裸機開發中學習硬件知識。


            注意:如果你并不關心裸機的程序結構,不關心bootloader的實現,這部分是可以先略過的。在后面的驅動視頻中,我們也會重新講解所涉及的硬件知識。


            推薦兩本書:杜春蕾的《ARM體系結構與編程》,韋東山的《嵌入式Linux應用開發完全手冊》。后者也許是國內第1本涉及在PC Linux環境下開發的ARM裸機程序的書,如果我說錯了,請原諒我書讀得少。


            對于裸機開發,我們提供有2部分視頻:

            ①環境搭建

            第0課第1節_剛接觸開發板之接口接線.wmv

            第0課第2節_剛接觸開發板之燒寫裸板程序.wmv

            第0課第3節_剛接觸開發板之重燒整個系統.wmv

            第0課第4節_剛接觸開發板之使用vmwae和預先做好的ubuntu.wmv

            第0課第5節_剛接觸開發板之u-boot打補丁編譯使用及建sourceinsight工程.wmv

            第0課第6節_剛接觸開發板之內核u-boot打補丁編譯使用及建sourceinsight工程.wmv

            第0課第7節_剛接觸開發板之制作根文件系統及初試驅動.wmv

            第0課第8節_在TQ2440,MINI2440上搭建視頻所用系統.wmv

            第0課第9節_win7下不能使用dnw燒寫的替代方法.wmv


            .................未完

            原文鏈接:網頁鏈接


            如何學習嵌入式開發

            嵌入式開發的學習其實并沒有那么難,只要了解學習的體系,掌握正確的學習方法,學習起來并不難。來講一下嵌入式開發都要學些啥!

            嵌入式開發的主要學習內容:

            C,Java核心編程:c語言核心編程,Java核心編程;

            Linux核心操作與算法:Linux系統使用,Linux-c編程核心技術,精品數據結構,Linux-c編程精髓;

            核心操作與算法:Linux系統編程,Linux網絡編程核心技術,UI編程,Java核心編程,安卓核心技術;

            ARM+Linux底層開發:數字電路,ARM編程核心,Linux系統開發,嵌入式Linux驅動開發;

            大型項目實踐:每期安排各類型真實的項目

            互聯網行業目前還是最熱門的行業,學習IT技能之后足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。

            想要系統學習,你可以考察對比一下開設有IT專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,建議實地考察對比一下。

            祝你學有所成,望采納。

            請點擊輸入圖片描述


            自學嵌入式的流程是什么?

            原文鏈接:網頁鏈接

            嵌入式Linux學習路線圖

            我是1999年上的大學,物理專業。在大一時,我們班里普遍彌漫著對未來的不安,不知道學習了物理后出去能做什么。你當下的經歷、當下的學習,在未來的一天肯定會影響到你。畢業后我們也各自找到了自己的職業:出國深造轉行做金融、留校任教做科研、設計芯片、寫程序、創辦公司等等,這一切都離不開在校時學到的基礎技能(數學、IT、電子電路)、受過煅煉的自學能力。

            所以,各位正在迷茫的在校生,各位正在嘗試轉行的程序員,未來一定有你的位置,是好是壞取決于你當下的努力與積累。

            我不能預言幾年后什么行業會熱門,也不能保證你照著本文學習可以發財。我只是一個有十幾年經驗的程序員,給對編程有興趣的你,提供一些建議。

            1.程序員的三大方向

            程序員的方向,一般可以分為3類:專業領域、業務領域、操作系統領域。你了解它們后,按興趣選擇吧。

            對于專業領域,我提供不了建議。

            業務,也就是應用程序,它跟操作系統并不是截然分開的:

            ①開發實體產品時,應用程序寫得好的人,有時候需要操作系統的知識,比如調度優先級的設置、知道某些函數可能會令進程休眠。

            ②寫應用程序的人進階為系統工程師時,他需要從上到下都了解,這時候就需要有操作系統領域的知識了,否則,你怎么設計整個系統的方案呢?

            ③做應用程序的人,需要了解行業的需求,理解業務的邏輯。所以,當領導的人,多是做應用的。一旦鉆入了某個行業,很難換行業。

            ④而操作系統領域,做好了這是通殺各行業:他只負責底層系統,在上面開發什么業務跟他沒關系。這行很多是技術宅,行業專家。

            ⑤操作系統和業務之間并沒有一個界線。有操作系統經驗,再去做應用,你會對系統知根知底,碰到問題時都有解決思路。有了業務經驗,你再了解一下操作系統,很快就可以組成一個團隊自立門戶,至少做個CTO沒問題。

            1.1 專業領域

            它又可以分為下面2類。

            1.1.1 學術研究

            比如語音、圖像處理、人工智能,這類工作需要你有比較強的理論知識,我傾向于認為這類人是“科學家”,他們鉆研多年,很多時候是在做學術研究。

            在嵌入式領域,需要把他們的成果用某種算法表達出來,針對某種芯片進行優化,這部分工作也許有專人來做。

            1.1.2 工程實現

            也有這樣一類人,他們懂得這些專業領域的概念,但是沒有深入鉆研。可以使用各類開源資料實現某個目標,做出產品。比如圖像處理,他懂得用opencv里幾百個復雜函數來實現頭像識別。有時候還可以根據具體芯片來優化這些函數。

            “專業領域”不是我的菜,如果你要做這一塊,我想最好的入門方法是在學校學習研究生、博士課程。

            1.2 業務領域

            換句話說,就是應用程序,這又可以分為下面2類。

            1.2.1 界面顯示

            做產品當然需要好的界面,但是,不是說它不重要,是沒什么發展后勁。

            現在的熱門詞是Android APP和IOS APP開發。你不要被Android、IOS兩個詞騙了,它們跟以前的VC、VB是同一路貨色,只是、僅僅是一套GUI控件的實現。

            希望沒有冒犯到你,我有理由。

            一個程序需要有GUI界面,但是程序的內在邏輯才是核心。Android、IOS的開發工具給我們簡化了GUI的開發,并提供了這些控件的交互機制,封裝并提供了一些服務(比如網絡傳輸)。但是程序內部的業務邏輯、對視頻圖像聲音的處理等等,這才是核心。另外別忘了服務器那邊的后臺程序:怎樣更安全地保存數據、保護客戶的隱私,怎樣處理成千上萬上百萬的并發訪問,等等,這也是核心。

            但是,從Android、IOS APP入門入行,這很快!如果你是大四,急于找到一份工作,那么花上1、2個月去學習Android或IOS,應該容易找到工作,畢竟APP的需求永遠是最大的,現在這兩門技術還算熱門。在2011、2012年左右,Android程序員的起薪挺高,然后開始下滑。Android APP的入門基本只要1個月,所以懂的人也越來越多。2013、2014年,IOS開發的工資明顯比Android高了,于是各類IOS培訓也火曝起來。中華大地向來不缺速成人才,估計再過一陣子IOS工程師也是白菜價了。

            會Android、IOS只是基本要求,不信去51job搜搜Android或IOS,職位要求里肯定其他要求。

            1.2.2 業務邏輯

            舉個簡單例子,做一個打卡軟件,你需要考慮這些東西:

            ①正常流程是上班下班時都要打卡

            ②有人忘記了怎么辦?作為異常記錄在案,推送給管理員

            ③請假時怎么處理?

            ④加班怎么處理?

            對于更復雜的例子,視頻會議系統里,各個模塊怎么對接,各類協議怎么兼容,你不深入這個行業,你根本搞不清楚。

            應用開發的職位永遠是最多的,入門門檻也低。基本上只要你會C語言,面試時表現比較得體,一般公司都會給你機會。因為:

            ①你進公司后,還需要重新培訓你:熟悉它們的業務邏輯。

            ②你要做的,基本也就是一個個模塊,框架都有人給你定好了,你去填代碼就可以了。

            說點讓你高興的事:軟件公司里,做領導的基本都是寫應用程序的(當然還有做市場的)。寫應用程序的人,對外可以研究市場接待客戶,對內可以管理程序員完成開發,不讓他做領導讓誰做?

            如果你的志向是寫應用程序,那么我建議你先練好基本功:數據結構、算法是必備,然后憑興趣選擇數據庫、網絡編程等等進行深入鉆研。

            最后,選擇你看好的、感興趣的行業深耕個10年吧。做應用開發的人選擇了某個行業,后面是很難換行業的,選行很重要!

            1.3 操作系統領域

            UCOS太簡單,VxWorks太貴太專業,Windows不玩嵌入式了,IOS不開源,所以對于操作系統領域我們也只能玩Linux了。

            在嵌入式領域Linux一家獨大!

            Android呢?Android跟QT一樣,都是一套GUI系統。只是Google的實力太強了,現在Android無處不在,所以很多時候Linux+Android成了標配。注意,在這里我們關心的是Android的整個系統、里面的機制,而不是學習幾個API然后開發界面程序。操作系統領域所包含的內容,簡單地說,就是制作出一臺裝好系統的專用“電腦”,可以分為:

            ①為產品規劃硬件:

            按需求、性能、成本選擇主芯片,搭配周邊外設,交由硬件開發人員設計。

            ②給單板制作、安裝操作系統、編寫驅動

            ③定制維護、升級等系統方案

            ④還可能要配置、安裝Android等GUI系統:

            ⑤為應用開發人員配置開發環境

            ⑥從系統角度解決疑難問題


            這個領域,通常被稱為“底層系統”或是“驅動開發”。

            先解決2個常見誤區:

            ①這份工作是寫驅動程序嗎?

            看看上面羅列的6點,應該說,它包含驅動開發,但遠遠不只有驅動開發。

            ②我們還需要寫驅動嗎?不是有原廠嗎?或者只需要改改就可以?

            經常有人說,芯片原廠都做好驅動了,拿過來改改就可以了。如果,你的硬件跟原廠的公板完全一樣,原廠源碼毫無BUG,不想優化性能、削減成本,不想做一些有特色的產品,那這話是正確的。


            但是在這個不創新就是找死的年代,可能嗎?!原因有二:

            ①即使只是修改代碼,能修改的前提是能理解;能理解的最好煅煉方法是從零寫出若干驅動程序。

            ②很多時候,需要你深度定制系統。


            以前做聯發科手機只需要改改界面就可以出貨了,現在山寨廠一批批倒下。大家都使用原廠的方案而不加修改時,最后只能拼成本。

            舉個例子,深圳有2家做交通攝像頭、監控攝像頭的廠家,他們曾經找我做過4個項目:

            ①改進廠家給的SD卡驅動性能,使用DMA。

            ②換了Flash型號后,系統經常出問題,需要修改驅動BUG。

            ③觸摸屏點擊不準,找原因,后來發現是旁路電容導致的。

            ④裁減成本,把4片DDR換為2片DDR,需要改bootloader對DDR的初始化。

            這些項目都很急,搞不定就無法出貨,這時候找原廠?除非你是中興華為等大客戶,否則誰理你?


            我在中興公司上班時,寫驅動的時間其實是很少的,大部分時間是調試:系統調優,上幫APP工程師、下幫硬件工程師查找問題。我們從廠家、網上得到的源碼,很多都是標準的,當然可以直接用。但是在你的產品上也許優化一下更好。比如我們可以把攝像頭驅動和DMA驅動揉合起來,讓攝像頭的數據直接通過DMA發到DSP去。我們可以在軟件和硬件之間起橋梁作用,對于實體產品,有可能是軟件出問題也可能是硬件出問題,一般是底層系統工程師比較容易找出問題。


            當硬件、軟件應用出現問題,他們解決不了時,從底層軟件角度給他們出主意,給他們提供工具。再比如方案選擇:芯片性能能否達標、可用的BSP是否完善等等,這只能由負責整個方案的人來考慮,他必須懂底層。


            在操作系統領域,對知識的要求很多:

            ①懂硬件知識才能看懂電路圖

            ②英文好會看芯片手冊

            ③有編寫、移植驅動程序的能力

            ④對操作系統本身有一定的理解,才能解決各類疑難問題

            ⑤理解Android內部機制

            ⑥懂匯編、C語言、C++、JAVA


            它絕對是一個大坑,沒有興趣、沒有毅力的人慎選。

            ①這行的入門,絕對需要半年以上,即使全天學習也要半年。

            ②它的職位,絕對比APP的職位少

            ③并且你沒有1、2年經驗,招你到公司后一開始你做的還是APP。


            優點就是:

            ①學好后,行業通殺,想換行就換行;想自己做產品就自己做產品。

            ②相比做應用程序的人,不會被經常變動的需求搞得天天加班。

            ③門檻高,當然薪水相對就高。


            操作系統領域,我認為適合于這些人:

            ①硬件工程師想轉軟件工程師,從底層軟件入門會比較好

            ②單片機工程師,想升級一下。會Linux底層的人肯定會單片機,會單片機的人不一定會Linux。

            ③時間充足的學生:如果你正讀大二大三,那么花上半年學習嵌入式Linux底層多有益處。

            ④想掌握整個系統的人,比如你正在公司里寫APP,但是想升為系統工程師,那么底層不得不學。

            ⑤想自己創業做實體產品的工程師,你有錢的話什么技術都不用學,但是如果沒錢又想做產品,那么Linux底層不得不學。

            ⑥做Linux APP的人,沒錯,他們也要學習。

            這部分人不需要深入,了解個大概就可以:bootloader是用來啟動內核,Linux的文件系統(第1個程序是什么、做什么、各目錄干嘛用)、APP跟驅動程序的調用關系、工具鏈,有這些概念就可以了

            本文中,就把操作系統默認為Linux,講講怎么學習嵌入式Linux+Android系統。


            1.4 嵌入式Linux+Android系統包含哪些內容

            嵌入式Linux系統包含哪些東西?不要急,舉一個例子你就知道了。

            ①電腦一開機,那些界面是誰顯示的?

            是BIOS,它做什么?一些自檢,然后從硬盤上讀入windows,并啟動它。

            類似的,這個BIOS對應于嵌入式Linux里的bootloader。這個bootloader要去Flash上讀入Linux內核,并啟動它。


            ②啟動windows的目的是什么?

            當然運行應用程序以便上網、聊天什么的了。

            這些上網程序、聊天程序在哪?

            在C盤、D盤上。

            所以,windows要先識別出C盤、D盤。在Linux下我們稱之為根文件系統。

            ③windows能識別出C盤、D盤,那么肯定有讀寫硬盤的能力。


            這個能力我們稱之為驅動程序。當然不僅僅是操作硬盤,還有網卡、USB等等其他硬件。嵌入式Linux能從Flash上讀出并執行應用程序,肯定也得有Flash的驅動程序啊,當然也不僅僅是Flash。


            簡單地說,嵌入式LINUX系統里含有bootloader、內核、驅動程序、根文件系統、應用程序這5大塊。而應用程序,我們又可以分為:C/C++、Android。

            所以,嵌入式Linux+Android系統包含以下6部分內容:

            ①bootloader

            ②Linux內核

            ③驅動程序

            ④使用C/C++編寫的應用程序

            ⑤Android系統本身

            ⑥Android應用程序


            Android跟Linux的聯系實在太大了,它的應用是如此廣泛,學習了Linux之后沒有理由停下來不學習Android。在大多數智能設備中,運行的是Linux操作系統;它上面要么安裝有Android,要么可以跟Android手機互聯。現在,Linux+Android已成標配。


            2. 怎么學習嵌入式Linux操作系統

            本文假設您是零基礎,以實用為主,用最快的時間讓你入門;后面也會附上想深入學習時可以參考的資料。


            在實際工作中,我們從事的是“操作系統”周邊的開發,并不會太深入學習、修改操作系統本身。

            ①操作系統具有進程管理、存儲管理、文件管理和設備管理等功能,這些核心功能非常穩定可靠,基本上不需要我們修改代碼。我們只需要針對自己的硬件完善驅動程序

            ②學習驅動時必定會涉及其他知識,比如存儲管理、進程調度。當你深入理解了驅動程序后,也會加深對操作系統其他部分的理解

            ③Linux內核中大部分代碼都是設備驅動程序,可以認為Linux內核由各類驅動構成


            但是,要成為該領域的高手,一定要深入理解Linux操作系統本身,要去研讀它的源代碼。

            在忙完工作,閑暇之余,可以看看這些書:

            ①趙炯的《linux內核完全注釋》,這本比較薄,推薦這本。他后來又出了《Linux 內核完全剖析》,太厚了,搞不好看了后面就忘記前面了。

            ②毛德操、胡希明的《LINUX核心源代碼情景分析》,此書分上下冊,巨厚無比。當作字典看即可:想深入理解某方面的知識,就去看某章節。

            ③其他好書還有很多,我沒怎么看,沒有更多建議


            基于快速入門,上手工作的目的,您先不用看上面的書,先按本文學習。


            2.1 入門路線圖

            假設您是零基礎,我們規劃了如下入門路線圖。前面的知識,是后面知識的基礎,建議按順序學習。每一部分,不一定需要學得很深入透徹,下面分章節描述。

            2.2 學習驅動程序之前的基礎知識

            2.2.1 C語言

            只要是理工科專業的,似乎都會教C語言。我見過很多C語言考試90、100分的,一上機就傻了,我懷疑他們都沒在電腦上寫過程序。

            理論再好,沒有實踐不能干活的話,公司招你去干嘛?

            反過來,實踐出真知,學習C語言,必須練練練、寫寫寫!

            當你掌握基本語法后,就可以在電腦上練習一些C語言習題了;

            當你寫過幾個C程序后,就可以進入下一階段的裸機開發了。


            ①不需要太深入

            作為快速入門,只要你會編寫“Hello, world!”,會寫冒泡排序,會一些基礎的語法操作,暫時就夠了。

            指針操作是重點,多練習;

            不需要去學習過多的數據結構知識,只需要掌握鏈表操作,其他不用學習,比如:隊列、二叉樹等等都不用學;不需要去學習任何的函數使用,比如文件操作、多線程編程、網絡編程等等;這些知識,在編寫Linux應用程序時會用,但是在操作系統特別是驅動學習時,用不著!

            永往直前吧,以后碰到不懂的C語言問題,我們再回過頭來學習。

            在后續的“裸機開發”中,會讓你繼續練習C語言,那會更實戰化。

            C語言是在寫代碼中精進的。


            ②可以在Visual Studio下學習,也可以在Linux下學習,后者需要掌握一些編譯命令,我們暫時沒有提供C語言的教程,找一本C語言書,網上找找免費的C語言視頻(主要看怎么搭建環境),就可以自學了。


            2.2.2 PC Linux基本操作:

            對于PC Linux,我們推薦使用Ubuntu,在它上面安裝軟件非常簡便。

            我們的工作模式通常是這樣:在Windows下閱讀、編寫代碼,然后把代碼上傳到PC Linux去編譯。實際上,Ubuntu的桌面系統已經很好用了,我們拿到各種智能機可以很快上手,相信Ubuntu的桌面系統也可以讓你很快上手。為了提高工作效率,我們通常使用命令行來操作Ubuntu。


            不用擔心,你前期只需要掌握這幾條命令就可以了,它們是如此簡單,我干脆列出它們:

            ①cd : Change Directory(改變目錄)

            cd 目錄名 // 進入某個目錄cd .. // cd “兩個點”:返回上一級目錄cd - // cd “短橫”:返回上一次所在目錄

            ②pwd : Print Work Directory(打印當前目錄 顯示出當前工作目錄的絕對路徑)

            ③mkdir : Make Directory(創建目錄)

            mkdir abc // 創建文件夾abcmkdir -p a/b/c // 創建文件夾a,再a下創建文件夾b,再在b下創建文件夾c

            ④rm : Remove(刪除目錄或文件)

            rm file // 刪除名為file的文件rm -rf dir // 刪除名為dir的目錄

            ⑤ls : List(列出目錄內容)

            ⑥mount : 掛載

            mount -t nfs -o nolock,vers=2 192.168.1.123:/work/nfs_root /mntmount -t yaffs /dev/mtdblock3 /mnt

            ⑦chown : Change owner(改變文件的屬主,即擁有者)

            chown book:book /work -R //對/work目錄及其下所有內容,屬主改為book用戶,組改為book

            ⑧chmod : Change mode(改變權限),下面的例子很簡單粗暴

            chmod 777 /work -R // 對/work目錄及其下所有內容,權限改為可讀、可寫、可執行

            ⑨vi : Linux下最常用的編輯命令,使用稍微復雜,請自己搜索用法。


            要練習這些命令,你可以進入Ubuntu桌面系統后,打開終端輸入那些命令;或是用SecureCRT、putty等工具遠程登錄Ubuntu后練習。


            2.2.3 硬件知識

            我們學習硬件知識的目的在于能看懂原理圖,看懂通信協議,看懂芯片手冊;不求能設計原理圖,更不求能設計電路板。

            對于正統的方法,你應該這樣學習:

            ①學習《微機原理》,理解一個計算機的組成及各個部件的交互原理。

            ②學習《數字電路》,理解各種門電路的原理及使用,還可以掌握一些邏輯運算(與、或等)。

            ③《模擬電路》?好吧,這個不用學,至少我在工作中基本用不到它,現在全忘光了。


            就我個人經驗來說,這些課程是有用的,但是:

            ①原理有用,實戰性不強。

            比如《微機原理》是基于x86系統,跟ARM板子有很大差別,當然原理相通。

            我是在接觸嵌入式編程后,才理解了這些課程。

            ②每本書都那么厚,內容都很多,學習時間過長,自學有難度。


            針對這些校園教材的不足,并結合實際開發過程中要用到的知識點,我們推出了《學前班_怎么看原理圖》的系列視頻:

            學前班第1課第1節___怎么看原理圖之GPIO和門電路.wmv

            學前班第1課第2.1節_怎么看原理圖之協議類接口之UART.wmv

            學前班第1課第2.2節_怎么看原理圖之協議類接口之I2C.wmv

            學前班第1課第2.3節_怎么看原理圖之協議類接口之SPI.wmv

            學前班第1課第2.4節_怎么看原理圖之協議類接口之NAND Flash.wmv

            學前班第1課第2.5節_怎么看原理圖之協議類接口之LCD.wmv

            學前班第1課第3節___怎么看原理圖之內存類接口.wmv

            學前班第1課第4.1節_怎么看原理圖之分析S3C2410開發板.wmv

            學前班第1課第4.2節_怎么看原理圖之分析S3C2440開發板.wmv

            學前班第1課第4.3節_怎么看原理圖之分析S3C6410開發板.wmv


            即使你只具備初中物理課的電路知識,我也希望能通過這些視頻,讓你可以看懂原理圖,理解一些常見的通信協議;如果你想掌握更多的硬件知識,這些視頻也可以起個索引作用,讓你知道缺乏什么知識。


            這些視頻所講到的硬件知識,將在《裸板開發》系列視頻中用到,到時可以相互對照著看,加深理解。


            2.2.4 要不要專門學習Windows下的單片機開發

            很多學校都開通了單片機的課程,很多人都是從51單片機、AVR單片機,現在比較新的STM32單片機開始接觸嵌入式領域,并且使用Windows下的開發軟件,比如keil、MDK等。

            問題來了,要不要專門學習Windows下的單片機開發?

            ①如果這是你們專業的必修課,那就學吧

            ②如果你的專業跟單片機密切相關,比如機械控制等,那就學吧

            ③如果你只是想從單片機入門,然后學習更廣闊的嵌入式Linux,那么放棄在Windows下學習單片機吧!


            理由如下:

            ①Windows下的單片機學習,深度不夠

            Windows下有很好的圖形界面單片機開發軟件,比如keil、MDK等。

            它們封裝了很多技術細節,比如:

            你只會從main函數開始編寫代碼,卻不知道上電后第1條代碼是怎么執行的;

            你可以編寫中斷處理函數,但是卻不知道它是怎么被調用的;

            你不知道程序怎么從Flash上被讀入內存;

            也不知道內存是怎么劃分使用的,不知道棧在哪、堆在哪;

            當你想裁剪程序降低對Flash、內存的使用時,你無從下手;

            當你新建一個文件時,它被自動加入到工程里,但是其中的機理你完全不懂;

            等等等。


            ②基于ARM+Linux裸機學習,可以學得更深,并且更貼合后續的Linux學習。實際上它就是Linux下的單片機學習,只是一切更加原始:所有的代碼需要你自己來編寫;哪些文件加入工程,需要你自己來管理。

            在工作中,我們當然傾向于使用Windows下更便利的工具,但是在學習階段,我們更想學習到程序的本質。


            一切從零編寫代碼、管理代碼,可以讓我們學習到更多知識:

            你需要了解芯片的上電啟動過程,知道第1條代碼如何運行;

            你需要掌握怎么把程序從Flash上讀入內存;

            需要理解內存怎么規劃使用,比如棧在哪,堆在哪;

            需要理解代碼重定位;

            需要知道中斷發生后,軟硬件怎么保護現場、跳到中斷入口、調用中斷程序、恢復現場;

            你會知道,main函數不是我們編寫的第1個函數;

            你會知道,芯片從上電開始,程序是怎么被搬運執行的;

            你會知道,函數調用過程中,參數是如何傳遞的;

            你會知道,中斷發生時,每一個寄存器的值都要小心對待;

            等等等。


            你掌握了ARM+Linux的裸機開發,再回去看Windows下的單片機開發,會驚呼:怎么那么簡單!并且你會完全明白這些工具沒有向你展示的技術細節。


            驅動程序=Linux驅動程序軟件框架+ARM開發板硬件操作,我們可以從簡單的裸機開發入手,先掌握硬件操作,并且還可以:

            ①掌握如何在PC Linux下編譯程序、把程序燒錄到板子上并運行它

            ②為學習bootloader打基礎:掌握了各種硬件操作后,后面一組合就是一個bootloader


            2.2.5 為什么選擇ARM9 S3C2440開發板,而不是其他性能更好的?

            有一個錯誤的概念:S3C2440過時了、ARM9過時了。

            這是不對的,如果你是軟件工程師,無論是ARM9、ARM11、A8還是A9,對我們來說是沒有差別的。

            一款芯片,上面有CPU,還有眾多的片上設備(比如UART、USB、LCD控制器)。我們寫程序時,并不涉及CPU,只是去操作那些片上設備。

            所以:差別在于片上設備,不在于CPU核;差別在于寄存器操作不一樣。

            因為我們寫驅動并不涉及CPU的核心,只是操作CPU之外的設備,只是讀寫這些設備的寄存器。

            之所以推薦S3C2440,是因為它的Linux學習資料最豐富,并有配套的第1、2期視頻。


            2.2.6 怎么學習ARM+Linux的裸機開發

            學習裸機開發的目的有兩個:

            ①掌握裸機程序的結構,為后續的u-boot作準備

            ②練習硬件知識,即:怎么看原理圖、芯片手冊,怎么寫代碼來操作硬件


            后面的u-boot可以認為是裸機程序的集合,我們在裸機開發中逐個掌握各個部件,再集合起來就可以得到一個u-boot了。

            后續的驅動開發,也涉及硬件操作,你可以在裸機開發中學習硬件知識。


            注意:如果你并不關心裸機的程序結構,不關心bootloader的實現,這部分是可以先略過的。在后面的驅動視頻中,我們也會重新講解所涉及的硬件知識。


            推薦兩本書:杜春蕾的《ARM體系結構與編程》,韋東山的《嵌入式Linux應用開發完全手冊》。后者也許是國內第1本涉及在PC Linux環境下開發的ARM裸機程序的書,如果我說錯了,請原諒我書讀得少。


            對于裸機開發,我們提供有2部分視頻:

            ①環境搭建

            第0課第1節_剛接觸開發板之接口接線.wmv

            第0課第2節_剛接觸開發板之燒寫裸板程序.wmv

            第0課第3節_剛接觸開發板之重燒整個系統.wmv

            第0課第4節_剛接觸開發板之使用vmwae和預先做好的ubuntu.wmv

            第0課第5節_剛接觸開發板之u-boot打補丁編譯使用及建sourceinsight工程.wmv

            第0課第6節_剛接觸開發板之內核u-boot打補丁編譯使用及建sourceinsight工程.wmv

            第0課第7節_剛接觸開發板之制作根文件系統及初試驅動.wmv

            第0課第8節_在TQ2440,MINI2440上搭建視頻所用系統.wmv

            第0課第9節_win7下不能使用dnw燒寫的替代方法.wmv


            .................未完

            原文鏈接:網頁鏈接


            嵌入式開發如何入門

            嵌入式開發主要有兩種,像STM32、飛思卡爾等系列5261單片機屬于無操作系統的,直接對寄存器或者利用庫函數操作的,這種學習來難度相對小一些,就業前景也不錯。

            還有一些像ARM9,或者CortexA8、A9系列的可以運行Linux或者安卓操作系統的嵌入式軟件系統開發,由于需要學習的內容較多,學習時間較長,那么學習起來就有一定的難度,工資也相對高一些。

            課程內容主要包括:

            ①C,Java核心編程:c語言核心編程,Java核心編程;

            ②Linux核心操作與算法:Linux系統使用,Linux-c編程核心技術,精品數據結構,Linux-c編程精髓;

            ③核心操作與算法:Linux系統編程,Linux網絡編程核心技術,UI編程,Java核心編程,安卓核心技術;

            ④ARM+Linux底層開發:數字電路,ARM編程核心,Linux系統開發,嵌入式Linux驅動開發;

            ⑤大型項目實踐:每期安排各類型真實的項目,詳細可以找我要資料。

            互聯網行業目前還是最熱門的行業之一,學習IT技能之后足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。

            想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟件學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。

            祝你學有所成,望采納。


            本文發布于:2023-02-28 18:57:00,感謝您對本站的認可!

            本文鏈接:http://m.newhan.cn/zhishi/a/167759128149798.html

            版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。

            本文word下載地址:嵌入式學習路線.doc

            本文 PDF 下載地址:嵌入式學習路線.pdf

            標簽:嵌入式   路線
            相關文章
            留言與評論(共有 0 條評論)
               
            驗證碼:
            推薦文章
            排行榜
            Copyright ?2019-2022 Comsenz Inc.Powered by ? 實用文體寫作網旗下知識大全大全欄目是一個全百科類寶庫! 優秀范文|法律文書|專利查詢|
            主站蜘蛛池模板: 国产在线拍揄自揄视频网试看| 欧美乱妇xxxxxbbbbb| 久久国产精99精产国高潮| 国产爆乳乱码女大生Av| 成人精品视频一区二区三区| 欧美精品一产区二产区| 91国在线啪精品一区| 蜜臀98精品国产免费观看 | 18禁美女裸体爆乳无遮挡| A级毛片100部免费看| 国产欧美日韩精品丝袜高跟鞋| а√天堂中文在线资源bt在线| 精品夜夜澡人妻无码av| 日韩精品成人无码专区免费| 成全免费高清观看在线剧情| 国产乱人伦av在线无码| 亚洲综合一区二区三区视频| 色老头亚洲成人免费影院| 色99久久久久高潮综合影院| 国产精品激情av在线播放| 亚洲av无在线播放中文| 中文字幕国产精品日韩| 欧美牲交A欧美在线| 最新亚洲精品国偷自产在线| 国产亚洲精品在av| 亚洲av天码一区二区| 狠狠狠色丁香综合婷婷久久| 久久夜夜免费视频| 日韩精品国产一区二区| 国产福利深夜在线播放| 色老99久久精品偷偷鲁| 日韩精品在线观看一二区| 国产在线午夜不卡精品影院| 在线中文字幕亚洲日韩2020| 亚洲成人av综合一区| 9lporm自拍视频区| 国产精品自产拍在线播放| 亚洲高清最新AV网站| 成人亚欧欧美激情在线观看| 亚洲毛片无码专区亚洲乱| 五月综合网亚洲乱妇久久|