Linux Kernel系列一:开篇和Kernel启动概要
生活随笔
收集整理的這篇文章主要介紹了
Linux Kernel系列一:开篇和Kernel启动概要
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
近期幾個月將Linux Kernel的大概研究了一下,以下須要進行深入具體的分析。主要將以S3C2440的一塊開發板為硬件實體。大概包含例如以下內容:
1 bootloader分析,以uboot為主,結合詳細開發板的情況。我的目標是解釋清楚uboot的工作原理(說實話,分析過程中不太想被硬件綁架,可是須要以一個實際的樣例
來做分析)
2 kernel部分,這就非常多內容了。打算從kernel啟動的流程開始分析。
3 除kernel本身外,還有非常多的知識,比如ld的輸入script分析等,這里會一起介紹。
kernel啟動流程概要
一:內核Image的組成 1 ES(Embed System)啟動的時候,CPU加電,運行的第一條語句是Bootloader,這個很類似PC機上的BIOS。BL將內核載入后,控制器移交給LK 2 LK運行的第一條語句是什么?vmlinux是單體的內核表示。依據前面說的內核編譯連接知識,第一條語句是head.S中(歷史原因,MD,有非常多文件都叫head.S) ?我們須要又一次分析一下內核(這里就是zImage了)的組成,(方法非常easy,研究make的運行過程,通過make V=1 zImage能夠得到差點兒所有信息)- vmlinux,這個是未壓縮、未strip的內核模塊,ELF結構
- Image:二進制、未壓縮、可是strip后的內核
- head.o:ARM相關的,由BL將控制權轉交給它。即前面提到的head.S生成
- pigg.gz:Image文件的gzip壓縮
- piggy.o:由piggy.S生成,這個S文件通過include Bin方式將Image包括進來。piggy的意思就是背負、肩扛。非常形象不是?
- misc.o:從上面看,涉及到一些解壓方面的內容,而misc提供一些輔助函數
- vmlinux:悲催.....這個文件是head+pigg+misc構成的vmlinux。名字一樣不是?真的非?;煜?#xff01;
- zImage:再由上面這個vmlinux壓縮而來
圖1 內核的構成 3 piggy的故事 piggy.S非常有意思,建立了一個section,而且有一個標志來指示piggy.gz的邊界。 piggy相應的是一個叫bootstrap的image,注意,Bootstrap和Bootloader不一樣,它是在BL之后的一段代碼,用來 解壓kernel,設置內存等作用。也能夠叫second stage boot。 ? 4 Bootloadre和BootstrapLoader BL和BSL的差別是什么?
- BL僅僅是初始化硬件,不依賴linux,不處理linux
- BSL在BL后執行,依賴linux,由于要解壓linux。另外一個重要點就是BSL須要為LINUX的執行建立環境
- head.O:初始化CPU等工作
- misc.O:解壓,重定位(比如將kernel移動到另外一個位置上) decompress_kernel
- 其它工作
圖2 啟動調用流程圖 以下來分析這個啟動流程 1 kernel中的head.o分析:盡量保持CPU系列的通用,比如arm的CPU等初始化都在做??墒窃敿毎遄?#xff08;比如CPU+其它硬件)怎么初始化?這就是由mach文件夾中的初始化函數做到的。所以,kernel初始化分為:generic CPU初始化+詳細板子的初始化。head.o初始化后,跳轉到main.o的start_kernel,繼續后面的流程 2 start_kernel:(init/main.c):start_kernel的轉移由head.O做的,只是代碼一般包括在更通用的head_common.S中 ?? 以后想做kernel的分析,就從main開始吧. start_kernel做了什么事情呢?
- 剛才僅僅是初始化了cpu相關的,而詳細和板子相關的由start_arch運行
?
轉載于:https://www.cnblogs.com/bhlsheji/p/4201225.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Linux Kernel系列一:开篇和Kernel启动概要的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TI 无桥PFC方案【转子tidu312
- 下一篇: C#常用类库(100多个)