0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux內(nèi)核入口stext段分析

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:Jasonangel ? 2023-09-28 17:07 ? 次閱讀

stext 段

從上面的ENTRY(stext)可以知道,一開始是運(yùn)行stext段,這個(gè)段內(nèi)的代碼是 start_kernel 函數(shù)前匯編環(huán)境的初始化。

linux4.14/arch/arm64/kernel/head.S

圖片

preserve_boot_args 保存 bootloader 傳遞過來的參數(shù)。

el2_setup 是設(shè)置 Linux 啟動(dòng)模式是 EL2。Linux 有 EL0、EL1、EL2、EL3 四種異常啟動(dòng)模式,這里設(shè)置一開始是EL2,EL2 支持虛擬內(nèi)存技術(shù),然后注釋說明后面又退回 EL1,在 EL1 啟動(dòng) kernel。EL3 一般是只在安全模式使用。

set_cpu_boot_mode_flag 保存上面 cpu 的啟動(dòng)模式。

__create_page_tables 創(chuàng)建頁表。

__cpu_setup 初始化CPU,這里主要是初始化和 MMU 內(nèi)存相關(guān)的 CPU 部分。

__primary_switch 這里會(huì)進(jìn)行跳轉(zhuǎn)。

在同一個(gè)文件中,會(huì)跳轉(zhuǎn)到這里,739 行開啟了MMU。然后最重要的是跳轉(zhuǎn)到

__primary_switched 函數(shù)。先把 __primary_switched 地址放到 x8 寄存器中,再跳轉(zhuǎn)到 x8,也就是跳轉(zhuǎn)到__primary_switched。

圖片

接下來分析 __primary_switched 函數(shù):

圖片

圖片

324-327 初始化了 init 進(jìn)程的內(nèi)存信息,開辟了內(nèi)存空間。

329-334 設(shè)置了向量表。

336-340 保存了FDT,也就是 flat device tree 。

342-348 清除了BSS 段,我們知道一般是內(nèi)存四區(qū):堆區(qū)、棧區(qū)、全局區(qū)、代碼區(qū)。其中全局區(qū)可以再分為 data 段和 BSS 段,BSS段存儲(chǔ)了未初始化的變量,這里將BSS段進(jìn)行清零操作,否則內(nèi)存中的值是不確定的,這是一個(gè)傳統(tǒng)操作。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1336

    瀏覽量

    40084
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207910
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61967
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux內(nèi)核data和bss的區(qū)別

    從進(jìn)程的角度,Linux內(nèi)核是采用虛擬地址空間的,如下兩張圖所示,分別為32位、64位系統(tǒng)下進(jìn)程地址空間的大概布局。
    發(fā)表于 10-13 17:07 ?8424次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>data<b class='flag-5'>段</b>和bss<b class='flag-5'>段</b>的區(qū)別

    Linux內(nèi)核地址映射模型與Linux內(nèi)核高端內(nèi)存詳解

    的數(shù)據(jù)可能不在內(nèi)存中。 Linux內(nèi)核地址映射模型 x86 CPU采用了頁式地址映射模型。進(jìn)程代碼中的地址為邏輯地址,經(jīng)過頁式地址映射后,才真正訪問物理內(nèi)存。
    發(fā)表于 05-08 10:33 ?3401次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>地址映射模型與<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>高端內(nèi)存詳解

    linux內(nèi)核分析及編程

    linux內(nèi)核分析及編程
    發(fā)表于 04-20 08:26

    「正點(diǎn)原子Linux連載」第三十六章Linux內(nèi)核啟動(dòng)流程

    *(.ARM.exidx.exit.text)508 *(.ARM.extab.exit.text)509......645}第493行的ENTRY指明了了Linux內(nèi)核入口,入口stex
    發(fā)表于 03-17 11:07

    Linux內(nèi)核啟動(dòng)流程-迅為IMX6ULL開發(fā)板(一)

    指明了Linux內(nèi)核入口函數(shù)為stext,因此要分析Linux內(nèi)核第二階
    發(fā)表于 07-17 11:13

    AT32 MCU Cortex M4內(nèi)核入門指南

    AT32 MCU Cortex M4內(nèi)核入門指南主要介紹了AT32 M4 內(nèi)核系統(tǒng)架構(gòu),并針對(duì)M4 內(nèi)核自帶的位帶、硬件浮點(diǎn)運(yùn)算單元和滴答時(shí)鐘中斷功能進(jìn)行基礎(chǔ)講解和案例解析。
    發(fā)表于 10-25 08:08

    基于內(nèi)核入侵的木馬設(shè)計(jì)與實(shí)現(xiàn)

             通過內(nèi)核入侵是木馬入侵 Linux 系統(tǒng)的一種重要形式,其原理是利用Linux 內(nèi)核
    發(fā)表于 09-05 08:32 ?9次下載

    linux內(nèi)核啟動(dòng)內(nèi)核解壓過程分析

    linux啟動(dòng)時(shí)內(nèi)核解壓過程分析,一份不錯(cuò)的文檔,深入了解內(nèi)核必備
    發(fā)表于 03-09 13:39 ?1次下載

    基于Linux 2.6內(nèi)核Makefile分析

    基于2.4內(nèi)核的,可以說關(guān)于2.6內(nèi)核Makefile相關(guān)的文章鳳毛麟角,筆者抽時(shí)間完成了這篇分析文章,讓讀者迅速熟悉Linux最新Makefile體系,從而加深對(duì)
    發(fā)表于 09-18 19:09 ?0次下載
    基于<b class='flag-5'>Linux</b> 2.6<b class='flag-5'>內(nèi)核</b>Makefile<b class='flag-5'>分析</b>

    關(guān)于Linux 2.6內(nèi)核Makefile的分析

    的介紹文章都是基于2.4內(nèi)核的,可以說關(guān)于2.6內(nèi)核Makefile相關(guān)的文章鳳毛麟角,筆者抽時(shí)間完成了這篇分析文章,讓讀者迅速熟悉Linux最新Makefile體系,從而加深對(duì)
    發(fā)表于 11-02 10:12 ?1次下載

    linux內(nèi)核入門教材之linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)第二版中文版免費(fèi)下載

    此書是當(dāng)今首屈一指的linux內(nèi)核入門最佳圖書。作者是為2.6內(nèi)核加入了搶占的人,對(duì)調(diào)度部分非常精通,而調(diào)度是整個(gè)系統(tǒng)的核心,因此本書是很權(quán)威的。這本書講解淺顯易懂,全書沒有列舉一條匯編語句,但是
    發(fā)表于 10-15 18:20 ?0次下載
    <b class='flag-5'>linux</b><b class='flag-5'>內(nèi)核入</b>門教材之<b class='flag-5'>linux</b><b class='flag-5'>內(nèi)核</b>設(shè)計(jì)與實(shí)現(xiàn)第二版中文版免費(fèi)下載

    嵌入式Linux內(nèi)核移植相關(guān)代碼分析

    分析 */ /* 內(nèi)核入口點(diǎn) */ ENTRY(stext) /* 程序狀態(tài),禁止FIQ、IRQ,設(shè)定SVC模式 */ mov r0, #F_BIT | I_BIT | MODE_SVC@ make
    發(fā)表于 04-02 14:37 ?234次閱讀

    【站友投遞】linux內(nèi)核啟動(dòng)流程

    Linux內(nèi)核啟動(dòng)流程 arch/arm/kernel/head-armv.S 該文件是內(nèi)核最先執(zhí)行的一個(gè)文件,包括內(nèi)核入口ENTRY(
    發(fā)表于 04-02 14:38 ?419次閱讀

    Linux內(nèi)核配置編譯分析的設(shè)計(jì)方案

    Linux內(nèi)核配置編譯分析的設(shè)計(jì)方案
    發(fā)表于 07-08 16:53 ?18次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>配置編譯<b class='flag-5'>分析</b>的設(shè)計(jì)方案

    Linux內(nèi)核GPIO操作函數(shù)的詳解分析

    本文檔的主要內(nèi)容詳細(xì)介紹的是Linux內(nèi)核GPIO操作函數(shù)的詳解分析免費(fèi)下載。
    發(fā)表于 01-22 16:58 ?28次下載