linux韋東山
『壹』 學嵌入式linux需要先學什麼
韋東山:6000字長文告訴你如何學習嵌入式linux
鏈接:網頁鏈接
第1章 單片機和Linux的區別
1.1 有哪些產品使用單片機或Linux
所有的電子產品,所用技術都可以認為要麼是單片機,要麼是Linux;GUI方面主要是QT/Android,它們都是運行於Linux之上的。
下面我們用類比和邏輯推導出嵌入式Linux系統的組成,沒錯,「推導」。
從上圖可以知道:
① 組成:
嵌入式Linux系統
= bootloader + linux內核 + 根文件系統(裡面含有APP)。
② bootloader:
它的目的是啟動內核,去哪等讀內核?讀到哪裡?去Flash等外設讀內核,存到內存里去。所以需要有Flash里外設的驅動能力,為了調試方便還會有網路功能。
所以,可以認為 booloader = 裸機集合,它就是一個復雜的單片機程序。
③ Linux內核
Linux內核的最主要目的是去啟動APP,APP保存在哪裡?保存在「根文件系統」里。「根文件系統」又保存在哪裡?在Flash、SD卡等設備里,甚至可能在網路上。所以Linux內核要有這些Flash、SD卡里設備的驅動能力。
不僅如此,Linux內核還有進程調度能力、內存管理等功能。
所以:Linux內核 = 驅動集合 + 進程調度 + 內存管理等。
2.3 要學習bootloader嗎
Bootloader有很多種,常用的叫作u-boot。
在實際工作中,對於u-boot基本上是修修改改,甚至不改。但是u-boot本身是很復雜的,比如為了便於調試,它支持網路功能;有些內核是保存在FAT32分區里,於是它要能解析FAT32分區,讀FAT32分區的文件。
花那麼多精力去學習u-boot,但是工作中基本用不到,這對初學者很不友善。
所以,對於初學者,我建議:理解u-boot的作用、會使用u-boot的命令,這就可以了。
如果你的工作就是修改、完善bootloader,那麼再去研究它吧。
2.4 要學習Linux內核、要學習驅動程序嗎
之前我們說過Linux內核 = 驅動集合 + 進程調度 + 內存管理等,如果要學習Linux內核,從驅動程序入手是一個好辦法。
但是人人都要學習Linux內核、人人都要學習Linux驅動嗎?顯然不是。
作為初學者,懂幾個簡單的驅動程序,有利於工作交流;理解中斷、進程、線程的概念,無論是對驅動開發、應用程序開發,都是很有好處的。
所以對於初學者,建議前期只學習這幾個驅動:LED、按鍵、中斷。
① LED驅動程序:
這是最簡單的驅動程序。
② 按鍵驅動程序:
它也比較簡單,從它引入「中斷」。
③ 中斷:
從「中斷」它可以引入:休眠-喚醒、進程/線程、POLL機制、非同步通知等概念。這些概念無論是對驅動開發,還是對應用開發,都很重要。
所以,對於初學者,我建議必須學習這幾個驅動:LED、按鍵、中斷。
入門之後,如果你想從事內核開發、驅動開發,那麼可以去鑽研幾個驅動程序(輸入系統、I2C匯流排、SPI匯流排等),掌握若干個大型驅動程序後,你對內核的套路就有所了解了,再去研究其他部分(比如進程管理、文件系統)時你會發現套路是如此通用。
攝像頭(VL42)、音效卡ALSA驅動是Linux中比較復雜的2類驅動,它們是很難的,如果工作與此相關再去研究。
2.5,要學習Linux應用程序嗎?先學一些基礎技能
要學,即使以後你只想研究內核,一些基本的應用開發編寫能力也是需要的:
① 基本設備的訪問,比如LCD、輸入設備
② 進程、線程、進程通信、線程同步與互斥
③ 休眠-喚醒、POLL機制、信號
④ 網路編程
①②③部分的知識,跟驅動有密切的關系,它們是相輔相承的。
掌握了基本驅動開發能力、基本應用開發能力之後,在工作中你就可以跟別人友好溝通了,不至於一臉懵逼。
2.6,應用程序是怎麼啟動的?要了解一下根文件系統
你辛辛苦苦寫出了應用程序,怎麼把它放到板子上,讓它開機就自動啟動?
你寫的程序,它依賴於哪些庫,這些庫放到板子上哪個目錄?
怎麼做一個可升級的系統?即使升級中途斷電了,也要保證程序至少還可以運行老的版本?
這些都需要我們了解一下根文件系統。
先了解一下init進程:它要讀取配置文件,根據配置文件啟動各個APP。
了解了init進程,你就了解了根文件系統的組成,就可以隨心所欲裁剪系統,為你的項目製作出最精簡的系統。
第3章 學習方法
3.1,先不要打破砂鍋問到底
嵌入式涉及的東西太多太雜了,如果心裡沒有主線,碰到什麼都要去研究個透徹,最終反而忘記自己要學什麼了。
嵌入式涉及硬體知識、軟體知識,軟體里涉及匯編、ARM架構、C語言、Makefile、Shell;又分為bootloader、內核、驅動、基本的APP、GUI。
比如我們會用到Makefile,了解它的基本規則,會用我們提供的Makefile就可以。
不需要深入研究那些make函數,因為在工作中都有現成的Makefile給你使用,不需要自己去編寫一套Makefile。何必花上好幾天去深入研究它呢?
比如我們會用到bootloader,難道又要花上幾個月來深入研究u-boot嗎?工作中基本不需要改u-boot,會用那幾個命令就可以。
甚至有些學員先去買本shell的書來學習shell命令,何必?我們在視頻中用到什麼命令,你不懂時再去網路一下這些命令就可以了。
不要脫離初學者的主線:應用基礎、驅動基礎。有了這2個基礎後,你想深入研究某部分時,再去花時間吧。
3.2,思路要清晰,不怕抄代碼
視頻里的代碼,請你一定要自己去寫一次、寫多次。為什麼我現在寫驅動那麼熟?我2009年在華清遠見上課時,
每次上課我都要給學生寫一次那些驅動,十幾次下來閉著眼睛都知道內核的套路了。
記不住那些函數?我也記不住,我都是去參考同類的驅動程序,這又不是閉卷考試。
但是要理清楚思路,你寫這個程序要完成什麼功能、怎麼實現這些功能?這個要弄清楚。
有了思路後再寫代碼,不知道怎麼寫?沒關系,看看視頻,看看示例,然後關閉視頻看看能否自己寫出來。
3.3,對自己的方向很了解,我只能帶你到這里了
我的專長是操作系統,是快速地帶領大家掌握一些項目開發的基礎知識。
如果你決定深入研究某方面時,我並不能帶你多久。你要去看源碼,去看這方面的專業書籍。
比如想深入鑽研內核的內存管理時,它有頁表映射(你需要閱讀ARM架構的手冊)、SLAB分配器、vmalloc/malloc實現、mmap實現、缺頁中斷、父進程子進程之間的頁面管理等等,內容非常多。有時候連書籍都沒有,你需要直接啃代碼。
當你想從事某個行業時,就需要深入研究行業相關的知識。
比如CAN匯流排,它可以寫成一本書:CAN協議、CAN報文、Socket CAN、車身網路拓撲結構,CAN應用報文,CAN網路管理報文,CAN診斷報文。
想做物聯網網關,需要深入研究MQTT,MQTT協議相對簡單,但是MQTT英文原版協議有130多頁,中文版有近100頁,是一本小書了。
每個行業都有自己的業務邏輯,在掌握基本的編程能力之一,你需要結合具體的業務去深入學習。
-☆ END ☆-
『貳』 韋東山linux視頻怎麼樣
很棒 一期的免費,很好,二期的也很棒 就是太貴,但還是很值的 再配上他的linux應用開發完全手冊這本書就更棒啦
『叄』 學習嵌入式linux,請問韋東山的視頻將的怎麼樣,他的JZ2440開發板如何,適合初學者嗎,用個的給點建議哈
根據我長期使用開發板和看多種視頻的經驗,mini2440開發板為首選,韋東山的視頻確實講的不錯,很詳細,並且可以通用於mini2440開發板,不用擔心
『肆』 嵌入式linux書籍
《鳥哥的Linux私房菜 基礎學習篇(第三版)》,鳥哥著
學習 Linux ,就要學習 Linux 的精華。而 Linux 的精華,則在於 Linux 的內核。本書以 Linux 2.6 版架構為基礎,分門別類地向初學者介紹了 Linux 內核的架構、編程思想、以及功能模塊。在本書的指導下學習,對於你讀懂 Linux 操作系統的精華部分,會取得事半功倍的效果。
『伍』 闊︿笢灞眑inux椹卞姩瀛︿範鏈夌敤鍚
鏈夌敤銆
闊︿笢灞辮茬殑闈炲父閫忓交錛岄珮娣辯殑闂棰樹粬涔熻兘閫氫織鐨勮插嚭鏉ワ紝璁╀漢瀛﹁搗鏉ヤ笉鍚冨姏銆