1. 程式人生 > >作為一個新人,怎樣學習嵌入式Linux?(轉自韋東山)

作為一個新人,怎樣學習嵌入式Linux?(轉自韋東山)

>和第1期視訊吧,別擔心,不用花錢。照著視訊把硬體相關的實驗做了,這些概念就清楚了。我還沒有發現第2套講這些概念的書或視訊,允許我盲目吹噓一回。
       對於bootloader,我學習時是先看了,然後自己寫程式把各個硬體的實驗都做了一遍,比如GPIO、時鐘、SDRAM、UART、NAND。把它們都弄清楚了,組臺在一起就很容易看懂u-boot了。總結一下,看懂硬體原理圖、看晶片手冊,這需要你自己去找資料。剩下的,就按<嵌入式Linux應用開發完全手冊>和第1期視訊的章節目錄去學習吧。

二、核心:
       想速成的人,先跨過核心的學習,直接學習怎麼寫驅動。
       想成為高手,核心必須深刻了解。注意,我說的是瞭解,我沒奢望去寫出一個核心。要對裡面的排程機制、記憶體管理機制、檔案管理機制等等有所瞭解。
推薦兩本書:
1. 通讀,請看薄的那本(浮燥的社會講求速度, 呵),
2. 選讀, 想了解哪一塊就讀哪一節

三、驅動:
       驅動包含兩部分:硬體本身的操作、驅動程式的框架。又是硬體,還是要看得懂原理圖、讀得懂晶片手冊,多練吧。
       說到驅動框架,有一些書介紹一下。LDD3,即,老外寫的那本,裡面介紹了不少概念,值得一讀。但是,它的作用也就限於介紹概念了。我基本上是入門之前用它來熟悉一下概念,入門後就扔掉了。驅動方面比較全的介紹,應該是宋寶華的了,老實說我只看過目錄,有不少人說好,這裡推薦一下。要想深入瞭解某一塊,絕對是超5星級推薦。你別指望把它讀完,1800多頁,上下兩冊呢。我是某一塊不清楚時,就去翻一下它。任何一部分,這書都可以講上2、3百頁,非常詳細。並且是以某個目標來帶你分析核心原始碼。它以linux 2.4為例,但是原理相通,同樣適用於其它版本的linux。還有沒有其他介紹?呵呵,當然有了,韋東山Linux視訊第2期。<嵌入式Linux應用開發完全手冊>裡對驅動講得不多,不夠深入。於是我錄製了這期視訊。不僅僅教你怎麼寫怎麼改驅動,還教你為什麼這樣寫這樣改驅動。每一個驅動都是現場編寫: 
      1. 用繪圖板畫圖講解──相當於學校里老師在黑板上畫圖講解,很直觀絕對不是對著PPT念。
      2. 用source insight當場寫程式,從第1行開始寫,每一課都是這樣。我講了20多個驅動,就寫了20多個程式。
      3. 寫完就編譯、測試。
      4. 很全面,字元裝置驅動、塊裝置、網絡卡驅動3大類齊全,硬體介紹、驅動框架分析、測試3大類齊全。
培訓機構裡教的內容,遠不及這期視訊豐富。我在多個培訓機構講過課,從沒看到哪個老師敢每一課都當場講解當場編寫程式碼當場測試,除我之外!也沒看到哪個培訓機構講完這些內容──因為時間不夠,講完起碼要一個月,但是這部分基本只有2周授課時間。
把你手上的開發板所涉及的硬體,都去嘗試寫一個驅動吧。有問題就先"痛苦地思考",思考的過程中你會把很多不相關的知識串聯起來,最終貫通。

四、根檔案系統:
       大家有沒有想過這2個問題:
      1. 對於Linux做出來的產品,有些用作監控、有些做手機、有些做平板。那麼核心啟動後,掛載根檔案系統後,應該啟動哪一個應用程式呢? 
      答:核心不知道也不管應該啟動哪一個使用者程式。它只啟動init這一個應用程式,它對應/sbin/init。顯然,這個應用程式就要讀取配置檔案,根據配置檔案去啟動使用者程式(監控、手冊介面、平板介面等等)這個問題提示我們,檔案系統的內容是有一些約定的,比如要有/sbin/init,要有配置檔案
      2. 你寫的hello,world程式,有沒有想過裡面用到的printf是誰實現的?
      答:這個函式不是你實現的,是庫函式實現的。它執行時,得找到庫。這個問題提示我們,檔案系統裡還要有庫。
簡單的自問自答到這裡,要想深入瞭解,可以看一下busybox的init.c,就可以知道init程序做的事情了。當然,也可以看<嵌入式Linux應用開發完全手冊>裡構建根檔案系統那章。


說一下我的學習經歷吧。
1. 我在學校時讀的是物理電子專業,其實課程裡沒有教怎麼設計電路,只是教了些電子電路方面的知識。PCB的設計是在實驗室裡自學的,只設計過2層板,現在忘記得差不多了。但是保留了看原理圖、看晶片手冊的能力。
2. 選修了軟體學位,對軟體設計挺感興趣,但是也只是學了C語言、資料庫而已。憑著興趣做了不少競賽題。沒能力去參加競賽,但是把C語言練得很紮實。
3. 在實驗室、在第1家公司,就是設計些簡單的PCI卡,寫一下windows的驅動程式
4. 在第2家公司,用51微控制器做車載電話,開始走上純軟體的道路。
5. 開始感到微控制器的不足,辭職半年閉門學Linux,從red hat怎麼操作開始。步驟就是先看,再自己寫裸板程式操作硬體,接著到分析u-boot。同時看,對LINUX框架有所瞭解。在寫裸板時,建議各位加強對中斷的理解,核心就是用中斷來完成各種功能的。
6. 分析完u-boot,就開始進行簡單的驅動程式設計了,這時候,能力還很弱。
7. 開始去中興上班,工作2年,編寫各類驅動、解決各類問題(驅動問題、幫助定位應用問題),能力得到煅煉。
總結一下:
1. 硬體方面的書: 微機原理、數位電路,高校裡的教材。畢業多年,忘名了。
2. Linux方面的書:

相關推薦

作為一個新人怎樣學習嵌入式Linux?(東山)

>和第1期視訊吧,別擔心,不用花錢。照著視訊把硬體相關的實驗做了,這些概念就清楚了。我還沒有發現第2套講這些概念的書或視訊,允許我盲目吹噓一回。        對於bootloader,我學習時是先看了,然後自己寫程式把各個硬體的實驗都做了一遍,比如GPIO、時鐘、SDRAM、UART、NAND。把它們

作為一個新人怎樣學習嵌入式Linux?(東山老師) (20

12-04-18 23:33:07)轉載▼標籤: it在學習嵌入式Linux之前,肯定要有C語言基礎。彙編基礎有沒有無所謂(就那麼幾條彙編指令,用到了一看就會)。C語言要學到什麼程度呢?越熟當然越好,不熟的話也要具備基本技能。比如寫一個數組排序、輸入數字求和什麼的。學C語言唯一的方法是多寫程式多練習,編譯出錯

新人怎樣學習嵌入式Linux

作為一個新人,怎樣學習嵌入式Linux   推廣 瞭解更多嵌入式知識請移步 100ask.taobao.com   作為一個新人,怎樣學習嵌入式Linux?被問過太多次,特寫這篇文章來回答一下。在學習嵌入式Linux之前,肯定要有C語言基礎。彙編基礎有

作為一個新手最近學習Hibernate執行出現java.lang.UnsupportedClassVersionError: org/hibernate/cfg/Configuration

錯誤如下: java.lang.UnsupportedClassVersionError: org/hibernate/cfg/Configuration : Unsupported major.minorv 百度了很多說要把Hibernate的版本換低一點,但又看到

作為一個HR說說應屆生及一兩年往屆生的注意情況。

自我介紹一下,我在某中型國企做招聘和績效方面的工作,這些都是我在這段時間所遇到的情況。 1.很多人都說自己懷才不遇,但是當你真的懷才,肯定是會被人爭搶的。技術工作如此,管理工作如此,銷售工作也如此。 2.很多人都很有傲氣傲骨,這是很好的,但是請你給別人平等的態度。我並不是說招聘者比應聘者地位高,大家都是雙

作為運營新人取標題的這10個小技巧你需要掌握

運營當我們一看到“ 標題黨 ” 這三個字,不用多說,心裏絕對都是壞的印象。一篇 shit 一樣的文章,靠一個好的標題,是可以獲得不錯的點擊量,但 內容運營 的最終目的是為了數據好看嗎?起一個好的標題確實是一個文章能否獲得關註和點擊率的關鍵,但如何在不成為“ 標題黨 ” 的前提下取 好標題呢?近日fansir

你對學習嵌入式linux開發有什麽好的意見嗎?

淩陽教育 嵌入式linux 現在,嵌入式行業的發展是比較讓人困惑的,為什麽會有此一說呢?因為現在很的嵌入式學習愛好者,大家對於學習嵌入式Linux(嵌入式Linux培訓 嵌入式Linux教程 )應用開發和學習系統開發有或者說是驅動開發,這三個方面 ?淩陽教育的老師經過調查得出了一些比較豐富的答案

10.16輸入一個字符串內有數字和非數字字符如: a123x456 17960? 302tab5876 將其中連續的數字作為一個整數依次存放到一數組num中。例如123放在num[0]中456放在num[1]中……統計共有多少個整數並輸出這些數。

tab lnp zip sm2 cuc ycm rds qt5 tft 10.16輸入一個字符串,內有數字和非數字字符,如: a123x456 17960? 302tab5876 將其中連續的數字作為一個整數,依次存放到一數組num中。例

// 如何將浮點數點左邊的數每三位添加一個逗號如12000000.11化為『12,000,000.11』?

put repl AC 浮點 0.11 cti function str pan function commafy(num){ return num && num .toString() .replace(/(\d)(?=(\d{3})

作為一個前端可以如何機智地弄壞一臺電腦?

有人說,前端的界限就在瀏覽器那兒。 無論你觸發了多少bug,最多導致瀏覽器崩潰,對系統影響不到哪去。 這就像二次元各種炫酷的毀滅世界,都不會導致三次元的世界末日。 然而,作為一個前端,我發現是有方式開啟次元大門的… 這個實驗腦洞較大,動機無聊,但某種意義上反映了一些安全問題。 想

管理感悟:作為一個主管如何解決屁股與腦袋的矛盾

  工作中,究竟是屁股決定腦袋,還是腦袋決定屁股?   從員工角度來講,希望老闆經常加工資,活安排得少,來不來上班都無所謂。   從老闆角度來說,希望員工不要工資,不吃不喝的加班。   顯然,雙方的想法都是錯誤的,所以雙方都要妥協。那麼,作為主管,究竟是屁股決定腦袋,還是腦袋決定屁股?我

作為一個初學者你瞭解java的應用範圍嗎?

你有沒有見過用Java編寫的遊戲、桌面系統、辦公軟體?如果你是一個初學者或者只是剛剛開始學習Java,你或許會疑慮,Java到底是在哪裡被運用了呢?如何正確的在現實世界中運用Java? 當你在安裝 Java 在你的桌面時會得到答案,或者 Oracle 會告訴你超過了30

作為一個前端我竟無言以對真實

1.準備下班的時候,測試又提bug過來了… 2.上線後,bug 一大堆的時候 3.發現bug是身邊這個人寫的時候 4.正在除錯,突然記憶體溢位了 5.什麼,需求又改了? 6.三個月後回看自己寫的程式碼 最後,給大家推薦一個前端全棧學習交

作為一個前端如何做聯調?

1.首先把基礎路徑放到api檔案裡面 export default { //測試環境介面地址 appid api: `http:// } 2.把測試地址放到api檔案裡 export const CONTEXT = "http://"; 3.把需要用到

前言 - 作為一個合格的軟體開發(

慎於說Yes 在沒有搞清楚開發需求、任務工作量、團隊期望值之前,100分的程式設計師不會輕易答應。特別是對於新人來說,比較急於表現自己,對於同事或者老闆的工作安排來者不拒,精神可嘉,方法不可取。承諾太多,會出現自己無法按時完成的情況,即使按時完成,也可能沒有達到別人的期望值,長期以往別人對你的失

作為一個系統都會自動產生一個不帶引數的構造方法?

首先,這個問題的答案是:錯誤。構造方法是用來建立一個例項的,或者說是建立一個物件。如果類本身沒有寫構造方法,為了讓類能擁有面向物件的能力,那麼開發工具會預設新增一個"不可見的"構造方法,其實就是無參構造方法:class Car { public void color()

如何學習嵌入式linux

作為一個嵌入式大神,怎樣學習嵌入式Linux?被問過太多次,今天就由創客學院王老師來為大家講解一下。在學習嵌入式Linux之前,肯定要有C語言基礎。彙編基礎有沒有無所謂(就那麼幾條彙編指令,用到了一看就會)。C語言要學到什麼程度呢?越熟當然越好,不熟的話也要具備基本技能。比如

一個網址單獨分離出來作為一個apk點選就可以進入該網址

package com.mediatek.mobileportal; import android.app.Activity; //import android.content.Context; import android.content.Intent; import a

關於如何學習嵌入式linux

           首先感謝powerful1大神關於如何學好嵌入式linux的介紹!         Linux和stm32 一個是軟體平臺一個是硬體平臺,完全不一樣的(記住,是平臺!)。這樣說吧,既然你喜歡微控制器,就先學stm32,把硬體基礎打牢,尤其是各種匯流

【IT觀察】作為一個DBA如何選擇資料庫

一句話對比三大資料庫軟體 這個世界上Oracle、SQL Server和MySQL三大資料庫軟體呈三足鼎立之勢,三者之間互有優缺點。網上能查到的內容我不再贅述,我把三者的優缺點對比總結成了三行文字: Oracle:最貴,功能最多,支援平臺數量較多,速度中等,開發和運維比較簡便,最安全。 SQL Ser