嵌入式linux快速入門(轉載)

image.png
從上圖能夠知道:
① 組成:嵌入式Linux系統 = bootloader + linux內核 + 根文件系統(裏面含有APP)。
② bootloader:它的目的是啓動內核,去哪讀內核?讀到哪裏?去Flash等外設讀內核,存到內存裏去。因此須要有Flash裏外設的驅動能力,爲了調試方便還會有網絡功能。因此,能夠認爲 booloader = 裸機集合,它就是一個複雜的單片機程序。
③ Linux內核Linux內核的最主要目的是去啓動APP,APP保存在哪裏?保存在「根文件系統」裏。「根文件系統」又保存在哪裏?在Flash、SD卡等設備裏,甚至可能在網絡上。因此Linux內核要有這些Flash、SD卡里設備的驅動能力。不只如此,Linux內核還有進程調度能力、內存管理等功能。
因此:Linux內核 = 驅動集合 + 進程調度 + 內存管理等。linux

一、學習bootloader

Bootloader有不少種,經常使用的叫做u-boot。
在實際工做中,對於u-boot基本上是修修改改,甚至不改。可是u-boot自己是很複雜的,好比爲了便於調試,它支持網絡功能;有些內核是保存在FAT32分區裏,因而它要能解析FAT32分區,讀FAT32分區的文件。花那麼多精力去學習u-boot,可是工做中基本用不到,這對初學者很不友善。因此,對於初學者,我建議:理解u-boot的做用、會使用u-boot的命令,這就能夠了。若是你的工做就是修改、完善bootloader,那麼再去研究它吧。編程

二、學習Linux內核、要學習驅動程序嗎

以前咱們說過Linux內核 = 驅動集合 + 進程調度 + 內存管理等,若是要學習Linux內核,從驅動程序入手是一個好辦法。
可是人人都要學習Linux內核、人人都要學習Linux驅動嗎?顯然不是。
做爲初學者,懂幾個簡單的驅動程序,有利於工做交流;理解中斷、進程、線程的概念,不管是對驅動開發、應用程序開發,都是頗有好處的。網絡

因此對於初學者,建議前期只學習這幾個驅動:LED、按鍵、中斷。
① LED驅動程序:這是最簡單的驅動程序。
② 按鍵驅動程序:它也比較簡單,從它引入「中斷」。
③ 中斷:從「中斷」它能夠引入:休眠-喚醒、進程/線程、POLL機制、異步通知等概念。這些概念不管是對驅動開發,仍是對應用開發,都很重要。因此,對於初學者,我建議必須學習這幾個驅動:LED、按鍵、中斷。異步

入門以後,若是你想從事內核開發、驅動開發,那麼能夠去鑽研幾個驅動程序(輸入系統、I2C總線、SPI總線等),掌握若干個大型驅動程序後,你對內核的套路就有所瞭解了,再去研究其餘部分(好比進程管理、文件系統)時你會發現套路是如此通用。攝像頭(VL42)、聲卡ALSA驅動是Linux中比較複雜的2類驅動,它們是很難的,若是工做與此相關再去研究。學習

三、 學習Linux應用程序嗎?

要學,即便之後你只想研究內核,一些基本的應用開發編寫能力也是須要的:
① 基本設備的訪問,好比LCD、輸入設備
② 進程、線程、進程通訊、線程同步與互斥
③ 休眠-喚醒、POLL機制、信號
④ 網絡編程 ①②③部分的知識,跟驅動有密切的關係,它們是相輔相承的。掌握了基本驅動開發能力、基本應用開發能力以後,在工做中你就能夠跟別人友好溝通了,不至於一臉懵逼。spa

四、學習根文件系統

固然,根文件系統關乎着應用程序的運行,你辛辛苦苦寫出了應用程序,怎麼把它放到板子上,讓它開機就自動啓動?
你寫的程序,它依賴於哪些庫,這些庫放到板子上哪一個目錄?
怎麼作一個可升級的系統?即便升級中途斷電了,也要保證程序至少還能夠運行老的版本?
這些都須要咱們瞭解一下根文件系統。
先了解一下init進程:它要讀取配置文件,根據配置文件啓動各個APP。瞭解了init進程,你就瞭解了根文件系統的組成,就能夠爲所欲爲裁剪系統,爲你的項目製做出最精簡的系統。線程

相關文章
相關標籤/搜索