構建嵌入式android系統
1. 嵌入式app 和開發式app的區別是什麼
嵌入式app 和開發式app的區別是什麼
【千夏軟體】認為手機android app開發那個不叫嵌入式,android app只需要用java在上層進行應用開發就好
嵌入式涉及的知識太龐大,硬體部分需要對邏輯電路非常熟悉,需要做很多周邊的電路設計,軟體部分需要學習系統程式設計和底層驅動開發的知識,我們在arm開發的時候做的非常非常底層 verilog設計電路,針對硬體寫驅動。
以android手機系統為例,嵌入式應用開發是底層開發的系統及電腦晶片里的控製程式,而android應用軟體開發的是我們看得到的手機系統視窗里顯示、使用的這些手機軟體。兩種開發使用語言不同、收入也區別很大,底層開發雖然不簡單,但可以做的人很多,android應用程式開發因為目前安卓太火爆,而且這類軟體盈利點多,人才需求大。如果你是選學習方向的,肯定是選擇android更有前途,至少10年內是沒問題的,智慧手機、平板、電視、汽車、家電、樓宇等等都需要android應用軟體。
數碼嵌入式技術與嵌入式軟體開發的區別是什麼?
數碼嵌入式技術主要面向於DSP研發,嵌入式軟體開發是個廣義的方面,它主要是從事嵌入式研發軟體程式設計方面的,因為嵌入式研發即包括硬體電路設計研發,也包括軟體程式開發,同時還有作業系統研發。
什麼叫做嵌入式開發,嵌入式開發和普通開發的區別?
嵌入式開發就是指在嵌入式作業系統下進行開發,一般常用的系統有WinCE,Palm,現在又多了Symbian等,其實只要會C++,在哪裡都差不多,都有相應的SDK開發包。用微控制器匯編開發也算是嵌入式,用高階一點的處理器,arm7,arm9,powerpc什麼的開發起來,不過要加作業系統而已,也屬於嵌入式的開發
嵌入式框架和框架的區別是什麼?
嵌入式框架與框架網頁類似,不同之處在於嵌入式框架及其內容嵌入在現有網頁中。任何可以放入普通網頁的內容都可以放到嵌入式框架中。可以像處理普通框架一樣自定義嵌入式框架,還可以在此框架中啟用滾動條。使用嵌入式框架而不是框架的好處之一是:製作嵌入內容時不需要單獨建立框架網頁。 嵌入式框架的用處很多: 可以插入合同讓網站訪問者填寫。 可以給出其他網頁外觀的示例。 可以用作表單容器。 可以用作顯示產品和價格的滾動框
嵌入式和微控制器的區別是什麼
嵌入式,一般都是帶系統的。把一個作業系統移植進微控制器裡面,例如linux之類的系統。移植進微控制器後,程式設計的時候會有很多不一樣的地方。
微控制器的話,就是一塊整合塊。不帶系統的程式設計。
什麼是嵌入式開發?嵌入式開發是什麼?
本文為新手小白解釋什麼是嵌入式開發,希望對你們有所幫助。
首先來看一下什麼是嵌入式:嵌入式技術是以應用為中心,以計算機技術為基礎,並且軟硬體可裁剪,適用於應用系統對功能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統技術。它最初起源於微控制器技術, 是各類數字化的電子、機電產品的核心,主要用於實現對硬體裝置的控制、監視或管理等功能。進入21世紀計算機應用的各行各業中90%左右的開發將涉及到嵌入式開發。全球嵌入式軟體市場年增長率超過12.5%,嵌入式系統帶來的工業年產值達一萬億美無,中國未來三年嵌入式軟體產業將保持40%以上的年復合增長率。
另外,做軟體實際上有高下之分,開發語言從機器語言、匯編到C、C++,再到紅透半邊天的Java、C#等,該學哪種呢?為什麼有些開發者工資低,而有些開發者千金難求?為什麼3年的Java高階程式設計師薪水僅僅8k-10k,而一個Linux底層C語言程式設計師兩年經驗就敢要10k的薪水?
原因歸根結底是門檻。比如月薪15k的Linux嵌入式開發職位,門檻就有 Linux系統、Shell程式設計、Linux開發環境、C語言、ARM硬體平台、資料結構、Linux核心、驅動程式等,粗略數數就有8道關口,他需要非常熟悉整個的計算機體系,能做出實際的產品,而Java的開發者卻僅僅是會使用名叫Java的語言工具,始終高高飄在眾多層次之上,開發專案非常快,甚至可以不知道OSI模型,很可能自始至終都是軟體藍領。華清遠見-星創客培訓完的應屆畢業生,月薪可達到10k,幫你越過這些門檻。
嵌入式開發本身也有高下之分,至少包含嵌入式應用程式工程師和底層的驅動核心工程師兩種。前者同樣是使用現成工具進行簡單勞動,比如使用J2ME開發小游戲或者進行一些介面開發,而後者是根據晶片具體情況把作業系統(如Linux)移植到上面,同時編寫必要的驅動程式,改寫相應的核心程式碼。很顯然後者是一個公司真正的技術核心。而技術核心的工資很可能是其他開發者的數倍。
嵌入式開發課程突出強制和專案,學習不僅僅是學習幾項技術,而是構建你的知識體系。比如學習嵌入式開發,就要從基礎Linux,C語言,資料結構開始,到ARM,匯編,Linux核心、驅動等,更重要的是更多的專案練習,設計至少5個專案,多達10000行強制核心程式碼的編寫可以讓你真正獲得知識。英語課程或者日語課程的學習,為進入外企或者出國做准備。
以上就是關於什麼是嵌入式開發所講述的內容,希望對你們有幫助。
嵌入式開發、嵌入式系統開發、嵌入式作業系統開發的區別
嵌入式開發 這個概念太大了 籠統的可以包括太多 我是沒法給你說完的,籠統的說就是比如打籃球的姚明對你說他是個運動員,而不給你說他是籃球運動員一樣。
嵌入式系統開發我理解的是可包括偏軟體的系統開發和偏硬體的系統開發倆個「門派」,偏軟體系統開發比如做linux的,需要學好C語言和C++,有扎實的程式設計基礎,但是也需要了解一定的硬體知識,因為比如做bootloader的時候你得首先了解硬體再使bootloader能夠在其成功執行並能引導系統和完成各種初始化工作。另外還得學好資料結構,編譯原理,作業系統。 偏硬體的話就得學好電子硬體各類知識,比如做arm9的話要學會使用其datasheet手冊,要會組合語言,有一定的程式設計能力。總之嵌入式系統這行的門檻比較高,一般都需要軟硬兼懂。
作業系統開發的話我理解的話,比如linux,你要知道如何編寫應用程式,如何編譯bootloader,如何配置裁剪和移植核心,如何製作檔案系統,如何編寫和向硬體新增各硬體或者I0介面的驅動和QT圖形化介面的製作。這類都是PC上開發程式設計,然後將編譯調試出的比如.bin檔案燒寫到嵌入式平台上再執行,即所謂的交叉編譯。 總之這類工作就是上面我認為的偏軟的嵌入式系統開發。
總之如果要學嵌入式,無論做哪個方向,門檻都是比較高的,軟硬兼吃。至於你說的三者的關系總結,我以為就是A>B>C。
單板電腦與嵌入式開發板的區別是什麼
單板計算機基於單一電路板而構建的完整計算機,包括微處理器、記憶體、乙太網、I/O、視訊和音訊輸出。設計的核心架構是微處理器。第一台真正的單板計算機可能是基於 Intel 8080 CPU 構建的 MYCRO-1。 單板計算機具有類似其他插入卡的構型,專門應用於底板中。某些架構完全視單板計算機而定,如 PICMG、ISA、PCI、Compact PCI、VME 等架構。
嵌入式硬體和軟體的區別是什麼?
嵌入式系統是由軟體和硬體組成的整體。
硬體部分可以分成嵌入式處理器和外部裝置。
處理器是整個系統的核心,負責處理所有的軟體程式以及外部裝置的訊號。
外部裝置在不同的系統中有不同的選擇。
比如在汽車上,外部裝置主要是感測器,用於採集資料;
而在一部手機上,外部裝置可以是鍵盤、液晶螢幕等。
軟體部分可以分成兩層,最靠近硬體的是嵌入式作業系統。
作業系統是軟硬體的介面,負責管理系統的所有軟體和硬體資源。
作業系統還可以通過驅動程式與外部裝置打交道。
最上層的是應用軟體,應用軟體利用作業系統提供的功能開發出針對某個需求的程式,供使用者使用。
使用者最終是和應用軟體打交道,例如在手機上編寫一條簡訊,使用者看到的是簡訊編寫軟體的介面,而看不到裡面的作業系統以及嵌入式處理器等硬體。
一般來說,嵌入式硬體指邏輯電路、嵌入式處理器、微控制器、儲存系統和硬體設計技巧等。
嵌入式硬體開發工程師主要編寫嵌入式系統硬體總體方案和詳細方案,要求理解嵌入式系統架構,有一定的C語言基礎,熟悉ARM、PROTEL設計軟體,有四層板開發經驗。
國內通常所說的嵌入式硬體指利用處理器開發外部裝置方面。
嵌入式軟體就是嵌入在硬體中的作業系統和開發工具軟體,它在產業中的關聯關系體現為:晶片設計製造→嵌入式系統軟體→嵌入式電子裝置開發、製造。
嵌入式軟體就是基於嵌入式系統設計的軟體,它也是計算機軟體的一種,同樣由程式及其文件組成,可細分成系統軟體、支撐軟體、應用軟體三類,是嵌入式系統的重要組成部分。
但國內通常所說的嵌入式軟體主要指最靠近硬體的系統軟體與支撐軟體部分。
嵌入式開發是3G嵌入式開嗎?有何關聯區別?
嵌入式就是嵌入式,嵌入式裡面分,軟體開發和硬體開發 3G 是指
JAVA+安卓 3G就是軟體開發,沒有硬體
2. 為什麼Android系統屬於嵌入式操作系統
嵌入式實時操作系統是指當外界事件或數據產生時,能夠接受並以足夠快的速度予以處理,處理的結果又能在規定的時間之內來控制生產過程或對處理系統作出快速響應,並控制所有實時任務協調一致運行的嵌入式操作系統。主要用於工業控制、 軍事設備、 航空航天等領域對系統的響應時間有苛刻的要求,這就需要使用實時系統。又可分為軟實時和硬實時兩種,而android是基於linux內核的,因此屬於軟實時。
3. Android是嵌入式操作系統嗎
除了PC外,其他的幾乎都是嵌入式操作系統(Win8平板除外)。
嵌入式操作系統是指用於嵌入式系統的操作系統。嵌入式操作系統是一種用途廣泛的系統軟體,通常包括與硬體相關的底層驅動軟體、系統內核、設備驅動介面、通信協議、圖形界面、標准化瀏覽器等。嵌入式操作系統負責嵌入式系統的全部軟、硬體資源的分配、任務調度,控制、協調並發活動。它必須體現其所在系統的特徵,能夠通過裝卸某些模塊來達到系統所要求的功能。目前在嵌入式領域廣泛使用的操作系統有:嵌入式實時操作系統µC/OS-II、嵌入式Linux、Windows Embedded、VxWorks等,以及應用在智能手機和平板電腦的Android、iOS等。
4. 試用嵌入式系統的概念分析android和app之間關系
1、android和app都是軟體,android一般用c或c++編寫,android上安裝相應的語言解釋器,app就可以使用相應的語言編寫,比如java、js等。
2、android是直接操作硬體,包括了硬體的驅動程序,內存的管理等
3、app是在android操作系統上運行的一個程序,app無法直接操作硬體,只能通過android提供的介面間接的操作硬體。
舉例說明:app要實現拍照功能,app只要調用android提供給app打開攝像頭,獲取圖像數據的介面,關於攝像頭晶元的時序呀、寄存器配置呀、怎麼獲得圖像數據,甚至怎麼打開閃光燈都是android考慮的事情。
5. 嵌入式linux和嵌入式android系統有什麼區別和聯系
嵌入式linux系統是在嵌入式設備中運行linux系統。 嵌入式android系統是在嵌入式設備中運行android系統。 其區別就是android系統和linux系統的區別。 android系統的底層是linux的內核,上面跑的是android的java虛擬機
6. 如何自學嵌入式
原文鏈接:網頁鏈接
嵌入式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
.................未完
原文鏈接:網頁鏈接
7. Android嵌入式系統主要用於什麼方面發展前景如何
目前國內的Android開發還是主要以應用開發為主,主要分成3類:為企業開發應用、開發通用應用(放到Android Market或者其他App Market銷售)以及游戲開發(放到Android Market或者其他App Market銷售)。第一類開發者一般身處規模較大的公司,這些公司主要為自有品牌或者其他品牌設計手機或者平板電腦的總體方案。除了根據需求對系統進行定製外,更多的工作在於為這些系統編寫定製的應用。第二類開發者,一般處於創業型公司或者是獨立開發者,他們的盈利方式主要是2種:為國外公司進行外包開發,或者通過Google的移動廣告(AdMob)通過廣告點擊分成。移動互聯網行業目前還在熱門階段。有興趣可深入了解。
8. 什麼是嵌入式實時操作系統, Android 操作系統屬於實時操作系統嗎
嵌入式實時操作系統其主要特點如下:
●實時性。由於對嵌人式實時操作系統的共同要求是系統能快速響應事件,具有較強的實時性,所以嵌入式實時操作系統的內核都是可搶占的。
●可裁剪性。嵌入式操作系統運行的硬體平台多種多樣,其宿主對象更是五花八門,所以要求嵌入式操作系統中提供的各個功能模塊可以讓用戶根據需要選擇使用,即要求它具有良好的可裁剪性。
●高可靠性。嵌入式系統廣泛應用於軍事武器、航空航天、交通運輸、重要的生產設各領域,所以要求嵌人式操作系統必須有極高的可靠性,對關鍵、要害的應用還要提供必要的容錯和防錯措施,以進一步提高系統的可靠性。
●易移植性。為了適應多種多樣的硬體平台,嵌人式操作系統應可在不做大量修改的情況下能穩定地運行於不同的平台。
Android 操作系統用的內核是linux,而linux內核不屬於實時操作系統范疇。 所以Android不是實時操作系統。
9. android系統的系統架構
架構詳解
Linux Kernel
Android基於Linux kernel 提供核心系統服務,例如:安全、內存管理、進程管理、網路堆棧、驅動模型。Linux Kernel也作為硬體和軟體之間的抽象層,它隱藏具體硬體細節而為上層提供統一的服務。 如果你學過計算機網路知道OSI/RM,就會知道分層的好處就是使用下層提供的服務而為上層提供統一的服務,屏蔽本層及以下層的差異,當本層及以下層發生了變化不會影響到上層。也就是說各層各盡其職,各層提供固定的SAP(ServiceAccess Point),專業點可以說是高內聚、低耦合。如果你只是做應用開發,就不需要深入了解Linux Kernel層。
Android Runtime
Android包含一個核心庫的集合,提供大部分在Java編程語言核心類庫中可用的功能。每一個Android應用程序是Dalvik虛擬機中的實例,運行在他們自己的進程中。Dalvik虛擬機設計成,在一個設備可以高效地運行多個虛擬機。Dalvik虛擬機可執行文件格式是.dex,dex格式是專為Dalvik設計的一種壓縮格式,適合內存和處理器速度有限的系統。 大多數虛擬機包括JVM都是基於棧的,而Dalvik虛擬機則是基於寄存器的。兩種架構各有優劣,一般而言,基於棧的機器需要更多指令,而基於寄存器的機器指令更大。dx 是一套工具,可以將 Java .class 轉換成 .dex 格式。一個dex文件通常會有多個.class。由於dex有時必須進行最佳化,會使文件大小增加1-4倍,以ODEX結尾。 Dalvik虛擬機依賴於Linux 內核提供基本功能,如線程和底層內存管理。
Library
Android包含一個C/C++庫的集合,供Android系統的各個組件使用。這些功能通過Android的應用程序框架(application framework)暴露給開發者。下面列出一些核心庫:系統C庫——標准C系統庫(libc)的BSD衍生,調整為基於嵌入式Linux設備媒體庫——基於PacketVideo的OpenCORE。這些庫支持播放和錄制許多流行的音頻和視頻格式,以及靜態圖像文件,包括MPEG4、 H.264、MP3、 AAC、AMR、JPG、 PNG界面管理——管理訪問顯示子系統和無縫組合多個應用程序的二維和三維圖形層LibWebCore——新式的Web瀏覽器引擎,驅動Android 瀏覽器和內嵌的web視圖SGL——基本的2D圖形引擎3D庫——基於OpenGL ES 1.0 APIs的實現。庫使用硬體3D加速或包含高度優化的3D軟體光柵FreeType——點陣圖和矢量字體渲染SQLite——所有應用程序都可以使用的強大而輕量級的關系資料庫引擎
Application Framework
通過提供開放的開發平台,Android使開發者能夠編制極其豐富和新穎的應用程序。開發者可以自由地利用設備硬體優勢、訪問位置信息、運行後台服務、設置鬧鍾、向狀態欄添加通知等等,很多很多。 開發者可以完全使用核心應用程序所使用的框架APIs。應用程序的體系結構旨在簡化組件的重用,任何應用程序都能發布他的功能且任何其他應用程序可以使用這些功能(需要服從框架執行的安全限制)。這一機制允許用戶替換組件。 所有的應用程序其實是一組服務和系統,包括:視圖(View)——豐富的、可擴展的視圖集合,可用於構建一個應用程序。包括包括列表、網格、文本框、按鈕,甚至是內嵌的網頁瀏覽器內容提供者(Content Providers)——使應用程序能訪問其他應用程序(如通訊錄)的數據,或共享自己的數據資源管理器(Resource Manager)——提供訪問非代碼資源,如本地化字元串、圖形和布局文件通知管理器(Notification Manager)——使所有的應用程序能夠在狀態欄顯示自定義警告活動管理器(Activity Manager)——管理應用程序生命周期,提供通用的導航回退功能
Application
Android裝配一個核心應用程序集合,包括電子郵件客戶端、SMS程序、日歷、地圖、瀏覽器、聯系人和其他設置。所有應用程序都是用Java編程語言寫的。更加豐富的應用程序有待我們去開發! 從上面我們知道Android的架構是分層的,非常清晰,分工很明確。Android本身是一套軟體堆疊(Software Stack),或稱為「軟體疊層架構」,疊層主要分成三層:操作系統、中間件、應用程序。從上面我們也看到了開源的力量,一個個熟悉的開源軟體在這里貢獻了自己的一份力量。
10. 什麼是android嵌入式開發
android嵌入式開發
移動是IT發展未來 !嵌入式底層就是移動的發展未來 !如何在這個風雲際會的時代,讓自己積極的參與其中,作為程序員 ,嵌入式是無可避免的選擇 !Android嵌入式底層課程繼續以Sundy獨有的分享方式 ,
基本信息
中文名稱
android嵌入式開發
發布時間
2012年
時 長
300小時+
語 種
中文
目錄
1簡介
2基本信息
3目錄
折疊編輯本段簡介
移動是IT發展未來 !嵌入式底層就是移動的發展未來 !如何在這個風雲際會的時代,讓自己積極的參與其中,作為程序員 ,嵌入式是無可避免的選擇 !Android嵌入式底層課程繼續以Sundy獨有的分享方式 ,深入淺出,不僅僅講解技術,更多的關注大家的職業生涯和發展,關注企業規模化工作中的模式。
折疊編輯本段基本信息
名稱:android嵌入式底層開發
時長:300小時+
語種:中文
發布時間:2012年
作者:sundy(張凌華)
折疊編輯本段目錄
折疊第一階段
Linux基礎及操作系統框架概述
Linux常用命令及vi
Linux系統設置
C語言重點難點講解
Linux Shell編程
折疊第二階段
GNU開發環境基礎
GNU Makefile
Linux嵌入式系統開發環境搭建
Linux應用系統開發基礎
Linux文件I/O編程
Linux進程式控制制
Linux進程間通訊
Linux多線程編程
Linux網路編程
折疊第三階段
嵌入式系統及微處理器概述
嵌入式電路圖基礎
ARM處理器系統結構
ARM匯流排方式及存儲器結構層次
ARM指令集及定址方式,Thumb指令
ARM開發環境ADS應用
ARM匯編及混合編程
Bootloader介紹及Uboot結構講解
Uboot全方位(移植,修改,編譯,生成,燒寫)
ARM硬體介面開發
裸板驅動開發
折疊第四階段
嵌入式Linux系統開發及移植
Linux內核原理概要
Linux內核配置與裁減
Linux內核編程
Linux驅動開發基礎
Linux驅動開發深入
折疊第五階段
Android系統驅動開發差異化
Android特定驅動開發
Android系統移植概述
Android RIL開發基礎
Webkit在Android上的移植
課程總結:未來是移動的未來
折疊項目
:Android從底層驅動一直到上層的修改,移植 ,通過編寫一個上層的Application來操作底層硬體;:
車載通訊多媒體系統(網路通信協議應用,包括藍牙,NFC,FM)遵循Delphi組織歐洲車載Android標准規范;
物聯網家居控制模塊兒(家庭視頻採集及傳輸模塊,實現遠程監控);
Android電磁原理手機無線充電改裝(以Sundy的Galaxy Nexus為例,改裝手機無線充電功能並且擴展外設-包括底座及手機);