/sbin/init ----> /etc/inittab。" />

衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式Linux:ARM Linux啟動流程

Q4MP_gh_c472c21 ? 來源:未知 ? 作者:李倩 ? 2018-04-26 10:30 ? 次閱讀

ARM Linux啟動流程大致為:bootloader---->kernel---->root filesystem。bootloader 是一上電就拿到cpu 的控制權的,而bootloader實現了硬件的初始化。bootloader儼然就成了Power on 之后”第一個吃螃蟹”的代碼。

談到這就得想到硬件機制是如何滿足這個功能的了。CPU內部一般都集成小容量的SRAM(又叫stapping stone,墊腳石),當系統一上電,NAND controler 就自動地將Nand flash 里的前內容復制到墊腳石里,而PC 指針一上電就指向墊腳石的起始地址0x00000000。這樣這一部分的代碼就可以得到執行。所以,這一部分的代碼就是 bootloader 部分,那一上電bootloader 不就可以得到運行了么?事實確實如此,在嵌入式Linux的軟件系統中,nandflash前面一部分代碼往往就是bootloader ,然后就是kernel, 再接著就是根文件系統。

說了這么多,好像都沒說到啟動流程啊,別著急,咱慢慢談,所謂磨刀不誤砍柴工嘛。

要說啟動流程,如果只是簡單的介紹從哪到哪,誰干了啥啥,得到的結果可能只是只知其然不知其所以然。個人覺得隨著CPU的PC指針走,循著代碼的足跡才能把整個流程理清楚,當找到了代碼的執行過程,再分析一下代碼,自然知道了哪個部分完成了哪些事,更重要的是為代碼的移植打下了堅實的基礎。自然這個過程是痛苦和枯燥的,甚至是看代碼看了幾天也沒弄明白,不過這也是一種鍛煉。

bootloder

前面說了,bootloader一上電就拿到了cpu 的使用權,它當然得干一些初始化的工作啊,比如關閉看門狗、設置cpu 的運行模式、設置堆棧等等比較急迫的事情。當然還要對主板的一些其他硬件進行簡單的初始化,比如外部DDR內存、網卡、顯示屏、nand flash等等的初始化工作,最后還要負責把Linux內核加載到內存中。正所謂責任和權力是并存的嘛,你得到了權益,當然就得付出。當bootloader 完成它的使命之后就會把cpu 的使用權交給下一部分代碼:kernel 。

kernel

在討論kernel 是如何啟動之前,先了解kernel 的組成結構以及是如何得來的。下面這張圖是內核編譯即將結束時顯示的信息

下面的這張圖說明了上面的編譯過程,

可以看到,當內核源文件編譯鏈接成 vmlinux 文件以后還進行了幾個模塊的編譯和鏈接。其中(1)vmlinux 是ELF格式的object文件,這種文件只是各個源代碼經過連接以后的得到的文件,并不能在arm平臺上運行。(2)經過objcopy這個工具轉換以后,得到了二進制格式文件Image,Image文件相比于vmlinux 文件,除了格式不同以外,還被去除了許多注釋和調試的信息。(3)Image文件經過壓縮以后得到了piggy.gz ,這個文件僅僅是Image的壓縮版,并無其他不同。(4)接著編譯生成另外幾個模塊文件misc.o、big_endian.o、head.o、head-xscale.o,這幾個文件組成一個叫bootstrap loader的組件,又叫引導程序。編譯生成 piggy.o 文件。(5)最后piggy.o文件和bootstrap loader 組成一個bootable kernel Image 文件(可啟動文件)。

可以看到最后得到的可執行文件就是上圖最右邊那個,這也是我們最后燒寫到開發板的鏡像。其中piggy.o 就是內核鏡像,而剩下的幾個文件就組成了引導程序。

下面開始討論CPU的流轉過程,還是用一個圖來展示:

從上圖可以看出,系統一上電就開始執行bootloader。當bootloader 執行完以后,把控制權交給了引導程序的head.o 文件里的start 標號處,當引導程序完成引導工作以后就將控制權轉給真正的內核的head.o 文件里的start 標號處。這里就是內核的入口點,最后內核的head.o將控制交給main.o 的start_kernel 函數。這樣,通過查看相應的代碼就可以知道這些代碼到底完成了哪些工作。在這里我們可以找到相應的代碼,分析一下,看它們到底完成哪些事。下面是我的分析結果:

引導程序:

head.o從bootloader接過控制權,并完成如下任務:

1.使能 I/D caches ,關閉中斷 , 建立C運行環境(即設置堆棧)由 head.o 和head-xscal.o 完成

2.解壓縮并重定位代碼 ,由misc.o 完成

3.其他硬件相關的設置,如big.endian.o 為cpu設置大端模式

內核入口點:從引導程序接過控制權,完成如下任務

1.檢查有效的cpu 和cpu的信息

2.創建初始化頁表入口

3.使能MMU

4.檢測錯誤并報告

5.跳轉到內核本身 main.c 文件里的 start_kernel()函數

內核啟動:

從 kernel 的head.o接過控制權,開始內核的啟動,在這里完成內核的初始化,如內核各個子系統的初始化。

root filesystem

到此止,kernel完成了系統硬件探測及硬件驅動的初始化,內核空間的相關工作已經完成,開始向用戶空間轉移,內核空間通過一個間接的initrd(一個虛擬的文件系統)向用戶空間過度,然后開始掛載跟文件系統了,其過程:initrd---->/sbin/init---->/etc/inittab。

initrd是一個虛擬的文件系統,里面有lib、bin、sbin、usr、proc、sys、var、dev、boot等一些目錄,其目錄有點像真的/,所以我們稱之為虛擬的根文件系統,作用就是將kernel和真的根文件系統建立關聯關系,讓kernel去initrd中加載根文件系統所需要的驅動程序,并以讀寫的方式掛載根文件系統,并讓執行用戶當中第一個進程init。

init執行完畢以后會啟動系統內的/etc/inittab文件,來完成系統系統的初始化工作。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9169

    瀏覽量

    369234
  • 嵌入式
    +關注

    關注

    5093

    文章

    19178

    瀏覽量

    307709
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210406

原文標題:嵌入式Linux從從Bootloader、kernel到filesystem啟動流程分析

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ARM嵌入式Linux系統開發詳解

    GUI程序開發第12章軟件項目管理第3篇Linux系統篇第13章ARM體系結構及開發實例第14章深入Bootloader第15章解析Linux內核第16章嵌入式
    發表于 09-14 08:57

    嵌入式Linux啟動流程簡介

    目錄嵌入式 Linux 啟動流程簡介啟動流程Bootloader 簡介市面上可見的 bootlo
    發表于 11-04 09:04

    典型ARM嵌入式Linux設備啟動流程是怎樣的?

    典型ARM嵌入式Linux設備啟動流程是怎樣的?
    發表于 12-23 06:25

    嵌入式linux開發流程

    | 一嵌入式Linux1 什么是嵌入式Linux嵌入式linux 是將日益流行的
    發表于 09-10 10:20 ?40次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>開發<b class='flag-5'>流程</b>

    嵌入式Linux系統開發基礎

    了解嵌入式Linux系統Ø 從Linux內核到文件系統ü嵌入式Linux開發流程v
    發表于 09-10 11:11 ?68次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>系統開發基礎

    基于ARM9的嵌入式Linux開發流程的研究

    本文通過介紹ARM9 與嵌入式Linux 的特點,描述了基于ARM9 的嵌入式Linux 開發一
    發表于 08-13 08:03 ?37次下載

    嵌入式LINUX開發基礎知識

    嵌入式LINUX簡介,嵌入式LINUX開發平臺簡介,嵌入式LINUX開發
    發表于 07-31 21:34 ?261次下載

    基于ARM嵌入式Linux快速啟動

      ARM平臺嵌入式Linux下有些應用對系統啟動時間有著特殊的要求。在很多場合下,這些系統并不需要針對所有任務立即就位,但是針對某些關鍵任務(例如接收以太網命令或者顯示用戶界面)則必
    發表于 09-18 14:17 ?3次下載
    基于<b class='flag-5'>ARM</b><b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>快速<b class='flag-5'>啟動</b>

    詳解嵌入式linux 啟動信息

    詳解嵌入式linux 啟動信息
    發表于 10-30 10:28 ?11次下載
    詳解<b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b> <b class='flag-5'>啟動</b>信息

    詳解bootloader的執行流程ARM Linux啟動過程分析

    RM Linux啟動過程分析是本文要介紹的內容,嵌入式 Linux 的可移植性使得我們可以在各種電子產品上看到它的身影。對于不同體系結構的處理器來說
    的頭像 發表于 12-21 09:24 ?1.1w次閱讀
    詳解bootloader的執行<b class='flag-5'>流程</b>與<b class='flag-5'>ARM</b> <b class='flag-5'>Linux</b><b class='flag-5'>啟動</b>過程分析

    如何使用ARM進行嵌入式linux的系統設計

    本文簡要介紹了ARM處理器的特點及其基本結構,詳細論述了基于ARM嵌入式linux系統的關鍵技術,包括引導加載程序、Linux內核、文件系
    發表于 05-06 18:22 ?10次下載
    如何使用<b class='flag-5'>ARM</b>進行<b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>的系統設計

    嵌入式】基于ARM嵌入式Linux開發總結

    前言嵌入式知識點復習一嵌入式知識點復習二 --體系結構嵌入式知識點復習三 --ARM-LINUX嵌入式開發環境
    發表于 10-19 18:32 ?26次下載
    【<b class='flag-5'>嵌入式</b>】基于<b class='flag-5'>ARM</b>的<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>開發總結

    嵌入式linux和桌面linux的區別

    嵌入式linux和桌面linux的區別主要區別是:1. 硬件平臺:嵌入式Linux一般是Mips, AR
    發表于 10-20 15:36 ?4次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>和桌面<b class='flag-5'>linux</b>的區別

    嵌入式 Linux 啟動流程和 bootloader 介紹

    目錄嵌入式 Linux 啟動流程簡介啟動流程Bootloader 簡介市面上可見的 bootlo
    發表于 11-01 16:32 ?11次下載
    <b class='flag-5'>嵌入式</b> <b class='flag-5'>Linux</b> <b class='flag-5'>啟動</b><b class='flag-5'>流程</b>和 bootloader 介紹

    嵌入式Linux專題(一)——嵌入式Linux系統構成及啟動流程

    本文簡單的介紹了什么是嵌入式系統,以及嵌入式Linux的系統結構,并且簡單的介紹了Linux啟動流程
    發表于 11-02 12:36 ?15次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>專題(一)——<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>系統構成及<b class='flag-5'>啟動</b><b class='flag-5'>流程</b>
    大发888游戏 平台| 顶级赌场官方下载| 瑞丰国际开户| 百家乐官网玩法秘决| 百家乐官网决战推筒子| 百家乐官网乐翻天| 金宝博百家乐娱乐城| 大发888线上娱乐城| 大家旺百家乐官网娱乐城| 百家乐娱乐网站| 百家乐策略网络游戏信誉怎么样| 赌场风云2| 赌百家乐官网容易的原| 百家乐群html| 金宝博188滚球| 蓝盾百家乐官网赌城| V博百家乐的玩法技巧和规则| 巫山县| 百家乐官网怎么才会赢| 在车库做生意风水| 大发888完整客户端| 百家乐官网平台注册送现金| 百家乐群html| 赌博运气| 24山风水发几房| 悠哉棋牌游戏大厅| 百家乐官网保单机作弊| 百家乐筹码套装包邮| 百家乐官网网站排行| 百家乐娱乐分析软| 足球投注| 风水24山向| 六合彩开奖直播| 战神百家乐官网娱乐城| 网上百家乐试| 永康百家乐官网赌博| 玩百家乐去哪个娱乐城最安全| 真人百家乐官网代理合作| 百家乐网上真钱娱乐平台| 百家乐官网娱乐城地址| 百家乐比较好的网站|