當前位置:首頁 » 操作系統 » 嵌入式linux內核

嵌入式linux內核

發布時間: 2022-05-11 19:19:14

A. 學嵌入式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 ☆-

B. Linux嵌入式開發和Linux內核/驅動開發有什麼區別

前者強調的是產品(linux嵌入式產品),而後者強調的是軟體(內核和驅動)。
一般做linux嵌入式產品時都要涉及linux驅動和內核,當然不僅僅是內核驅動,還有gui系統,和其他軟體等。
而做linux內核驅動則不一定用於嵌入式產品,也可以用於開發pc機(也就是一般的x86架構)軟體。

C. 嵌入式linux怎麼學學習嵌入式linux有什麼方法

個人總結的嵌入式學習步驟:
嵌入式學習步驟分為三個階段
1.:基礎與理論階段
主要包括一些理論知識,你至少了解這行業吧,基本的Linux系統使用;其次就是嵌入式核心開發語言C語言(必須精通);了解c語言數據結構及經典演算法編程;最後就是要了解嵌入式產品的一個基本的開發流程,這對後續的開發有很大的幫助,不至於是那麼的迷茫。
2.:嵌入式系統核心開發
整理了下,至少這些是你要學會的,當前企業招人,應用層的開發挺多,特別剛入行前期,神馬驅動的、移植的相關的可能你還不熟練,找工作就靠下面這些知識點了。
嵌入式 linux應用編程;
嵌入式 Linux並發程序設計;
嵌入式 Linux網路編程;
嵌入式資料庫開發;
嵌入式 Linux應用綜合項目;
ARM處理器編程;
ARM硬體介面開發;
3.:底層
嵌入式底層一般會涉及到,如何把你寫的程序移植到開發板上運行,那麼就會接觸到系統移植、內核驅動開發等等,這是嵌入式工程師最高境界。主要要學以下這些:
嵌入式Linux系統開發;
嵌入式Linux內核開發;
嵌入式Linux驅動開發基礎;
嵌入式Linux驅動高級開發;
嵌入式學習步驟就是這么多,除以上相關學習內容外,對於嵌入式學習者來講還應該具備一些學習態度和學習方法。
1.在學習和工作中要腳踏實地
在對所學內容有一定了解之後,在任何項目進行中就保留自己的想法,如果自己能夠解決更好,如果不能可以找其他朋友幫忙,共同探討遇到的問題,如果只懂執行過程,沒有自己的想法,即使人家把代碼給咱,咱又能了解多少?
2.多看代碼、多寫代碼
3.及時對自己的知識進行充電。來華清遠見星創客精英訓練營,是一個不錯的進階提升的培訓班。
建議現在打算學習嵌入式的朋友們一定要多看、多練,見多識廣,熟能生巧。
以上嵌入式學習步驟主要涉及的內容有嵌入式專業知識的學習和學習態度的一些小建議,希望以上內容對你會有所幫助
米奇 2017-10-23 17:26:57查看前後消息
首先介紹一下什麼是嵌入式,嵌入式學習是以計算機技術為基礎,軟硬體可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗等嚴格要求的專用計算機系統。由於嵌入式系統通常具有低功耗、體積小、集成度高等等特點,嵌入式系統在我們日常生活中形成了非常大的應用領域。
嵌入式要學什麼:
1.嵌入式學習之基礎篇階段:
這部分內容主要是能夠看得懂硬體工作原理,特別是操作系統級軟體,這部分內容主要有C語言基礎,嵌入式Linux操作系統使用,嵌入式LinuxC語言高級編程,數據結構以及經典演算法,java語言基礎,java語言高級編程等內容,這些科目內容眾多,但相對來講都是一些比較簡單的基礎,容易掌握。
2.嵌入式學習之linux學習階段:
這部分內容能夠更好地深入掌握Linux系統,主要內容包括嵌入式Linux文件I/O,嵌入式Linux庫的製作和使用,嵌入式Linux開發程序設計,嵌入式Linux網路編程,嵌入式資料庫開發,嵌入式Linux綜合案例等基礎相關內容。
3.嵌入式學習之底層開發階段:
嵌入式學習第三階段需要掌握嵌入式系統及底層開發相關內容,學習內容主要包括ARM處理器編程,ARM硬體介面編程,物聯網基礎等ARM相關內容,此外,還包括嵌入式Linux系統移植/內核開發/驅動開發等必備內容。
4.嵌入式學習之拓展與實踐階段:
拓展與實踐內容主要包括攜帶型智能醫療系統,網路機頂盒項目,倉儲物聯網系統以及智能農業綜合實訓系統等內容,把所學內容和知識點更好地應用於實踐工作中。
以上就是我總結的嵌入式要學什麼,要說嵌入式進階提升,華清遠見星創客精英訓練營是非常好的修煉場,有最新的項目實戰和職場老鳥的帶領,對未來就業很有幫助。總之,嵌入式就是要努力用心的學習,就可以學得好。

D. 在設計嵌入式linux系統時為什麼要配置內核

這個問題應該類似於linux內核構建嵌入式操作系統有什麼優勢呢?
嵌入式系統的商品化操作系統十分豐富,如Palm OS、VxWorks、pSOS、Neculeus和Windows CE等.高端嵌入式系統需要許多高級的功能,但其價格也相對昂貴,一般用戶難以接受.微軟的Windows CE也有此類功能,卻不具備大多數嵌入式系統需要的實時性能,而且難以移植.
Linux為嵌入式系統提供了一個極有吸引力的選擇,對於嵌入式系統而言,性能、成本和可靠性是最至關重要的三個因素.首先,眾多文獻資料表明,Linux是當前可獲得的最簡捷、最快速的操作系統 ,其性能優越之處,是把圖像處理為一個用戶級的應用,圖像可根據需要被選擇是否運行.Linux系統中存在適度復雜的圖像界面,但是他們並沒有和操作系統的內核緊緊捆綁在一起,圖像界面可按需求關閉.這樣就能夠在Linux內核上運行專門為嵌入式系統定製的圖像系統,從而獲得優越的性能.其次,Linux 系統源代碼完全公開,能夠用很便宜的價格得到各種Linux分發版,不必考慮許可成本,將用戶從許可證的限制中解脫出來,無需去為資金短缺而煩憂.Linux能正常運行於內存缺乏,容量緊張的系統中,減少在硬體升級上的開支.另外,在系統穩定性方面,Linux幾乎不崩潰,Linux的穩定性是由於他沒有像其他操作系統相同內核極其龐大.考察資料表明,Linux和其他Unix系統和大型操作系統如VMS、IBM大型機等相同具備相同的可靠性. 在上述優勢之外,Linux還擁有眾多硬體支持的特點和強大的網路支持功能.正因為Linux在價格、性能、穩定性連同用戶定製等方面的突出優勢,用他來構建系統操作平台是個很不錯的解決方案

E. 嵌入式linux和linux有什麼不同.linux的作用是什麼

Linux作為開源免費操作系統,以其作為系統的應用可以較方便的進行系統功能的裁剪和跨體系結構移植。

在不同的目標體系結構下(x86,ARM,PowerPC etc.),由於匯編指令集的不同,同一段代碼利用不同的編譯器和庫文件生成的可執行代碼是不同的。不同體系的Linux其開發工具是不同的。

嵌入式linux屬於高度裁剪過的Linux,他將桌面Linux所具有的大部分應用功能(如GUI 工具,計算器,電子郵件 etc.)和部分系統功能省略,但集成了開發者希望嵌入式產品所具有的特殊應用功能(比如 一款以Linux為系統的觸摸式海事導航儀可以根據功能需要去除不需要的功能塊,但加入GPS定位,航速航向計算,航線規劃,觸摸檢測和對應功能實現等功能)。

嵌入式系統往往是指系統的資源(如DRAM/FLASH ROM,功耗,工作頻率 etc.)有較大限制且系統的工作環境相對多變和惡劣(如溫濕度變化大,酸鹼度腐蝕,外部撞擊和振動,外部電磁干擾,靜電導致的高壓損壞電路 etc.)。這也就需要開發人員更多的發現和假想可能的突發情況並採取相應預防措施。大部分嵌入式系統對響應的時間限制和正確性也有極高的要求。

F. 嵌入式linux和電腦上裝的linux的區別

linux內核是可以採集配置的,嵌入式硬體資源有限,不相關的最後可以不用編譯到bin文件里,電腦上的除了內核,還有相關的應用軟體,界面這些,都是嵌入式linux所沒有的。

G. Linux和嵌入式Linux有什麼區別

Linux是一種自由和開放源碼的類Unix操作系統,存在著許多不同的Linux版本,但它們都使用了Linux內核。Linux可安裝在各種計算機硬體設備中,比如手機、平板電腦、路由器、視頻游戲控制台、台式計算機、大型機和超級計算機。Linux是一個領先的操作系統,世界上運算最快的10台超級計算機運行的都是Linux操作系統。嵌入式Linux系統就是利用Linux其自身的許多特點,把它應用到嵌入式系統里。隨著微處理器的產生,價格低廉、結構小巧的CPU和外設連接提供了穩定可靠的硬體架構,那麼限制嵌入式系統發展的瓶頸就突出表現在了軟體方面。

H. 請簡述嵌入式linux內核的編譯過程

編譯及安裝簡要步驟:
編輯Makefile版本信息

定義內核特性,生成配置文件.config,用於編譯:make xconfig

編譯內核:make

安裝內核:make install

安裝模塊:make moles_install

具體步驟如下:

內核配置

先定義內核需要什麼特性,並進行配置。內核構建系統(The kernel build system)遠不是簡單用來構建整個內核和模塊,想了解更多的高級內核構建選項,你可以查看 Documentation/kbuild 目錄內的內核文檔。

可用的配置命令和方式:

make menuconfig

命令:make menuconfig

編譯內核

編譯和安裝內核

編譯步驟:

$ cd /usr/src/linux2.6

$ make

安裝步驟 (logged as

$ make install

$ make moles_install

提升編譯速度

多花一些時間在內核配置上,並且只編譯那些你硬體需要的模塊。這樣可以把編譯時間縮短為原來的1/30,並且節省數百MB的空間。另外,你還可以並行編譯多個文件:

$ make -j <number>

make 可以並行執行多個目標(target)(KEMIN:前提是目標規則間沒有交叉依賴項,這個怎麼做到的?)

$ make -j 4

即便是在單處理器的工作站上也會很快,讀寫文件的時間被節省下來了。多線程讓CPU保持忙碌。

number大於4不見得有效了,因為上下文切換過多反而降低的工作的速度。

make -j <4*number_of_processors>

內核編譯tips

查看完整的 (gcc, ld)命令行: $ make V=1

清理所有的生成文件 (to create patches...): $ make mrproper

部分編譯:$ make M=drivers/usb/serial

單獨模塊編譯:$ make drivers/usb/serial/visor.ko

最終生成的文件

vmlinux 原始內核鏡像,非壓縮

arch/<arch>/boot/zImage zlib壓縮的內核鏡像(Default image on arm)

arch/<arch>/boot/bzImage bzip2壓縮的內核鏡像。通常很小,足夠放入一張軟盤(Default image on i386)

I. 嵌入式開發為什麼基於linux環境下

嵌入式開發基於linux環境下,提供原代碼是為了編譯生成自己的linux內核。

J. 嵌入式Linux是由哪幾個部分組成

嵌入式
linux系統主要由以下四部分組成:
bootloader
kernel
rootfs
usrfs
Bootloader
(vivi):在操作系統內核運行之前運行的一段小程序,初始化硬體設備和建立內存空間的映射圖,將系統軟硬體環境帶到一個合適的狀態,以便為最終調用操作系統內核准備好正確的環境.
Kernel
(內核):Linux操作系統的核心,管理所有的系統線程/進程/資源/和資源分配.
Rootfs
(busybox):內核掛載的第一個文件系統,放有內核運行的第一個初始化程序init,命令,設備節點,配置文件以及共享文件.系統只能有一個根文件系統,通常用busybox工具來構建根文件系統,以減少系統體積.

熱點內容
怎麼查伺服器ip段 發布:2024-10-09 13:08:04 瀏覽:151
ftpaws 發布:2024-10-09 12:53:20 瀏覽:272
生化危機5ftp 發布:2024-10-09 12:45:22 瀏覽:227
系統的安全配置有哪些 發布:2024-10-09 12:31:41 瀏覽:569
安卓馬桶蓋怎麼拆 發布:2024-10-09 12:19:00 瀏覽:219
移動硬碟文件夾消失 發布:2024-10-09 12:18:20 瀏覽:548
編譯器會自動為它賦初值 發布:2024-10-09 11:42:28 瀏覽:349
演算法自愈 發布:2024-10-09 11:42:27 瀏覽:691
小米密碼輸入錯誤多少次會被鎖 發布:2024-10-09 11:41:46 瀏覽:578
源碼種類 發布:2024-10-09 11:20:35 瀏覽:366