第二十八天

學(xué)習(xí)stm32gpio 學(xué)習(xí)linux

程序員的三大方向

程序員的方向乙濒,一般可以分為3類:專業(yè)領(lǐng)域债查、業(yè)務(wù)領(lǐng)域非区、操作系統(tǒng)領(lǐng)域。你了解它們后盹廷,按興趣選擇吧征绸。對于專業(yè)領(lǐng)域,我提供不了建議俄占。業(yè)務(wù)管怠,也就是應(yīng)用程序,它跟操作系統(tǒng)并不是截然分開的:

①開發(fā)實(shí)體產(chǎn)品時(shí)缸榄,應(yīng)用程序?qū)懙煤玫娜瞬吵冢袝r(shí)候需要操作系統(tǒng)的知識,比如調(diào)度優(yōu)先級

的設(shè)置甚带、知道某些函數(shù)可能會令進(jìn)程休眠她肯。

②寫應(yīng)用程序的人進(jìn)階為系統(tǒng)工程師時(shí),他需要從上到下都了解欲低,這時(shí)候就需要有操作

系統(tǒng)領(lǐng)域的知識了辕宏,否則,你怎么設(shè)計(jì)整個系統(tǒng)的方案呢砾莱?

③做應(yīng)用程序的人瑞筐,需要了解行業(yè)的需求,理解業(yè)務(wù)的邏輯。所以聚假,當(dāng)領(lǐng)導(dǎo)的人块蚌,多是

做應(yīng)用的。一旦鉆入了某個行業(yè)膘格,很難換行業(yè)峭范。

④而操作系統(tǒng)領(lǐng)域,做好了這是通殺各行業(yè):他只負(fù)責(zé)底層系統(tǒng)瘪贱,在上面開發(fā)什么業(yè)務(wù)跟

他沒關(guān)系纱控。這行很多是技術(shù)宅,行業(yè)專家菜秦。

⑤操作系統(tǒng)和業(yè)務(wù)之間并沒有一個界線甜害。有操作系統(tǒng)經(jīng)驗(yàn),再去做應(yīng)用球昨,你會對系統(tǒng)知

根知底尔店,碰到問題時(shí)都有解決思路。有了業(yè)務(wù)經(jīng)驗(yàn)主慰,你再了解一下操作系統(tǒng)嚣州,很快就可組成一個團(tuán)隊(duì)自立門戶,至少做個CTO沒問題共螺。

專業(yè)領(lǐng)域

它又可以分為下面2類该肴。

學(xué)術(shù)研究

比如語音、圖像處理藐不、人工智能沙庐,這類工作需要你有比較強(qiáng)的理論知識,我傾向于認(rèn)為這類人是“科學(xué)家”佳吞,他們鉆研多年,很多時(shí)候是在做學(xué)術(shù)研究棉安。

在嵌入式領(lǐng)域底扳,需要把他們的成果用某種算法表達(dá)出來,針對某種芯片進(jìn)行優(yōu)化贡耽,這部分工作也許有專人來做衷模。

工程實(shí)現(xiàn)

也有這樣一類人,他們懂得這些專業(yè)領(lǐng)域的概念蒲赂,但是沒有深入鉆研阱冶。可以使用各類開源資料實(shí)現(xiàn)某個目標(biāo)滥嘴,做出產(chǎn)品木蹬。比如圖像處理,他懂得用opencv里幾百個復(fù)雜函數(shù)來實(shí)現(xiàn)頭像識別若皱。有時(shí)候還可以根據(jù)具體芯片來優(yōu)化這些函數(shù)镊叁。

“專業(yè)領(lǐng)域”不是我的菜尘颓,如果你要做這一塊,我想最好的入門方法是在學(xué)校學(xué)習(xí)研究生晦譬、博士課程疤苹。

業(yè)務(wù)領(lǐng)域

換句話說,就是應(yīng)用程序敛腌,這又可以分為下面2類卧土。

界面顯示

做產(chǎn)品當(dāng)然需要好的界面,但是像樊,不是說它不重要尤莺,是沒什么發(fā)展后勁。

現(xiàn)在的熱門詞是Android

APP和IOS APP開發(fā)凶硅。你不要被Android缝裁、IOS兩個詞騙了,它們跟以前的VC足绅、VB是同一路貨色捷绑,只是、僅僅是一套GUI控件的實(shí)現(xiàn)氢妈。

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

一個程序需要有GUI界面首量,但是程序的內(nèi)在邏輯才是核心壮吩。Android、IOS的開發(fā)工具給我們簡化了GUI的開發(fā)加缘,并提供了這些控件的交互機(jī)制鸭叙,封裝并提供了一些服務(wù)(比如網(wǎng)絡(luò)傳輸)。

但是程序內(nèi)部的業(yè)務(wù)邏輯拣宏、對視頻圖像聲音的處理等等沈贝,這才是核心。另外別忘了服務(wù)器那邊的后臺程序:怎樣更安全地保存數(shù)據(jù)勋乾、保護(hù)客戶的隱私宋下,怎樣處理成千上萬上百萬的并發(fā)訪問,等等辑莫,這也是核心学歧。

但是,從Android各吨、IOS APP入門入行枝笨,這很快!如果你是大四,急于找到一份工作伺帘,那么花上1昭躺、2個月去學(xué)習(xí)Android或IOS,應(yīng)該容易找到工作伪嫁,畢竟APP的需求永遠(yuǎn)是最大的领炫,現(xiàn)在這兩門技術(shù)還算熱門。在2011张咳、2012年左右帝洪,Android程序員的起薪挺高,然后開始下滑脚猾。Android APP的入門基本只要1個月葱峡,所以懂的人也越來越多。2013龙助、2014年砰奕,IOS開發(fā)的工資明顯比Android高了,于是各類IOS培訓(xùn)也火曝起來提鸟。中華大地向來不缺速成人才军援,估計(jì)再過一陣子IOS工程師也是白菜價(jià)了。會Android称勋、IOS只是基本要求胸哥,不信去51job搜搜Android或IOS搂擦,職位要求里肯定其他要求罗丰。

業(yè)務(wù)邏輯

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

①正常流程是上班下班時(shí)都要打卡

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

③請假時(shí)怎么處理闸溃?

④加班怎么處理潘拱?

對于更復(fù)雜的例子揩瞪,視頻會議系統(tǒng)里哮内,各個模塊怎么對接,各類協(xié)議怎么兼容壮韭,你不深入這個行業(yè),你根本搞不清楚纹因。

應(yīng)用開發(fā)的職位永遠(yuǎn)是最多的喷屋,入門門檻也低〔t恰;旧现灰銜﨏語言屯曹,面試時(shí)表現(xiàn)比較得體,一般公司都會給你機(jī)會。因?yàn)椋?/p>

①你進(jìn)公司后恶耽,還需要重新培訓(xùn)你:熟悉它們的業(yè)務(wù)邏輯密任。

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

說點(diǎn)讓你高興的事:軟件公司里涌萤,做領(lǐng)導(dǎo)的基本都是寫應(yīng)用程序的(當(dāng)然還有做市場的)淹遵。寫應(yīng)用程序的人,對外可以研究市場接待客戶负溪,對內(nèi)可以管理程序員完成開發(fā)透揣,不讓他做領(lǐng)導(dǎo)讓誰做?如果你的志向是寫應(yīng)用程序川抡,那么我建議你先練好基本功:數(shù)據(jù)結(jié)構(gòu)辐真、算法是必備,然后憑興趣選擇數(shù)據(jù)庫崖堤、網(wǎng)絡(luò)編程等等進(jìn)行深入鉆研侍咱。最后,選擇你看好的倘感、感興趣的行業(yè)深耕個10年吧放坏。做應(yīng)用開發(fā)的人選擇了某個行業(yè),后面是很難換行業(yè)的老玛,選行很重要淤年!

操作系統(tǒng)領(lǐng)域

UCOS太簡單,VxWorks太貴太專業(yè)蜡豹,Windows不玩嵌入式了麸粮,IOS不開源,所以對于操作系統(tǒng)領(lǐng)域我們也只能玩Linux了镜廉。

在嵌入式領(lǐng)域Linux一家獨(dú)大弄诲!

Android呢?Android跟QT一樣娇唯,都是一套GUI系統(tǒng)齐遵。只是Google的實(shí)力太強(qiáng)了,現(xiàn)在Android無處不在塔插,所以很多時(shí)候Linux+Android成了標(biāo)配梗摇。注意,在這里我們關(guān)心的是Android的整個系統(tǒng)想许、里面的機(jī)制伶授,而不是學(xué)習(xí)幾個API然后開發(fā)界面程序断序。

操作系統(tǒng)領(lǐng)域所包含的內(nèi)容,簡單地說糜烹,就是制作出一臺裝好系統(tǒng)的專用“電腦”违诗,可以分為:

①為產(chǎn)品規(guī)劃硬件:

按需求、性能疮蹦、成本選擇主芯片诸迟,搭配周邊外設(shè),交由硬件開發(fā)人員設(shè)計(jì)挚币。

②給單板制作亮蒋、安裝操作系統(tǒng)、編寫驅(qū)動

③定制維護(hù)妆毕、升級等系統(tǒng)方案

④還可能要配置慎玖、安裝Android等GUI系統(tǒng):

⑤為應(yīng)用開發(fā)人員配置開發(fā)環(huán)境

⑥從系統(tǒng)角度解決疑難問題

這個領(lǐng)域,通常被稱為“底層系統(tǒng)”或是“驅(qū)動開發(fā)”笛粘。

先解決2個常見誤區(qū):

①這份工作是寫驅(qū)動程序嗎趁怔?

看看上面羅列的6點(diǎn),應(yīng)該說薪前,它包含驅(qū)動開發(fā)润努,但遠(yuǎn)遠(yuǎn)不只有驅(qū)動開發(fā)。

②我們還需要寫驅(qū)動嗎示括?不是有原廠嗎铺浇?或者只需要改改就可以?

經(jīng)常有人說垛膝,芯片原廠都做好驅(qū)動了鳍侣,拿過來改改就可以了。如果吼拥,你的硬件跟原廠的公板完全一樣倚聚,原廠源碼毫無BUG,不想優(yōu)化性能凿可、削減成本惑折,不想做一些有特色的產(chǎn)品,那這話是正確的枯跑。

但是在這個不創(chuàng)新就是找死的年代惨驶,可能嗎?敛助!原因有二:

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

驅(qū)動程序

②很多時(shí)候辜腺,需要你深度定制系統(tǒng)休建。

以前做聯(lián)發(fā)科手機(jī)只需要改改界面就可以出貨了,現(xiàn)在山寨廠一批批倒下评疗。大家都使用原廠的方案而不加修改時(shí)测砂,最后只能拼成本。舉個例子百匆,深圳有2家做交通攝像頭砌些、監(jiān)控?cái)z像頭的廠家,他們曾經(jīng)找我做過4個項(xiàng)目:

①改進(jìn)廠家給的SD卡驅(qū)動性能加匈,使用DMA存璃。

②換了Flash型號后,系統(tǒng)經(jīng)常出問題雕拼,需要修改驅(qū)動BUG纵东。

③觸摸屏點(diǎn)擊不準(zhǔn),找原因啥寇,后來發(fā)現(xiàn)是旁路電容導(dǎo)致的偎球。

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

這些項(xiàng)目都很急,搞不定就無法出貨磷醋,這時(shí)候找原廠猫牡?除非你是中興華為等大客戶,否則誰理你邓线?

我在中興公司上班時(shí)淌友,寫驅(qū)動的時(shí)間其實(shí)是很少的,大部分時(shí)間是調(diào)試:系統(tǒng)調(diào)優(yōu)褂痰,上幫APP工程師亩进、下幫硬件工程師查找問題。我們從廠家缩歪、網(wǎng)上得到的源碼归薛,很多都是標(biāo)準(zhǔn)的,當(dāng)然可以直接用匪蝙。但是在你的產(chǎn)品上也許優(yōu)化一下更好主籍。比如我們可以把攝像頭驅(qū)動和DMA驅(qū)動揉合起來,讓攝像頭的數(shù)據(jù)直接通過DMA發(fā)到DSP去逛球。

我們可以在軟件和硬件之間起橋梁作用千元,對于實(shí)體產(chǎn)品,有可能是軟件出問題也可能是硬件出問題颤绕,一般是底層系統(tǒng)工程師比較容易找出問題幸海。當(dāng)硬件祟身、軟件應(yīng)用出現(xiàn)問題,他們解決不了時(shí)物独,從底層軟件角度給他們出主意袜硫,給他們提供工具。再比如方案選擇:芯片性能能否達(dá)標(biāo)挡篓、可用的BSP是否完善等等婉陷,這只能由負(fù)責(zé)整個方案的人來考慮,他必須懂底層官研。

在操作系統(tǒng)領(lǐng)域秽澳,對知識的要求很多:

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

②英文好會看芯片手冊

③有編寫、移植驅(qū)動程序的能力

④對操作系統(tǒng)本身有一定的理解戏羽,才能解決各類疑難問題

⑤理解Android內(nèi)部機(jī)制

⑥懂匯編担神、C語言、C++蛛壳、JAVA

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

①這行的入門捞挥,絕對需要半年以上,即使全天學(xué)習(xí)也要半年忧吟。

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

③并且你沒有1、2年經(jīng)驗(yàn)溜族,招你到公司后一開始你做的還是APP讹俊。

優(yōu)點(diǎn)就是:

①學(xué)好后,行業(yè)通殺煌抒,想換行就換行仍劈;想自己做產(chǎn)品就自己做產(chǎn)品。

②相比做應(yīng)用程序的人寡壮,不會被經(jīng)常變動的需求搞得天天加班贩疙。

③門檻高,當(dāng)然薪水相對就高况既。

操作系統(tǒng)領(lǐng)域这溅,我認(rèn)為適合于這些人:

①硬件工程師想轉(zhuǎn)軟件工程師,從底層軟件入門會比較好

②單片機(jī)工程師棒仍,想升級一下悲靴。會Linux底層的人肯定會單片機(jī),會單片機(jī)的人不一定

會Linux莫其。

③時(shí)間充足的學(xué)生:如果你正讀大二大三癞尚,那么花上半年學(xué)習(xí)嵌入式Linux底層多有益處耸三。

④想掌握整個系統(tǒng)的人,比如你正在公司里寫APP浇揩,但是想升為系統(tǒng)工程師吕晌,那么底層

不得不學(xué)。

⑤想自己創(chuàng)業(yè)做實(shí)體產(chǎn)品的工程師临燃,你有錢的話什么技術(shù)都不用學(xué),但是如果沒錢又想

做產(chǎn)品烙心,那么Linux底層不得不學(xué)膜廊。

⑥做Linux APP的人,沒錯淫茵,他們也要學(xué)習(xí)爪瓜。

這部分人不需要深入,了解個大概就可以:bootloader是用來啟動內(nèi)核匙瘪,Linux的文件系統(tǒng)(第1個程序是什么铆铆、做什么、各目錄干嘛用)丹喻、APP跟驅(qū)動程序的調(diào)用關(guān)系薄货、工具鏈,有這些概念就可以了

本文中碍论,就把操作系統(tǒng)默認(rèn)為Linux谅猾,講講怎么學(xué)習(xí)嵌入式Linux+Android系統(tǒng)。

嵌入式Linux+Android系統(tǒng)包含哪些內(nèi)容

嵌入式Linux系統(tǒng)包含哪些東西鳍悠?不要急税娜,舉一個例子你就知道了。

①電腦一開機(jī)藏研,那些界面是誰顯示的敬矩?

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

類似的缩筛,這個BIOS對應(yīng)于嵌入式Linux里的bootloader。這個bootloader要去Flash上讀入Linux內(nèi)核堡称,并啟動它瞎抛。

②啟動windows的目的是什么?

當(dāng)然運(yùn)行應(yīng)用程序以便上網(wǎng)却紧、聊天什么的了桐臊。

這些上網(wǎng)程序胎撤、聊天程序在哪?

在C盤断凶、D盤上伤提。

所以,windows要先識別出C盤认烁、D盤肿男。在Linux下我們稱之為根文件系統(tǒng)。

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

這個能力我們稱之為驅(qū)動程序窗价。當(dāng)然不僅僅是操作硬盤如庭,還有網(wǎng)卡、USB等等其他硬件撼港。

嵌入式Linux能從Flash上讀出并執(zhí)行應(yīng)用程序坪它,肯定也得有Flash的驅(qū)動程序啊,當(dāng)然也不僅僅是Flash帝牡。

簡單地說往毡,嵌入式LINUX系統(tǒng)里含有bootloader、內(nèi)核否灾、驅(qū)動程序卖擅、根文件系統(tǒng)、應(yīng)用程序這5大塊墨技。而應(yīng)用程序惩阶,我們又可以分為:C/C++、Android扣汪。

所以断楷,嵌入式Linux+Android系統(tǒng)包含以下6部分內(nèi)容:

①bootloader

②Linux內(nèi)核

③驅(qū)動程序

④使用C/C++編寫的應(yīng)用程序

⑤Android系統(tǒng)本身

⑥Android應(yīng)用程序

Android跟Linux的聯(lián)系實(shí)在太大了,它的應(yīng)用是如此廣泛崭别,學(xué)習(xí)了Linux之后沒有理由停下來不學(xué)習(xí)Android冬筒。在大多數(shù)智能設(shè)備中,運(yùn)行的是Linux操作系統(tǒng)茅主;它上面要么安裝有Android舞痰,要么可以跟Android手機(jī)互聯(lián)。現(xiàn)在诀姚,Linux+Android已成標(biāo)配响牛。

怎么學(xué)習(xí)嵌入式Linux操作系統(tǒng)

本文假設(shè)您是零基礎(chǔ),以實(shí)用為主,用最快的時(shí)間讓你入門呀打;后面也會附上想深入學(xué)習(xí)時(shí)可以參考的資料矢赁。在實(shí)際工作中,我們從事的是“操作系統(tǒng)”周邊的開發(fā)贬丛,并不會太深入學(xué)習(xí)撩银、修改操作系統(tǒng)本身。

①操作系統(tǒng)具有進(jìn)程管理豺憔、存儲管理额获、文件管理和設(shè)備管理等功能,這些核心功能非常

穩(wěn)定可靠恭应,基本上不需要我們修改代碼咪啡。我們只需要針對自己的硬件完善驅(qū)動程序

②學(xué)習(xí)驅(qū)動時(shí)必定會涉及其他知識,比如存儲管理暮屡、進(jìn)程調(diào)度。當(dāng)你深入理解了驅(qū)動程

序后毅桃,也會加深對操作系統(tǒng)其他部分的理解

③Linux內(nèi)核中大部分代碼都是設(shè)備驅(qū)動程序褒纲,可以認(rèn)為Linux內(nèi)核由各類驅(qū)動構(gòu)成

但是,要成為該領(lǐng)域的高手钥飞,一定要深入理解Linux操作系統(tǒng)本身莺掠,要去研讀它的源代碼。

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

①趙炯的《linux內(nèi)核完全注釋》,這本比較薄结闸,推薦這本唇兑。他后來又出了《Linux內(nèi)核

完全剖析》,太厚了桦锄,搞不好看了后面就忘記前面了扎附。

②毛德操、胡希明的《LINUX核心源代碼情景分析》结耀,此書分上下冊留夜,巨厚無比。當(dāng)作

字典看即可:想深入理解某方面的知識图甜,就去看某章節(jié)碍粥。

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

基于快速入門嚼摩,上手工作的目的,您先不用看上面的書,先按本文學(xué)習(xí)低斋。

入門路線圖

假設(shè)您是零基礎(chǔ)蜂厅,我們規(guī)劃了如下入門路線圖。

前面的知識膊畴,是后面知識的基礎(chǔ)掘猿,建議按順序?qū)W習(xí)。每一部分唇跨,不一定需要學(xué)得很深入透徹稠通,下面分章節(jié)描述。

學(xué)習(xí)驅(qū)動程序之前的基礎(chǔ)知識

C語言

只要是理工科專業(yè)的买猖,似乎都會教C語言改橘。我見過很多C語言考試90、100分的一上機(jī)就傻了玉控,我懷疑他們都沒在電腦上寫過程序飞主。

理論再好,沒有實(shí)踐不能干活的話高诺,公司招你去干嘛碌识?

反過來,實(shí)踐出真知虱而,學(xué)習(xí)C語言筏餐,必須練練練、寫寫寫牡拇!

當(dāng)你掌握基本語法后魁瞪,就可以在電腦上練習(xí)一些C語言習(xí)題了;

當(dāng)你寫過幾個C程序后惠呼,就可以進(jìn)入下一階段的裸機(jī)開發(fā)了导俘。

①不需要太深入

作為快速入門,只要你會編寫“Hello, world!”剔蹋,會寫冒泡排序趟畏,會一些基礎(chǔ)的語法操作,暫時(shí)就夠了滩租。指針操作是重點(diǎn)赋秀,多練習(xí);

不需要去學(xué)習(xí)過多的數(shù)據(jù)結(jié)構(gòu)知識律想,只需要掌握鏈表操作猎莲,其他不用學(xué)習(xí),比如:隊(duì)列技即、二叉樹等等都不用學(xué)著洼;不需要去學(xué)習(xí)任何的函數(shù)使用,比如文件操作、多線程編程身笤、網(wǎng)絡(luò)編程等等豹悬;這些知識,在編寫Linux應(yīng)用程序時(shí)會用液荸,但是在操作系統(tǒng)特別是驅(qū)動學(xué)習(xí)時(shí)瞻佛,用不著!永往直前吧娇钱,以后碰到不懂的C語言問題伤柄,我們再回過頭來學(xué)習(xí)。

在后續(xù)的“裸機(jī)開發(fā)”中文搂,會讓你繼續(xù)練習(xí)C語言适刀,那會更實(shí)戰(zhàn)化。

C語言是在寫代碼中精進(jìn)的煤蹭。

②可以在Visual Studio下學(xué)習(xí)笔喉,也可以在Linux下學(xué)習(xí),后者需要掌握一些編譯命令

我們暫時(shí)沒有提供C語言的教程硝皂,找一本C語言書然遏,網(wǎng)上找找免費(fèi)的C語言視頻(主要看怎么搭建環(huán)境),就可以自學(xué)了吧彪。

PC Linux基本操作:

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

我們的工作模式通常是這樣:在Windows下閱讀、編寫代碼怨酝,然后把代碼上傳到PC Linux去編譯傀缩。實(shí)際上,Ubuntu的桌面系統(tǒng)已經(jīng)很好用了农猬,我們拿到各種智能機(jī)可以很快上手赡艰,相信Ubuntu的桌面系統(tǒng)也可以讓你很快上手。為了提高工作效率斤葱,我們通常使用命令行來操作Ubuntu慷垮。不用擔(dān)心,你前期只需要掌握這幾條命令就可以了揍堕,它們是如此簡單料身,我干脆列出它們:

①cd : Change

Directory(改變目錄)

cd目錄名//進(jìn)入某個目錄

cd ..// cd“兩個點(diǎn)”:返回上一級目錄

cd -// cd“短橫”:返回上一次所在目錄

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

③mkdir : Make

Directory(創(chuàng)建目錄)

mkdir abc//創(chuàng)建文件夾abc

mkdir -p a/b/c//創(chuàng)建文件夾a,再a下創(chuàng)建文件夾b衩茸,再在b下創(chuàng)建文件夾c

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

rmfile//刪除名為file的文件

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

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

⑥mount :掛載

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

mount -t yaffs /dev/mtdblock3 /mnt

⑦chown : Change

owner(改變文件的屬主芹血,即擁有者)

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

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

chmod 777 /work -R//對/work目錄及其下所有內(nèi)容啃擦,權(quán)限改為可讀、可寫饿悬、可執(zhí)行

⑨vi : Linux下最常用的編輯命令令蛉,使用稍微復(fù)雜,請自己搜索用法乡恕。

要練習(xí)這些命令言询,你可以進(jìn)入U(xiǎn)buntu桌面系統(tǒng)后,打開終端輸入那些命令傲宜;或是用SecureCRT运杭、putty等工具遠(yuǎn)程登錄Ubuntu后練習(xí)。

硬件知識

我們學(xué)習(xí)硬件知識的目的在于能看懂原理圖函卒,看懂通信協(xié)議辆憔,看懂芯片手冊;不求能設(shè)計(jì)原理圖报嵌,更不求能設(shè)計(jì)電路板虱咧。對于正統(tǒng)的方法,你應(yīng)該這樣學(xué)習(xí):

①學(xué)習(xí)《微機(jī)原理》锚国,理解一個計(jì)算機(jī)的組成及各個部件的交互原理腕巡。

②學(xué)習(xí)《數(shù)字電路》,理解各種門電路的原理及使用血筑,還可以掌握一些邏輯運(yùn)算(與绘沉、或等)。

③《模擬電路》豺总?好吧车伞,這個不用學(xué),至少我在工作中基本用不到它喻喳,現(xiàn)在全忘光了另玖。

就我個人經(jīng)驗(yàn)來說,這些課程是有用的表伦,但是:

①原理有用谦去,實(shí)戰(zhàn)性不強(qiáng)自娩。

比如《微機(jī)原理》是基于x86系統(tǒng)吠卷,跟ARM板子有很大差別,當(dāng)然原理相通栏豺。

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

②每本書都那么厚杨耙,內(nèi)容都很多,學(xué)習(xí)時(shí)間過長飘痛,自學(xué)有難度珊膜。

針對這些校園教材的不足,并結(jié)合實(shí)際開發(fā)過程中要用到的知識點(diǎn)宣脉,我們推出了《學(xué)前班_怎么看原理圖》的系列視頻:

學(xué)前班第1課第1節(jié)_怎么看原理圖之GPIO和門電路.wmv

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

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

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

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

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

學(xué)前班第1課第3節(jié)_怎么看原理圖之內(nèi)存類接口.wmv

學(xué)前班第1課第4.1節(jié)_怎么看原理圖之分析S3C2410開發(fā)板.wmv

學(xué)前班第1課第4.2節(jié)_怎么看原理圖之分析S3C2440開發(fā)板.wmv

學(xué)前班第1課第4.3節(jié)_怎么看原理圖之分析S3C6410開發(fā)板.wmv

即使你只具備初中物理課的電路知識车柠,我也希望能通過這些視頻,讓你可以看懂原理圖塑猖,理解一些常見的通信協(xié)議竹祷;如果你想掌握更多的硬件知識,這些視頻也可以起個索引作用羊苟,讓你知道缺乏什么知識塑陵。這些視頻所講到的硬件知識,將在《裸板開發(fā)》系列視頻中用到蜡励,到時(shí)可以相互對照著看令花,加深理解。

要不要專門學(xué)習(xí)Windows下的單片機(jī)開發(fā)

很多學(xué)校都開通了單片機(jī)的課程凉倚,很多人都是從51單片機(jī)兼都、AVR單片機(jī),現(xiàn)在比較新的STM32單片機(jī)開始接觸嵌入式領(lǐng)域稽寒,并且使用Windows下的開發(fā)軟件扮碧,比如keil、MDK等杏糙。

問題來了慎王,要不要專門學(xué)習(xí)Windows下的單片機(jī)開發(fā)?

①如果這是你們專業(yè)的必修課搔啊,那就學(xué)吧

②如果你的專業(yè)跟單片機(jī)密切相關(guān),比如機(jī)械控制等北戏,那就學(xué)吧

③如果你只是想從單片機(jī)入門负芋,然后學(xué)習(xí)更廣闊的嵌入式Linux,那么放棄在Windows

學(xué)習(xí)單片機(jī)吧嗜愈!理由如下:

①Windows下的單片機(jī)學(xué)習(xí)旧蛾,深度不夠

Windows下有很好的圖形界面單片機(jī)開發(fā)軟件,比如keil蠕嫁、MDK等锨天。

它們封裝了很多技術(shù)細(xì)節(jié),比如:

你只會從main函數(shù)開始編寫代碼剃毒,卻不知道上電后第1條代碼是怎么執(zhí)行的病袄;

你可以編寫中斷處理函數(shù)搂赋,但是卻不知道它是怎么被調(diào)用的;

你不知道程序怎么從Flash上被讀入內(nèi)存益缠;

也不知道內(nèi)存是怎么劃分使用的脑奠,不知道棧在哪、堆在哪幅慌;

當(dāng)你想裁剪程序降低對Flash宋欺、內(nèi)存的使用時(shí),你無從下手胰伍;

當(dāng)你新建一個文件時(shí)齿诞,它被自動加入到工程里,但是其中的機(jī)理你完全不懂骂租;

等等等祷杈。

②基于ARM+Linux裸機(jī)學(xué)習(xí),可以學(xué)得更深菩咨,并且更貼合后續(xù)的Linux學(xué)習(xí)吠式。

實(shí)際上它就是Linux下的單片機(jī)學(xué)習(xí),只是一切更加原始:所有的代碼需要你自己來編寫抽米;哪些文件加入工程特占,需要你自己來管理。在工作中云茸,我們當(dāng)然傾向于使用Windows下更便利的工具是目,但是在學(xué)習(xí)階段,我們更想學(xué)習(xí)到程序的本質(zhì)标捺。一切從零編寫代碼懊纳、管理代碼,可以讓我們學(xué)習(xí)到更多知識:

你需要了解芯片的上電啟動過程亡容,知道第1條代碼如何運(yùn)行嗤疯;

你需要掌握怎么把程序從Flash上讀入內(nèi)存;

需要理解內(nèi)存怎么規(guī)劃使用闺兢,比如棧在哪茂缚,堆在哪;

需要理解代碼重定位屋谭;

需要知道中斷發(fā)生后脚囊,軟硬件怎么保護(hù)現(xiàn)場、跳到中斷入口桐磁、調(diào)用中斷程序悔耘、恢復(fù)現(xiàn)場;

你會知道我擂,main函數(shù)不是我們編寫的第1個函數(shù)衬以;

你會知道缓艳,芯片從上電開始,程序是怎么被搬運(yùn)執(zhí)行的泄鹏;

你會知道郎任,函數(shù)調(diào)用過程中,參數(shù)是如何傳遞的备籽;

你會知道舶治,中斷發(fā)生時(shí),每一個寄存器的值都要小心對待车猬;

等等等霉猛。

你掌握了ARM+Linux的裸機(jī)開發(fā),再回去看Windows下的單片機(jī)開發(fā)珠闰,會驚呼:怎么那么簡單惜浅!并且你會完全明白這些工具沒有向你展示的技術(shù)細(xì)節(jié)。

驅(qū)動程序=Linux驅(qū)動程序軟件框架+ARM開發(fā)板硬件操作伏嗜,我們可以從簡單的裸機(jī)開發(fā)入手坛悉,先掌握硬件操作,并且還可以:

①掌握如何在PC Linux下編譯程序承绸、把程序燒錄到板子上并運(yùn)行它

②為學(xué)習(xí)bootloader打基礎(chǔ):掌握了各種硬件操作后裸影,后面一組合就是一個bootloader

為什么選擇ARM9 S3C2440開發(fā)板,而不是其他性能更好的军熏?

有一個錯誤的概念:S3C2440過時(shí)了轩猩、ARM9過時(shí)了。

這是不對的荡澎,如果你是軟件工程師均践,無論是ARM9、ARM11摩幔、A8還是A9彤委,對我們來說是沒有差別的。一款芯片或衡,上面有CPU焦影,還有眾多的片上設(shè)備(比如UART、USB薇宠、LCD控制器)偷办。我們寫程序時(shí)艰额,并不涉及CPU澄港,只是去操作那些片上設(shè)備。

所以:差別在于片上設(shè)備柄沮,不在于CPU核回梧;差別在于寄存器操作不一樣废岂。

因?yàn)槲覀儗戲?qū)動并不涉及CPU的核心,只是操作CPU之外的設(shè)備狱意,只是讀寫這些設(shè)備的寄存器湖苞。之所以推薦S3C2440,是因?yàn)樗腖inux學(xué)習(xí)資料最豐富详囤,并有配套的第1财骨、2期視頻。

怎么學(xué)習(xí)ARM+Linux的裸機(jī)開發(fā)

學(xué)習(xí)裸機(jī)開發(fā)的目的有兩個:

①掌握裸機(jī)程序的結(jié)構(gòu)藏姐,為后續(xù)的u-boot作準(zhǔn)備

②練習(xí)硬件知識隆箩,即:怎么看原理圖、芯片手冊羔杨,怎么寫代碼來操作硬件

后面的u-boot可以認(rèn)為是裸機(jī)程序的集合捌臊,我們在裸機(jī)開發(fā)中逐個掌握各個部件,再集合起來就可以得到一個u-boot了兜材。后續(xù)的驅(qū)動開發(fā)理澎,也涉及硬件操作,你可以在裸機(jī)開發(fā)中學(xué)習(xí)硬件知識曙寡。

注意:如果你并不關(guān)心裸機(jī)的程序結(jié)構(gòu)糠爬,不關(guān)心bootloader的實(shí)現(xiàn),這部分是可以先略過的卵皂。在后面的驅(qū)動視頻中秩铆,我們也會重新講解所涉及的硬件知識。

推薦兩本書:杜春蕾的《ARM體系結(jié)構(gòu)與編程》灯变,韋東山的《嵌入式Linux應(yīng)用開發(fā)完全手冊》殴玛。后者也許是國內(nèi)第1本涉及在PC Linux環(huán)境下開發(fā)的ARM裸機(jī)程序的書,如果我說錯了添祸,請?jiān)徫視x得少滚粟。

對于裸機(jī)開發(fā),我們提供有2部分視頻:

①環(huán)境搭建

第0課第1節(jié)_剛接觸開發(fā)板之接口接線.wmv

第0課第2節(jié)_剛接觸開發(fā)板之燒寫裸板程序.wmv

第0課第3節(jié)_剛接觸開發(fā)板之重?zé)麄€系統(tǒng).wmv

第0課第4節(jié)_剛接觸開發(fā)板之使用vmware和預(yù)先做好的ubuntu.wmv

第0課第5節(jié)_剛接觸開發(fā)板之u-boot打補(bǔ)丁編譯使用及建sourceinsight工程.wmv

第0課第6節(jié)_剛接觸開發(fā)板之內(nèi)核u-boot打補(bǔ)丁編譯使用及建sourceinsight工程.wmv

第0課第7節(jié)_剛接觸開發(fā)板之制作根文件系統(tǒng)及初試驅(qū)動.wmv

第0課第8節(jié)_在TQ2440,MINI2440上搭建視頻所用系統(tǒng).wmv

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

②裸機(jī)程序開發(fā)

第1課 環(huán)境搭建及工具刃泌、概念介紹.wmv

第2課GPIO實(shí)驗(yàn).wmv

第3課 存儲管理器實(shí)驗(yàn).wmv

第4課MMU實(shí)驗(yàn).wmv

第5課NAND FLASH控制器.wmv

第6課 中斷控制器.wmv

第7課 系統(tǒng)時(shí)鐘和UART實(shí)驗(yàn).wmv

第8課LCD實(shí)驗(yàn).wmv

要聲明的是:

錄制上述《裸機(jī)程序開發(fā)》視頻時(shí)凡壤,本意是結(jié)合《嵌入式Linux應(yīng)用開發(fā)完全手冊》的《第2篇ARM9嵌入式系統(tǒng)基礎(chǔ)實(shí)例篇》來講解,所以視頻里沒有完全從零編寫代碼耙替,需要結(jié)合書本來學(xué)習(xí)亚侠。

①書和視頻并不是完全配套的,不要照搬俗扇,其中的差異并不難解決硝烂。

《嵌入式Linux應(yīng)用開發(fā)完全手冊》發(fā)表于2008年,使用了很多款開發(fā)板铜幽,并且那時(shí)的開發(fā)板配置較低(Nand Flash是64M)滞谢;《裸機(jī)程序開發(fā)》視頻使用JZ2440開發(fā)板錄制串稀。

②書和視頻,適用于所有S3C2440開發(fā)板狮杨,包括mini2440母截、tq2440等

天下S3C2440配置都是相似的,基本也就是LED橄教、按鍵所用引腳不同清寇,LCD型號不同;你學(xué)習(xí)了書护蝶、視頻颗管,如果連這些差異都搞不定的話,那就是你我的失敗了滓走。

學(xué)習(xí)方法是這樣的:

①先看《環(huán)境搭建》視頻來搭建開發(fā)環(huán)境

②書(第2篇)和視頻(裸機(jī)程序開發(fā))結(jié)合垦江,看完一章,練習(xí)一章

一定要編寫代碼搅方,即使是照抄也要寫比吭。

③如果對于ARM架構(gòu)相關(guān)的知識,覺得模糊或是想了解得更深入姨涡,參考《ARM體系結(jié)構(gòu)與編程》

學(xué)習(xí)程度:

①理解一個裸機(jī)程序的必要結(jié)構(gòu):異常向量衩藤、硬件初始化、代碼重定位涛漂、棧

②知道如何操作GPIO赏表、Flash、LCD匈仗、觸摸屏等硬件

③很多人覺得MMU難以理解瓢剿,可以放過它

bootloader的學(xué)習(xí)

bootloader有很多種,vivi悠轩、u-boot等等间狂,最常用的是u-boot。

u-boot功能強(qiáng)大火架、源碼比較多鉴象,對于編程經(jīng)驗(yàn)不豐富、閱讀代碼經(jīng)驗(yàn)不豐富的人何鸡,一開始可能會覺得難以掌握纺弊。但是,u-boot的主要功能就是:啟動內(nèi)核骡男。它涉及:讀取內(nèi)核到內(nèi)存淆游、設(shè)置啟動參數(shù)、啟動內(nèi)核。按照這個主線稽犁,我們嘗試自己從零編寫一個bootloader,這個程序相對簡單骚亿,可以讓我們快速理解u-boot主要功能的實(shí)現(xiàn)已亥。

從零編寫bootloader的視頻有:

畢業(yè)班第1課第1.1節(jié)_自己寫bootloader之編寫第1階段.wmv

畢業(yè)班第1課第1.2節(jié)_自己寫bootloader之編寫第2階段.wmv

畢業(yè)班第1課第2節(jié)_自己寫bootloader之編譯測試.wmv

畢業(yè)班第1課第3節(jié)_自己寫bootloader之改進(jìn).wmv

分析u-boot 1.1.6的視頻有:

第9課第1節(jié)u-boot分析之編譯體驗(yàn).wmv

第9課第2節(jié)u-boot分析之Makefile結(jié)構(gòu)分析.wmv

第9課第3節(jié)u-boot分析之源碼第1階段.wmv

第9課第3節(jié)u-boot分析之源碼第2階段.wmv

第9課第4節(jié)u-boot分析之u-boot命令實(shí)現(xiàn).wmv

第9課第5節(jié)u-boot分析_uboot啟動內(nèi)核.wmv

移植一個全新u-boot的視頻有:

畢業(yè)班第2課第1節(jié)_移植最新u-boot之初試.wmv

畢業(yè)班第2課第2.1節(jié)_移植最新u-boot之分析啟動過程之概述.wmv

畢業(yè)班第2課第2.2節(jié)_移植最新u-boot之分析啟動過程之內(nèi)存分布.wmv

畢業(yè)班第2課第2.3節(jié)_移植最新u-boot之分析啟動過程之重定位.wmv

畢業(yè)班第2課第3.1節(jié)_移植最新u-boot之修改代碼之建新板_時(shí)鐘_SDRAM_UART.wmv

畢業(yè)班第2課第3.2節(jié)_移植最新u-boot之修改代碼支持NAND啟動.wmv

畢業(yè)班第2課第3.3節(jié)_移植最新u-boot之修改代碼支持NorFlash.wmv

畢業(yè)班第2課第3.4節(jié)_移植最新u-boot之修改代碼支持NandFlash.wmv

畢業(yè)班第2課第3.5節(jié)_移植最新u-boot之修改代碼支持DM9000網(wǎng)卡.wmv

畢業(yè)班第2課第4.1節(jié)_移植最新u-boot之裁剪和修改默認(rèn)參數(shù).wmv

畢業(yè)班第2課第4.2節(jié)_移植最新u-boot支持燒寫yaffs映象及制作補(bǔ)丁.wmv

《嵌入式Linux應(yīng)用開發(fā)完全手冊》上對u-boot的講解有如下章節(jié):

15.1Bootloader簡介

15.1.1Bootloader的概念

15.1.2Bootloader的結(jié)構(gòu)和啟動過程

15.1.3常用Bootloader介紹

15.2U-Boot分析與移植

15.2.1 U-Boot工程簡介

15.2.2 U-Boot源碼結(jié)構(gòu)

15.2.3 U-Boot的配置、編譯来屠、連接過程

15.2.4 U-Boot的啟動過程源碼分析

15.2.5 U-Boot的移植

15.2.6 U-Boot的常用命令

15.2.7使用U-Boot來執(zhí)行程序

學(xué)習(xí)方法如下:

①先學(xué)習(xí)《從零編寫bootloader的視頻》虑椎,這可以從最少的代碼理解bootloader的主要功能

②再看書上對u-boot的講解,并結(jié)合《分析u-boot 1.1.6的視頻》來理解

③最后俱笛,有時(shí)間有興趣的話捆姜,看《移植一個全新u-boot的視頻》,這不是必須的迎膜。

學(xué)習(xí)程度:

①理解u-boot的啟動過程泥技,特別是u-boot代碼重定位:怎么從Flash上把自己讀入內(nèi)存

②理解u-boot的核心:命令

③知道bootloader如何給內(nèi)核傳遞參數(shù)

④知道bootloader是根據(jù)“bootcmd”指定的命令啟動內(nèi)核

⑤作為入門:只求理解,不要求能移植u-boot

Linux內(nèi)核的學(xué)習(xí)

前面說過磕仅,內(nèi)核本身不是我們學(xué)習(xí)的重點(diǎn)珊豹,但是了解一下內(nèi)核的啟動過程,還是很有必要的:工作中有可能要修改內(nèi)核以適配硬件榕订,掌握了啟動過程才知道去修改哪些文件店茶。

分析內(nèi)核的視頻有:

第10課第1節(jié) 內(nèi)核啟動流程分析之編譯體驗(yàn).wmv

第10課第2節(jié) 內(nèi)核啟動流程分析之配置.wmv

第10課第3節(jié) 內(nèi)核啟動流程分析之Makefile.wmv

第10課第4節(jié) 內(nèi)核啟動流程分析之內(nèi)核啟動.wmv

移植內(nèi)核的視頻有:

業(yè)班第3課第1節(jié)_移植3.4.2內(nèi)核之框架介紹及簡單修改.wmv

畢業(yè)班第3課第2節(jié)_移植3.4.2內(nèi)核之修改分區(qū)及制作根文件系統(tǒng).wmv

畢業(yè)班第3課第3節(jié)_移植3.4.2內(nèi)核之支持yaffs文件系統(tǒng).wmv

畢業(yè)班第3課第4節(jié)_移植3.4.2內(nèi)核之裁剪及ECC簡介及制作補(bǔ)丁.wmv

《嵌入式Linux應(yīng)用開發(fā)完全手冊》上對內(nèi)核的講解有如下章節(jié):

16.1Linux版本及特點(diǎn)

16.2Linux移植準(zhǔn)備

16.2.1獲取內(nèi)核源碼

16.2.2內(nèi)核源碼結(jié)構(gòu)及Makefile分析

16.2.3內(nèi)核的Kconfig分析

16.2.4Linux內(nèi)核配置選項(xiàng)

16.3Linux內(nèi)核移植

16.3.1Linux內(nèi)核啟動過程概述

16.3.2修改內(nèi)核以支持S3C2410/S3C2440開發(fā)板

16.3.3修改MTD分區(qū)

16.3.4移植YAFFS文件系統(tǒng)

16.3.5編譯、燒寫劫恒、啟動內(nèi)核

學(xué)習(xí)方法如下:

①先看書贩幻,并結(jié)合《分析內(nèi)核的視頻》進(jìn)行理解

②如果有興趣,再根據(jù)《移植內(nèi)核的視頻》自己掌握移植內(nèi)核两嘴,這不是必須的

學(xué)習(xí)程度:

①知道機(jī)器ID的作用丛楚,根據(jù)機(jī)器ID找到單板對應(yīng)的文件

②知道Makefile、Kconfig的作用憔辫,知道怎么簡單地配置內(nèi)核

③知道怎么修改分區(qū)

④作為入門:只求理解鸯檬,不要求能移植

根文件系統(tǒng)

在驅(qū)動程序開發(fā)階段,我們喜歡搭建一個最小根文件系統(tǒng)來調(diào)試驅(qū)動螺垢;

在開發(fā)應(yīng)用程序時(shí)喧务,也需要搭建文件系統(tǒng),把各種庫枉圃、配置文件放進(jìn)去功茴;

在發(fā)布產(chǎn)品時(shí),你還需要修改配置文件孽亲,使得產(chǎn)品可以自動運(yùn)行程序坎穿;

甚至你想實(shí)現(xiàn)插上U盤后自動啟動某個程序,這也要要修改配置文件;

這一切玲昧,都需要你理解根文件系統(tǒng)的構(gòu)成栖茉,理解內(nèi)核啟動后是根據(jù)什么配置文件來啟動哪些應(yīng)用程序。

分析根文件系統(tǒng)的視頻有:

第11課第1節(jié) 構(gòu)建根文件系統(tǒng)之啟動第1個程序.wmv

第11課第2節(jié) 構(gòu)建根文件系統(tǒng)之init進(jìn)程分析.wmv

第11課第3節(jié) 構(gòu)建根文件系統(tǒng)之busybox.wmv

第11課第4節(jié) 構(gòu)建根文件系統(tǒng)之構(gòu)建根文件系統(tǒng).wmv

《嵌入式Linux應(yīng)用開發(fā)完全手冊》上對文件系統(tǒng)的講解有如下章節(jié):

17.1Linux文件系統(tǒng)概述

17.1.1Linux文件系統(tǒng)的特點(diǎn)

17.1.2Linux根文件系統(tǒng)目錄結(jié)構(gòu)

17.1.3Linux文件屬性介紹

17.2移植Busybox

17.2.1Busybox概述

17.2.2init進(jìn)程介紹及用戶程序啟動過程

17.2.3編譯/安裝Busybox

17.3使用glibc庫

17.3.1glibc庫的組成

17.3.2安裝glibc庫

17.4構(gòu)建根文件系統(tǒng)

17.4.1構(gòu)建etc目錄

17.4.2構(gòu)建dev目錄

17.4.3構(gòu)建其他目錄

17.4.4制作/使用yaffs文件系統(tǒng)映象文件

17.4.5制作/使用jffs2文件系統(tǒng)映象文件

學(xué)習(xí)方法:結(jié)合書和視頻學(xué)習(xí)孵延。

學(xué)習(xí)程度:

①理解配置文件的作用

②知道根文件系統(tǒng)中l(wèi)ib里的文件來自哪里

③可以制作吕漂、燒寫文件系統(tǒng)映象文件

驅(qū)動程序的學(xué)習(xí)

《嵌入式Linux應(yīng)用開發(fā)完全手冊》對驅(qū)動程序的講解不多,我們推出的“韋東山Linux視頻第2期_驅(qū)動現(xiàn)場編寫調(diào)試”尘应,可以認(rèn)為完全脫離了書本惶凝。

所以,驅(qū)動程序的學(xué)習(xí)完全按照視頻來就可以了犬钢。

第2期的視頻苍鲜,對每一個驅(qū)動,先講解硬件原理玷犹,然后從零寫代碼混滔,從簡單到復(fù)雜,逐漸完善它的功能歹颓。我們不會羅列專業(yè)術(shù)語遍坟,會參考日常生活的例子,力爭用最形象的比喻讓你輕松入門晴股,同時(shí)又會很深入愿伴。

注意:我們可以讓你入門時(shí)很輕松,但是要深入理解的話电湘,這需要你跟著視頻練習(xí)代碼隔节,這是個要慢慢思考的過程,不會輕松寂呛。

輕松的話怎诫,憑什么拿高工資?

再次申明:即使照抄也要寫代碼贷痪!很多人視頻看得很高興幻妓,但是寫代碼時(shí)就傻了。

經(jīng)典字符設(shè)備驅(qū)動程序

視頻中以LED劫拢、按鍵驅(qū)動為例肉津,講解并練習(xí)開發(fā)過程中碰到的機(jī)制:查詢、休眠-喚醒舱沧、中斷妹沙、異步通知、poll熟吏、同步距糖、互斥等等玄窝。后續(xù)更復(fù)雜的驅(qū)動程序,就是在這些機(jī)制的基礎(chǔ)上悍引,根據(jù)硬件特性設(shè)計(jì)出精巧的軟件框架恩脂。相關(guān)的視頻有(文件名中帶“_P”的屬于第2期加密視頻):

第12課第1節(jié)字符設(shè)備驅(qū)動程序之概念介紹.wmv

第12課第2.1節(jié) 字符設(shè)備驅(qū)動程序之LED驅(qū)動程序_編寫編譯.wmv

第12課第2.2節(jié) 字符設(shè)備驅(qū)動程序之LED驅(qū)動程序_測試改進(jìn).wmv

第12課第2.3節(jié) 字符設(shè)備驅(qū)動程序之LED驅(qū)動程序_操作LED.wmv

第12課第3節(jié)字符設(shè)備驅(qū)動程序之查詢方式的按鍵驅(qū)動程序.wmv

第12課第4.1節(jié) 字符設(shè)備驅(qū)動程序之中斷方式的按鍵驅(qū)動_Linux異常處理結(jié)構(gòu).wmv

第12課第4.2節(jié) 字符設(shè)備驅(qū)動程序之中斷方式的按鍵驅(qū)動_Linux中斷處理結(jié)構(gòu).wmv

第12課第4.3節(jié) 字符設(shè)備驅(qū)動程序之中斷方式的按鍵驅(qū)動_編寫代碼.wmv

第12課第5節(jié)字符設(shè)備驅(qū)動程序之poll機(jī)制.wmv

第12課第6節(jié)字符設(shè)備驅(qū)動程序之異步通知.wmv

第12課第7節(jié)字符設(shè)備驅(qū)動程序之同步互斥阻塞.wmv

第12課第8節(jié)字符設(shè)備驅(qū)動程序之定時(shí)器防抖動_P.wmv

第13課第1節(jié)輸入子系統(tǒng)概念介紹_P.wmv

第13課第2節(jié)輸入子系統(tǒng)第編寫驅(qū)動程序_P.wmv

《嵌入式Linux應(yīng)用開發(fā)完全手冊》上對字符設(shè)備驅(qū)動程序的講解有如下章節(jié):

第19章字符設(shè)備驅(qū)動程序

19.1Linux驅(qū)動程序開發(fā)概述

19.1.1應(yīng)用程序、庫趣斤、內(nèi)核俩块、驅(qū)動程序的關(guān)系

19.1.2Linux驅(qū)動程序的分類和開發(fā)步驟

19.1.3驅(qū)動程序的加載和卸載

19.2字符設(shè)備驅(qū)動程序開發(fā)

19.2.1字符設(shè)備驅(qū)動程序中重要的數(shù)據(jù)結(jié)構(gòu)和函數(shù)

19.2.2LED驅(qū)動程序源碼分析

第20章Linux異常處理體系結(jié)構(gòu)

20.1Linux異常處理體系結(jié)構(gòu)概述

20.1.1Linux異常處理的層次結(jié)構(gòu)

20.1.2常見的異常

20.2Linux中斷處理體系結(jié)構(gòu)

20.2.1中斷處理體系結(jié)構(gòu)的初始化

20.2.2用戶注冊中斷處理函數(shù)的過程

20.2.3中斷的處理過程

20.2.4卸載中斷處理函數(shù)

20.3使用中斷的驅(qū)動程序示例

20.3.1按鍵驅(qū)動程序源碼分析

20.3.2測試程序情景分析

學(xué)習(xí)方法:

①沿著數(shù)據(jù)流向,從應(yīng)用程序的對驅(qū)動程序的使用進(jìn)行情景分析唬渗。

所謂情景分析,就是假設(shè)應(yīng)用程序發(fā)起某個操作奋渔,你去分析其中的運(yùn)作過程镊逝。比如應(yīng)用程序調(diào)用open、read嫉鲸、ioctl等操作時(shí)涉及驅(qū)動的哪些函數(shù)調(diào)用撑蒜。你要思考一個問題:一個應(yīng)用程序,怎么獲得按鍵信息玄渗,怎么去控制LED座菠。把其中數(shù)據(jù)的流向弄清楚了,對字符驅(qū)動程序也就基本理解了藤树。

②學(xué)習(xí)異常和中斷時(shí)浴滴,可以結(jié)合書和視頻;對于驅(qū)動程序中其他內(nèi)容的學(xué)習(xí)岁钓,可以不看書升略。

工作中各類驅(qū)動程序

我們的視頻中講解的驅(qū)動程序非常多,目的有二:

①在你工作中遇到同類驅(qū)動時(shí)提供借鑒

②供你學(xué)習(xí)屡限、練習(xí)品嚣,煅煉閱讀驅(qū)動程序的“語感”,提升編寫程序的能力钧大,增加調(diào)試經(jīng)驗(yàn)

我們還打算擴(kuò)充驅(qū)動視頻翰撑,把它打造成“Linux驅(qū)動程序大全”視頻,基本上都會采取從零現(xiàn)場編寫的方式啊央。也許有人說:在工作中我們基本上只是移植眶诈、修改驅(qū)動而已,很少從頭編寫瓜饥。這話沒錯册养,但是能修改的前提是理解;想更好地理解压固,最好的方法是從零寫一個出來球拦。在學(xué)習(xí)階段,不要怕耗費(fèi)太多時(shí)間,從零開始編寫坎炼,慢慢完善它愧膀,在這過程中你既理解了這個驅(qū)動,也煅煉了能力谣光,做到觸類旁通檩淋。

如果有時(shí)間,建議你學(xué)完這些所有的視頻萄金,直到你自認(rèn)為:

①給你一個新板蟀悦,你可以很快實(shí)現(xiàn)相關(guān)驅(qū)動

②給你一個新硬件,你可以很快給它編寫/移植驅(qū)動氧敢。

我們錄制的視頻很多日戈,下面只羅列到“課”,不羅列到“節(jié)”孙乖。

第2期視頻:

第14課 驅(qū)動程序分層分離概念_總線驅(qū)動設(shè)備模型

第15課LCD驅(qū)動程序

第16課 觸摸屏驅(qū)動程序

第17課USB驅(qū)動程序

第18課 塊設(shè)備驅(qū)動程序

第19課NAND FLASH驅(qū)動程序

第20課NOR FLASH驅(qū)動程序

第21課 網(wǎng)卡驅(qū)動程序

第22課 移植DM9000C驅(qū)動程序

第23課I2C設(shè)備裸板程序

第24課I2C驅(qū)動程序(不看此課浙炼,看第32課,第32課講得更好)

第26課 聲卡驅(qū)動程序(不看此課唯袄,看第3期的ALSA驅(qū)動弯屈,那講得更好)

第27課DMA驅(qū)動程序

第28課hotplug_uevent機(jī)制

第32課3.4.2內(nèi)核下的I2C驅(qū)動程序

第3期的驅(qū)動視頻:

攝像頭驅(qū)動_虛擬驅(qū)動vivi

攝像頭驅(qū)動_USB攝像頭

攝像頭驅(qū)動_CMOS攝像頭

WIFI網(wǎng)卡驅(qū)動程序移植

3G網(wǎng)卡驅(qū)動程序移植

ALSA聲卡驅(qū)動程序

學(xué)習(xí)方法:

①再次強(qiáng)調(diào),不能光看不練:一定要寫程序恋拷,即使照抄也得寫

②必學(xué):LCD资厉、觸摸屏、NAND Flash蔬顾、Nor

Flash酌住、hotplug_uevent機(jī)制

③學(xué)完之后,強(qiáng)烈建議換一個不同的開發(fā)板阎抒,嘗試在新板上寫驅(qū)動程序酪我。

按視頻學(xué)習(xí)會一切順利,很多問題你可能沒想到且叁、沒想通都哭,換一個新板會讓你真正掌握。

調(diào)試方法

有一種說法逞带,程序是三分寫七分調(diào)欺矫,我們從操作系統(tǒng)的角度提供了一些很有用的調(diào)試方法。

相關(guān)的視頻有:

第29課第1節(jié)_裸板調(diào)試之點(diǎn)燈法_P.wmv

第29課第2節(jié)_裸板調(diào)試之串口打印及棧初步分析_P.wmv

第29課第3.1節(jié)_裸板調(diào)試之JTAG原理_P.wmv

第29課第3.2節(jié)_裸板調(diào)試之JTAG調(diào)試體驗(yàn)_P.wmv

第29課第3.3節(jié)_裸板調(diào)試之JTAG調(diào)試命令行調(diào)試_P.wmv

第29課第3.4節(jié)_裸板調(diào)試之JTAG調(diào)試源碼級調(diào)試_P.wmv

第30課第1.1節(jié)_驅(qū)動調(diào)試之printk的原理_P.wmv

第30課第1.2節(jié)_驅(qū)動調(diào)試之printk的使用_P.wmv

第30課第1.3節(jié)_驅(qū)動調(diào)試之打印到proc虛擬文件_P.wmv

第30課第2.1節(jié)_驅(qū)動調(diào)試之段錯誤分析_根據(jù)pc值確定出錯的代碼位置_P.wmv

第30課第2.2節(jié)_驅(qū)動調(diào)試之段錯誤分析_根據(jù)棧信息確定函數(shù)調(diào)用過程_P.wmv

第30課第3節(jié)_驅(qū)動調(diào)試之自制工具_(dá)寄存器編輯器_P.wmv

第30課第4節(jié)_驅(qū)動調(diào)試之修改系統(tǒng)時(shí)鐘中斷定位系統(tǒng)僵死問題_P.wmv

第31課第1節(jié)_應(yīng)用調(diào)試之使用strace命令跟蹤系統(tǒng)調(diào)用_P.wmv

第31課第2節(jié)_應(yīng)用調(diào)試之使用gdb和gdbserver_P.wmv

第31課第3節(jié)_配置修改內(nèi)核打印用戶態(tài)段錯誤信息_P.wmv

第31課第4.1節(jié)_應(yīng)用調(diào)試之自制系統(tǒng)調(diào)用_P.wmv

第31課第4.2節(jié)_應(yīng)用調(diào)試之使用自制的系統(tǒng)調(diào)用_P.wmv

第31課第5.1節(jié)_應(yīng)用調(diào)試之輸入模擬器之設(shè)計(jì)思路_P.wmv

第31課第5.2節(jié)_應(yīng)用調(diào)試之輸入模擬器之編寫保存功能_P.wmv

第31課第5.3節(jié)_應(yīng)用調(diào)試之輸入模擬器之編寫測試模擬功能_P.wmv

Linux應(yīng)用程序的學(xué)習(xí)

對于大多數(shù)人來說展氓,第1個C程序是在Windows的Visual Studio C++(簡稱VC)上寫的穆趴,所以你們關(guān)心的也許是:嵌入式Linux應(yīng)用程序,跟VC應(yīng)用程序之間的區(qū)別:

①編譯方法不同:

在VC上點(diǎn)點(diǎn)鼠標(biāo)即可編譯遇汞,對于嵌入式Linux應(yīng)用程序未妹,我們需要“交叉編譯”:程序要在PC Linux上編譯簿废,但是運(yùn)行時(shí)要放到單板上。并且络它,它的編譯環(huán)境需要你自己搭建:解壓出工具鏈后設(shè)計(jì)PATH族檬,還要自己構(gòu)造一套Makefile系統(tǒng)。

②調(diào)試方法不同:

在VC上點(diǎn)點(diǎn)鼠標(biāo)就可以調(diào)試化戳,對于嵌入式Linux應(yīng)用程序单料,你可以更喜歡用打印点楼;或是在PC Linux上通過GDB觀察應(yīng)用程序在單板上的運(yùn)行狀況扫尖。

③可用的資源不同:

對于VC程序,你可以直接使用微軟公司提供的各種類庫掠廓;對于嵌入式Linux應(yīng)用程序换怖,很多時(shí)候需要去尋找、下載却盘、編譯狰域、使用開源庫媳拴。

④功能不同:

VC程序運(yùn)行在PC上黄橘,一般是用來解決某些純軟件的問題,比如整理數(shù)據(jù)屈溉、修圖塞关、聯(lián)網(wǎng)播放音樂之類。嵌入式Linux應(yīng)用程序一般都要操作若干種硬件子巾,比如監(jiān)控設(shè)備中要操作攝像頭帆赢、存儲音視頻,無人機(jī)中要操作GPS线梗、螺旋槳椰于,POS機(jī)中要操作銀行卡等等。它跟單板上的硬件聯(lián)系很大仪搔,很多時(shí)候需要你懂點(diǎn)硬件知識瘾婿,至少是知道怎么通過驅(qū)動程序來操作這些

硬件。

上述4點(diǎn)的不同烤咧,花很少的時(shí)間就可以掌握偏陪。

如果你有志于開發(fā)應(yīng)用程序,那么一定要有算法煮嫌、數(shù)據(jù)結(jié)構(gòu)笛谦、網(wǎng)絡(luò)編程等基礎(chǔ),然后再掌握一些設(shè)計(jì)模式昌阿,最后就是多參加一些實(shí)際項(xiàng)目的開發(fā)了饥脑。

基于我們提供的視頻恳邀,你可以這樣學(xué)習(xí):

①先掌握第1期講解的根文件系統(tǒng):

在后續(xù)學(xué)習(xí)中你會經(jīng)常構(gòu)建根文件系統(tǒng),比如往里面添加庫好啰、修改配置文件讓你的程序自動運(yùn)行轩娶。

②掌握怎么編譯、燒寫u-boot框往、內(nèi)核:

在實(shí)際工作中鳄抒,一般來說不需要你去燒寫u-boot、內(nèi)核椰弊,但是在自學(xué)階段還是自己掌握吧许溅,免得去麻煩別人。按開發(fā)板手冊即可操作秉版,你甚至不用管里面的原理贤重。

③掌握Makefile:

可以看如下第3期視頻,以后編譯程序時(shí)只要執(zhí)行make命令即可:

第1課第4節(jié)_數(shù)碼相框_編寫通用的Makefile

④學(xué)習(xí)第1個項(xiàng)目:數(shù)碼相框

該項(xiàng)目不使用任何開源的GUI項(xiàng)目清焕,完全是自己構(gòu)建一套GUI系統(tǒng)并蝗,實(shí)現(xiàn)了文件瀏覽、文件顯示(文本和圖片)秸妥、圖片操作(放大滚停、縮小、自動播放)等功能粥惧;涉及網(wǎng)絡(luò)編程键畴、多線程編程、開源庫使用等等突雪。

雖然數(shù)碼相框作為一個產(chǎn)品已經(jīng)落伍了起惕,但是該項(xiàng)目所涉及的技術(shù),特別是以面向?qū)ο蟮木幊趟枷朐O(shè)計(jì)出一個模塊化的咏删、易擴(kuò)展的系統(tǒng)惹想,非常適合沒有大型項(xiàng)目開發(fā)經(jīng)驗(yàn)的人。很多同學(xué)督函,都是根據(jù)該項(xiàng)目所教會的編程思想找到了心怡的工作嘀粱。

第3期視頻取名為“項(xiàng)目開發(fā)”,而非“應(yīng)用開發(fā)”侨核,它的第2草穆、3個項(xiàng)目跟內(nèi)核、驅(qū)動耦合很大搓译。如果只關(guān)心應(yīng)用開發(fā)悲柱,或是急于找一份工作,可以先看第1個項(xiàng)目些己。

第2個項(xiàng)目涉及攝像頭豌鸡、ALSA聲卡嘿般、WIFI網(wǎng)卡、3G網(wǎng)卡涯冠,這些都是在實(shí)際工作過程中經(jīng)常用到的設(shè)備炉奴,比如我們后面補(bǔ)充的QQ物聯(lián)就用到攝像頭、聲卡蛇更、WIFI網(wǎng)卡瞻赶。

第3個項(xiàng)目是電源管理,講解怎么講你的單板休眠以省電

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末派任,一起剝皮案震驚了整個濱河市砸逊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掌逛,老刑警劉巖师逸,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異豆混,居然都是意外死亡篓像,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門皿伺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來员辩,“玉大人,你說我怎么就攤上這事心傀∏担” “怎么了拆讯?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵脂男,是天一觀的道長。 經(jīng)常有香客問我种呐,道長宰翅,這世上最難降的妖魔是什么却特? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任霎冯,我火速辦了婚禮室谚,結(jié)果婚禮上香到,老公的妹妹穿的比我還像新娘疑苔。我一直安慰自己蛇数,他們只是感情好松捉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布栅屏。 她就那樣靜靜地躺著啸箫,像睡著了一般耸彪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忘苛,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天蝉娜,我揣著相機(jī)與錄音唱较,去河邊找鬼。 笑死召川,一個胖子當(dāng)著我的面吹牛南缓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荧呐,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼汉形,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了倍阐?” 一聲冷哼從身側(cè)響起获雕,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎收捣,沒想到半個月后届案,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡罢艾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年楣颠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咐蚯。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡童漩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出春锋,到底是詐尸還是另有隱情矫膨,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布期奔,位于F島的核電站侧馅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏呐萌。R本人自食惡果不足惜馁痴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肺孤。 院中可真熱鬧罗晕,春花似錦、人聲如沸赠堵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茫叭。三九已至酬屉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杂靶,已是汗流浹背梆惯。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工酱鸭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人垛吗。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓凹髓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親怯屉。 傳聞我的和親對象是個殘疾皇子蔚舀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 最近一直在“樂此不疲的”“根本停不下來的”通過坐享來鍛煉自己的元認(rèn)知能力。但是這兩天腦海里突然有個疑問:“坐享時(shí)注...
    Aladdin_79007閱讀 203評論 0 2
  • 正念,正向羡儿,正力礼患,正行。 念丈夫好:今天去永和學(xué)習(xí)掠归,中午因甘林朋友請客缅叠,吃了飯才回到家時(shí)才知老公還沒吃飯,他還在等...
    廖小蘭閱讀 232評論 0 0
  • 早起情況 最近早上都是在學(xué)習(xí)App后端編程虏冻,買了本很實(shí)用的工具書肤粱,在即將到來的開發(fā)任務(wù)中都很有可能會遇到,在這個之...
    Marco_Deng閱讀 1,081評論 0 0
  • 在懷妹妹的時(shí)候厨相,好多人提醒我领曼,要做好哥哥的心理建設(shè),怕妹妹的出生讓哥哥不適應(yīng)蛮穿,我也由此憂慮庶骄,看過相關(guān)二胎...
    蘭花芳香閱讀 268評論 0 0
  • 此時(shí)的我猶記“且將薪火試新茶,詩酒趁年華”绪撵,所以瓢姻,說不世故的話語祝蝠,寫不成熟的文字音诈,愿意赴一場青春之約,永不散...
    溫暖一支鹿閱讀 760評論 20 6