正點原子[第三期]Arm(iMX6U)Linux移植學習筆記-12.1 Linux內核啟動流程簡介

?前言:

本文是根據嗶哩嗶哩網站上“Arm(iMX6U)Linux系統移植和根文件系統構鍵篇”視頻的學習筆記,在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內容。本文大量引用了正點原子教學視頻和鏈接中的內容。

引用:

正點原子IMX6U倉庫 (GuangzhouXingyi) - Gitee.com

《【正點原子】I.MX6U嵌入式Linux驅動開發指南V1.5.2.pdf》

正點原子資料下載中心 — 正點原子資料下載中心 1.0.0 文檔

正點原子imx6ull-mini-Linux驅動之Linux I2C 驅動實驗(21)-CSDN博客

正文:

本文是 “Arm(iMX6U)Linux系統移植和根文件系統構鍵篇--9 Linux內核編譯和體驗。本節將參考正點原子的視頻教程和配套的正點原子開發指南文檔進行學習。

?

0. 概述

看完 Linux 內核的頂層 Makefile 以后再來看 Linux 內核的大致啟動流程, Linux 內核的啟動流程要比 uboot 復雜的多,涉及到的內容也更多,因此本章我們就大致的了解一下 Linux 內核的啟動流程。

1 鏈接腳本 vmlinux.lds

要分析 Linux 啟動流程,同樣需要先編譯一下 Linux 源碼,因為有很多文件是需要編譯才會生成的。首先分析 Linux 內核的連接腳本文件 arch/arm/kernel/vmlinux.lds,通過鏈接腳本可以找到 Linux 內核的第一行程序是從哪里執行的。 vmlinux.lds 中有如下代碼:

arch/arm/kernel/vmlinux.lds

?第 493 行的 ENTRY 指明了了 Linux 內核入口,入口為 stext, stext 定義在文件arch/arm/kernel/head.S 中 , 因 此 要 分 析 Linux 內 核 的 啟 動 流 程 , 就 得 先 從 文 件arch/arm/kernel/head.S 的 stext 處開始分析。

arch/arm/kernel/head.S

?2 Linux 內核啟動流程分析

2.1 Linux 內核入口 stext

stext 是 Linux 內核的入口地址,在文件 arch/arm/kernel/head.S 中有如下所示提示內容:

根據示例代碼 36.2.1.1 中的注釋, Linux 內核啟動之前要求如下:

①、關閉 MMU。
②、關閉 D-cache。
③、 I-Cache 無所謂。
④、 r0=0。
⑤、 r1=machine nr(也就是機器 ID)。
⑥、 r2=atags 或者設備樹(dtb)首地址。

Linux 內核的入口點 stext 其實相當于內核的入口函數, stext 函數內容如下:

?第 92 行,調用函數 safe_svcmode_maskall 確保 CPU 處于 SVC 模式,并且關閉了所有的中斷。 safe_svcmode_maskall 定義在文件 arch/arm/include/asm/assembler.h 中。

第 94 行,讀處理器 ID, ID 值保存在 r9 寄存器中。

第 95 行,調用函數__lookup_processor_type 檢查當前系統是否支持此 CPU,如果支持就獲取 procinfo 信 息 。 procinfo 是 proc_info_list 類 型 的 結 構 體 , proc_info_list 在 文 件arch/arm/include/asm/procinfo.h 中的定義如下:

Linux 內核將每種處理器都抽象為一個 proc_info_list 結構體,每種處理器都對應一個procinfo。因此可以通過處理器 ID 來找到對應的 procinfo 結構, __lookup_processor_type 函數找到對應處理器的 procinfo 以后會將其保存到 r5 寄存器中。

繼續回到示例代碼 36.2.1.2 中,第 121 行,調用函數__vet_atags 驗證 atags 或設備樹(dtb)的合法性。函數__vet_atags 定義在文件 arch/arm/kernel/head-common.S 中。

第 128 行,調用函數__create_page_tables 創建頁表。

第 137 行,將函數__mmap_switched 的地址保存到 r13 寄存器中。 __mmap_switched 定義在文件 arch/arm/kernel/head-common.S__mmap_switched 最終會調用 start_kernel 函數

第 144 行 , 調 用 __enable_mmu 函 數 使 能 MMU , __enable_mmu 定 義 在 文 件arch/arm/kernel/head.S 中。 __enable_mmu 最終會通過調用__turn_mmu_on 來打開 MMU,__turn_mmu_on 最后會執行 r13 里面保存的__mmap_switched 函數。

2.2 __mmap_switched 函數

__mmap_switched 函數定義在文件 arch/arm/kernel/head-common.S 中,函數代碼如下:

第 104 行最終調用 start_kernel 來啟動 Linux 內核, start_kernel 函數定義在文件 init/main.c中。

init/main.c

?2.3 start_kernel 函數

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84136.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84136.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84136.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UDP與TCP通信協議技術解析

文章目錄 協議基礎原理TCP:可靠的面向連接通信UDP:高效的無連接通信 性能特征分析TCP性能表現UDP性能表現 應用場景分析TCP適用場景UDP適用場景 技術實現考量錯誤處理策略網絡資源利用 選擇決策框架可靠性需求評估性能要求分析 混合方案設計協議組合策略…

mysql 頁的理解和實際分析

目錄 頁(Page)是 Innodb 存儲引擎用于管理數據的最小磁盤單位B樹的一般高度記錄在頁中的存儲 innodb ibd文件innodb 頁類型分析ibd文件查看數據表的行格式查看ibd文件 分析 ibd的第4個頁:B-tree Node類型先分析File Header(38字節-描述頁信息…

【優選算法】C++滑動窗口

1、長度最小的子數組 思路&#xff1a; class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {// 滑動窗口// 1.left0,right0// 2.進窗口( nums[right])// 3.判斷// 出窗口// (4.更新結果)// 總和大于等于 target 的長度最小的 子數組…

ffmpeg(四):濾鏡命令

FFmpeg 的濾鏡命令是用于音視頻處理中的強大工具&#xff0c;可以完成剪裁、縮放、加水印、調色、合成、旋轉、模糊、疊加字幕等復雜的操作。其核心語法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "濾鏡參數" output.mp4或者帶音頻濾鏡&#xff1a; ffmpeg…

408考研逐題詳解:2009年第33題

2009年第33題 在 OSI 參考模型中&#xff0c;自下而上第一個提供端到端服務的層次是&#xff08; &#xff09; A. 數據鏈路層 \qquad B. 傳輸層 \qquad C. 會話層 \qquad D.應用層 解析 本題主要考查 OSI 參考模型各層的核心功能、端到端服務的定義。 OSI 參考模型&am…

CentOS 7.9安裝Nginx1.24.0時報 checking for LuaJIT 2.x ... not found

Nginx1.24編譯時&#xff0c;報LuaJIT2.x錯誤&#xff0c; configuring additional modules adding module in /www/server/nginx/src/ngx_devel_kit ngx_devel_kit was configured adding module in /www/server/nginx/src/lua_nginx_module checking for LuaJIT 2.x ... not…

自制喜悅字貼

一、想法 據說&#xff0c;把“喜悅”兩個字掛在家里顯眼的地方&#xff0c;時常看到&#xff0c;就能心情愉悅。剛好最近在學習前端flex布局&#xff0c;用代碼實現&#xff0c;導出圖片&#xff0c;打印出來&#xff0c;帖在家里&#xff0c;非常nice。現在分享給大家。 二…

每日八股文6.3

每日八股-6.3 Mysql1.COUNT 作用于主鍵列和非主鍵列時&#xff0c;結果會有不同嗎&#xff1f;2.MySQL 中的內連接&#xff08;INNER JOIN&#xff09;和外連接&#xff08;OUTER JOIN&#xff09;有什么主要的區別&#xff1f;3.能詳細描述一下 MySQL 執行一條查詢 SQL 語句的…

量化面試綠皮書:6. 燒繩子計時

文中內容僅限技術學習與代碼實踐參考&#xff0c;市場存在不確定性&#xff0c;技術分析需謹慎驗證&#xff0c;不構成任何投資建議。 6. 燒繩子計時 你有兩根繩子&#xff0c;每根繩子燃燒需要1小時。但是任何一根繩子在不同點都有不同的密度&#xff0c;所以不能保證繩子內不…

2-深度學習挖短線股1

選短線個股的流程 &#xff08;1&#xff09;數據預處理&#xff0c;根據短線個股篩選標準&#xff0c;給個股日線數據打標。 &#xff08;2&#xff09;模型訓練&#xff0c;針對每只股票&#xff0c;訓練得到分類模型。 &#xff08;3&#xff09;結果預測&#xff0c;根據訓…

【數據分析】探索嬰兒年齡變化對微生物群落(呼吸道病毒和細菌病原體)結構的影響

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹1. 混合效應邏輯回歸模型2. 隨機森林模型3. Maaslin2 分析加載R包數據下載導入數據數據預處理混合效應邏輯回歸模型分析微生物群落結構隨年齡的變化隨機森林模型預測病原體定植Maas…

實戰:子組件獲取父組件訂單信息

最佳實踐建議 優先使用 props&#xff1a;適合父子組件直接通信&#xff0c;數據流向清晰復雜場景用 eventBus&#xff1a;跨組件通信推薦使用 mitt 庫避免過度使用 $parent&#xff1a;會導致組件耦合度高&#xff0c;難以維護provide/inject 適用于跨層級&#xff1a;如主題…

Spring Security深度解析:構建企業級安全框架

Spring Security深度解析:構建企業級安全框架 本文將深入探討Spring Security安全框架的核心原理、架構設計和實際應用,幫助開發者全面掌握企業級應用安全防護技術。 目錄 Spring Security概述核心架構與原理認證機制詳解授權機制詳解核心組件分析配置與集成高級特性應用安全…

計算矩陣A和B的乘積

根據矩陣乘法規則&#xff0c;編程計算矩陣的乘積。函數fix_prod_ele()是基本方法編寫&#xff0c;函數fix_prod_opt()是優化方法編寫。 程序代碼 #define N 3 #define M 4 typedef int fix_matrix1[N][M]; typedef int fix_matrix2[M][N]; int fix_prod_ele(f…

《Brief Bioinform》: 鼠腦單細胞與Stereo-seq數據整合算法評估

一、寫在前面 基因捕獲效率、分辨率一直是空間轉錄組細胞類型識別的攔路虎&#xff0c;許多算法能夠整合單細胞(single-cell, sc)或單細胞核(single-nuclear, sn)數據與空間轉錄組數據&#xff0c;從而幫助空轉數據的細胞類型注釋。此前我們介紹過近年新出爐的Stereo-seq平臺&…

camera功能真的那么難用嗎

背景 Android開發工作過程中&#xff0c;經常需要用到camera相關能力&#xff0c;比如&#xff1a;人臉識別&#xff0c;ai識別&#xff0c;拍照預覽&#xff0c;攝像頭錄制等等需求。都需要使用到camera&#xff0c;且需要拿到camera的預覽數據。但是每次開發這塊代碼都比較繁…

USART 串口通信全解析:原理、結構與代碼實戰

文章目錄 USARTUSART簡介USART框圖USART基本結構數據幀起始位偵測數據采樣波特率發生器串口發送數據 主要代碼串口接收數據與發送數據主要代碼 USART USART簡介 一、USART 的全稱與基本定義 英文全稱 USART&#xff1a;Universal Synchronous Asynchronous Receiver Transmi…

LeetCode 152. 乘積最大子數組 - 動態規劃解法詳解

文章目錄 問題描述解題思路動態規劃狀態定義狀態轉移方程完整代碼實現復雜度分析示例解析關鍵點說明總結問題描述 給定一個整數數組 nums,請找出數組中乘積最大的連續子數組(該子數組中至少包含一個數字),并返回該子數組對應的乘積。 示例: 輸入: [2,3,-2,4] 輸出: 6 解…

Python: 操作 Excel折疊

??Python 操作 Excel 折疊(分組)功能詳解(openpyxl & xlsxwriter 雙方案) 在處理 Excel 報表或數據分析時,我們常常希望通過 折疊(分組)功能 來提升表格的可讀性和組織性。本文將詳細介紹如何使用 Python 中的兩個主流 Excel 操作庫 —— openpyxl 和 xlsxwriter …

28、元組的遍歷

const_cast 只能用于指針或引用類型&#xff0c;而不能用于基本類型如 int。 在的代碼中&#xff0c;試圖將 i 轉換為 const_cast<int>(i)&#xff0c;這是不合法的。 可以使用模板函數來獲取元組中的元素&#xff0c;而不是使用 const_cast。以下是修正后的代碼&#x…