日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

给你准备的Linux启动流程

發布時間:2023/12/20 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 给你准备的Linux启动流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

讀者朋友提問:

昨天在后臺看到一個讀者朋友跟我說,發哥,你能不能講一下嵌入式Linux的開機流程,然后我看了下,我是沒有寫過這方面的文章,所以,就有了這篇文章。

回答:

我們都知道pc指針吧,我之前推薦大家看一本書叫《Linux內核藝術》,如果你們看了這本書,那么對開機流程什么的,就非常非常清楚了。我這里講的內容,也不過是九牛一毛,跟書籍里面的內容完整性相比,差距還是很大。不過,我可以把原理給大家說明清楚,看了我的文章后再去看書籍,可能效果會更加好。

按下電源鍵,打開電源


好了,我們繼續上面的內容,我們知道pc指針是指向當前需要執行程序的位置的,但是剛上電,什么都沒有,CPU需要去哪里找到要執行的程序呢?

這就需要預設置,我們需要固化一段代碼在ROM里面,然后預先設置CPU上電執行的第一條指令的地址,在X86里面是 FFFF:0000h 。在嵌入式設備里面,根據不同的芯片廠商可能會設置不同,原理很簡單,這個地址跟他們的啟動時序有關系,和分區也有關系,所以會做相對應的修改。

引導bootloader

最近在做mtk的相關平臺,還有一個preloader的概念,不管是什么loader,包括我們在x86上面說的BIOS,也就是basic input output system。都是為了引導系統服務的,系統起來的之前是內核,所以這些東西都是為了引導內核服務的。

我們上面不是說了第一條指令會指向一個固定的ROM地址嗎?這個地址里面執行的東西,從某種意義上來說也是bootloader的一部分。這些是概念性的東西,屬于幫忙內核引導的,都可以認為是bootloader的一部分。但是因為芯片設計,系統設計的原因,可能會細分一些。

比如,我現在做的MTK平臺,在里面會以因為在loader里面做插入USB的判斷,還有一些其他比較前期的開機判斷,比如SMPS(用來判斷AC轉換車工DC的供電是否正常)等等。

bootloaer是干什么吃的?

上面提了一些bootloaer的作用是用來引導內核的,正常bootloaer會分成兩個階段。

第一個階段就初始化一些基本的東西,讓第二階段的bootloader能夠正常運行。

第二個階段做的事情就比較多,比如初始化一些外設,正常我們需要初始化的外設是顯示和串口,顯示可以讓我們看到當前的界面,串口可以讓我們看到日志輸出。

在這之前,我們還需要初始化中斷向量,初始化內存,初始化定時器,看門狗,這些是比串口和現實屏更加重要的。

這些做完后,就要給內核造房子讓內核住進去,也就是說,我們把內核的鏡像加載進入內存,然后解壓,準備運行內核。

內核的運行環境準備好后,就把pc指針指向內核執行地址,之后就是內核在運行了。

內核會做什么事情呢?

從start_kernel開始,內核開始了它一生的漫長生涯~

內核剛起來的第一件事情就是檢查硬件了,內核還需要接收bootloader里面傳過來的東西,比如內存信息,中斷向量表,有了這些東西內核就沒有必要再去檢測一次了。

還有一個比較重要的,就是去掛載根文件系統,根文件系統是內核啟動的關鍵因素,沒有這個內核是不能正常運行了。

然后,就去執行一些內核模塊,我們寫的一些驅動,都是以內核模塊的形式存在的,這時候就去執行內核模塊的init函數。

上面之后,還需要準備用戶空間的東西,內核的存在是為了應用服務的,所以這里需要準備用戶空間執行的一些條件。

然后加載第一個init進程。

分享一張Android平臺的開機流程

上電的第一時間跑的是Boot ROM 里面的代碼,然后再去執行pre-loader,后面會到Little Kernel,然后再到kernel。

晚上跟同事討論的時候,提到一個問題,為什么pre-loader和Lk不能做成一起?

在LK里面運行的是一個C代碼編譯出來的產物,在pre-loader需要提前把這個環境搭建好。

唉,我還是畫個圖

整體的流程圖如下:

工作模式切換

嵌入式跟X86有點不一樣,嵌入式Linux的平臺很多,很多芯片廠商跟ARM簽約拿到ARM授權后,就可以開始做自己的芯片。

X86我們在學習的時候,知道在bootloader下跑實模式,然后到內核后就轉到保護模式。

ARM有7種工作方式,我們在不同的階段,會處在不同的工作方式中。

像一些成熟的手機方案,會加上modem芯片,開機的時候還需要和modem通信,復雜度又會增加一個檔次。說到這里,又不得不提到嵌入式和平臺強相關性的問題。

上面提到的《Linux內核設計的藝術》,有喜歡的同學在后臺回復,會有下載鏈接。

分享一個小故事,因為在朋友圈里真的太火了。

? ?推薦閱讀:

?? 專輯|Linux文章匯總

? ?專輯|程序人生

? ?專輯|C語言

嵌入式Linux

微信掃描二維碼,關注我的公眾號

總結

以上是生活随笔為你收集整理的给你准备的Linux启动流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。