如何學習嵌入式Linux 韋東山

2021-10-06 02:44:43 字數 1693 閱讀 3936

版本

日期作者

說明v1

2020

韋東山適用於嵌入式linux初學者

我在100ask_imx6ull售後群裡,發現很多初學者只有微控制器基礎,甚至沒有微控制器基礎。在學習linux時,對很多概念比較陌生,導致不知道學什麼,也不知道學了之後有什麼用。

看原理圖,確定引腳是哪乙個,確定它輸出什麼電平才可以

看晶元手冊,確定要怎麼操作暫存器

寫程式

但是,怎麼編寫程式,微控制器和linux有很大不同。

linux系統中執行著眾多程式,必須保證質量差的程式無法破壞系統

假設你寫的程式比較爛,那我不能讓你去隨便訪問暫存器,把系統搞崩潰了怎麼辦?你本意是去點燈,但是你看錯了暫存器,你把電源關了怎麼辦?

所以這些操作硬體的活,還是交給信得過的人來做吧:交給驅動工程師,他既懂硬體又懂軟體。

保證程式的可移植性

編寫應用程式時,大家都使用統一的函式,以後換乙個晶元時,應用程式不用變;只需要根據這個介面提供驅動程式就可以了。

團隊協作

使用linux系統的專案一般比較大,術業有專攻,乙個人不太可能從上到下都全部掌握。比如做人臉識別專案,有擅長做影象處理的,他可不管你要用多少種攝像頭,有影象給他就可以。而多種攝像頭的硬體操作方法各有不同,這些交給驅動程式工程師。

open

開啟驅動程式。

read/write

讀、寫資料。

ioctl

傳入各種引數,獲得各種引數。

mmap

記憶體對映,比如對映之後,應用程式可以直接讀寫lcd的視訊記憶體。

它的目的是啟動核心,去哪等讀核心?讀到**?去flash等外設讀核心,存到記憶體裡去。所以需要有flash裡外設的驅動能力,為了除錯方便還會有網路功能。

所以,可以認為booloader = 裸機集合,它就是乙個複雜的微控制器程式。

led驅動程式

這是最簡單的驅動程式。

按鍵驅動程式

它也比較簡單,從它引入「中斷」

中斷

從「中斷」它可以引入:休眠-喚醒、程序/執行緒、poll機制、非同步通知等概念。這些概念無論是對驅動開發,還是對應用開發,都很重要。

基本裝置的訪問,比如lcd、輸入裝置

程序、執行緒、程序通訊、執行緒同步與互斥

休眠-喚醒、poll機制、訊號

網路程式設計

每次上課我都要給學生寫一次那些驅動,十幾次下來閉著眼睛都知道核心的套路了。

記不住那些函式?我也記不住,我都是去參考同類的驅動程式,這又不是閉卷考試。

但是要理清楚思路,你寫這個程式要完成什麼功能、怎麼實現這些功能?這個要弄清楚。

韋東山嵌入式linux學習筆記

第一課 原理圖之gpio和閘電路 generial peripheral input output 學習到的知識點 上拉電阻,和下拉電阻的認識和理解 以及梳理了一下閘電路。上拉電阻,下拉電阻一般都是和三極體配套使用,都是為了給懸空的的引腳 管中的一級 乙個確定的電壓狀態,並且起反相的作用。上拉電阻和...

韋東山Linux嵌入式學習 硬體複習

彙總點這 在前一篇的博文中,有乙個地方敲錯了。text golbal start start ldr r1,0x56000050 ldr r0,0x0100 str r0,r1 ldr r1,0x56000054 ldr r0,0x0010 此處應為ldr r0,0 str r0,r1 halt b...

韋東山Linux嵌入式學習 硬體複習

彙總點這 之前一直都是用彙編來點燈,這次我們用最熟悉的c語言來點燈。思路很簡單,分別把gpfcon暫存器和gpfdat暫存器設定為輸出模式和輸出零就可以了。也就是 int mian 就算我們用c語言點燈,但是也要呼叫main函式,才可以執行這些語句呀,所以我們還要編寫乙個匯程式設計序來呼叫main函...