閱讀分析Linux0.11 /boot/setup.s

目錄

  • 第一部分
  • 第二部分
  • 第三部分

該源文件功能分為三部分:
(1)源文件開始部分是通過各種中斷指令, 初始化計算機的組成硬件,獲得硬件的參數,然后保存到段空間0X9000。該空間原來是保存加載到內存的引導扇區內容。執行到此刻,引導程序已經執行完畢,所以覆蓋引導程序沒有問題。
(2)將加載到內存0X1000:0X0000地址的 系統核心模塊System,通過串傳送指令movsw移動到內存0X0000:0X0000。也就是整體向前移動64KB的空間。
(3) 將CPU從實模式切換到保護模式,然后用保護模式的跳轉方式,跳轉到正確的位置(就是0地址,執行System模塊)。

第一部分

????這部分就是通過各種BIOS中斷獲取組成計算機硬件的參數。參數包括:光標的位置、內存的大小、屏幕顯示的參數、硬盤的參數等。都保存在段空間0X9000處。學過《匯編語言》都能看懂,就不細說了。


第二部分

????將加載到內存0X1000:0X0000處的系統核心模塊System,移動到0地址(0X0000:0X0000)處。剛開始看這段代碼時,我很費解。為什么在引導程序bootsect.s不直接把磁盤中的System模塊加載到0地址處,非要現在到setup.s中再來移動呢? 看完整個代碼我懂了。
????每次開機,啟動操作系統時,都要獲取硬件的參數(setup.s的第一部分),獲取參數是通過中斷,處理中斷的中斷例程是BIOS提供的,中斷類型碼和中斷例程的映射要通過中斷向量表。而實模式下的中斷向量表默認保存在內存0地址處。如果bootsect.s直接把System模塊加載到0地址處,就覆蓋了中斷向量表。 那么現在的setup.s的第一部分就無法獲得硬件參數。因為就是通過“int 中斷類型碼”執行BIOS提供的中斷例程來獲取硬件參數。所以bootsect.s中只能先加載到0X1000:0X0000處,然后setup.s再移動到0X0000:0X0000處。
????之所以在setup.s的第二部分可以覆蓋掉中斷向量表,是因為后面的第三部分就是切換到保護模式了。保護模式下的中斷是通過查IDT(中斷描述符表)實現的。


第三部分

????進入保護模式后訪問的空間就不止1M了,所以要打開A20地址線。然后還要初始化可編程中斷控制器8259A。這兩段內容對硬件端口的操作復雜、繁瑣,沒有deepseek我根本看不懂。感謝deepseek,沒有它,我肯定沒信心閱讀Linux源碼了。
????將CPU從實模式切換到保護模式,只需將CR0寄存器的PE位置1就可以了。切換到保護模式后,我們就要通過Call指令跳轉到0地址處的System模塊。保護模式下的CS中保存的不是段地址,而是段選擇子。通過段選擇子查找GDT得到段描述符,段描述符中的基址加上偏移地址就是最終的地址。所以我們要 構造一個簡單的GDT表,然后通過LGDT指令把GDT的地址、界限加載到GDTR寄存器。如果你懂CPU的保護模式,這段很簡單。看不懂,只能先去看看保護模式的資料,再來看。保護模式不是一兩句話能說清的。操作系統修煉指南–保護模式

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

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

相關文章

TSMaster在新能源汽車研發測試中的硬核應用指南

——從仿真到標定,全面賦能智能汽車開發 引言:新能源汽車測試的挑戰與TSMaster的破局之道 新能源汽車的快速發展對研發測試提出了更高要求:復雜的電控系統、高實時性通信需求、多域融合的驗證場景,以及快速迭代的開發周期。傳統測…

web漏洞靶場學習分享

靶場:pikachu靶場 pikachu漏洞靶場漏洞類型: Burt Force(暴力破解漏洞)XSS(跨站腳本漏洞)CSRF(跨站請求偽造)SQL-Inject(SQL注入漏洞)RCE(遠程命令/代碼執行)Files Inclusion(文件包含漏洞)Unsafe file downloads(不安全的文件下載)Unsafe file uploads(不安全的文…

《Linux內存管理:實驗驅動的深度探索》【附錄】【實驗環境搭建 4】【Qemu 如何模擬numa架構】

我們在學習 linux 內核時,會涉及到很多 numa 的知識,那我們該如何在 qemu 中模擬這種情況,來配合我們的學習呢? 我們該如何模擬 如下的 numa 架構 Qemu 模擬 NUMA 架構 -M virt,gic-version3,virtualizationon,typevirt \ -cp…

YOLOv12 從預訓練邁向自主訓練,第一步數據準備

視頻講解: YOLOv12 從預訓練邁向自主訓練,第一步數據準備 前面復現過yolov12,使用pre-trained的模型進行過測試,今天來講下如何訓練自己的模型,第一步先準備數據和訓練格式 https://gitcode.com/open-source-toolkit/…

Keil 5 找不到編譯器 Missing:Compiler Version 5 的解決方法

用到自記: 下載地址: Keil5 MDK541.zip ?編輯https://pan.baidu.com/s/1bOPsuVZhD_Wj4RJS90Mbtg?pwdMDK5 問題描述 沒有找到 compiler version5 : 1. 下載 Arm Compiler 5 也可以直接點擊下載文章開頭的文件。 2. 安裝 直接安裝在KEI…

結腸鏡3D視頻數據集-C3VD論文中文版

文章目錄 標題作者摘要一、介紹1.1. 相關工作1.1.1. 內鏡重建數據集1.1.2. 注冊真實和虛擬內窺鏡圖像1.1.3. 2D-3D注冊1.2. 貢獻 二、方法2.1. 幻影模型生產2.2. 數據采集2.3. 注冊流程概述2.3.1. 數據預處理2.3.2. 目標深度估計2.3.3. 渲染深度幀2.3.4. 邊緣損失和優化 2.4. 模…

hadoop 集群的常用命令

# 查看HDFS目錄內容 hadoop fs -ls /path # 創建目錄 hadoop fs -mkdir /path/to/dir # 上傳本地文件到HDFS hadoop fs -put localfile /hdfs/path # 下載HDFS文件到本地 hadoop fs -get /hdfs/path localfile # 查看文件內容 hadoop fs -cat /hdfs/path/file # 刪除文件/…

MaxEnt物種分布建模全流程;R+ArcGIS+MaxEnt模型物種分布模擬、參數優化方法、結果分析制圖與論文寫作

融合R語言的MaxEnt模型具有以下具體優勢: 數據處理高效便捷 📊強大的數據預處理功能:R語言提供了豐富的數據處理工具,能夠輕松完成數據清洗、篩選、轉換等操作,為MaxEnt模型提供高質量的輸入數據。 🌐自動…

Java基礎 4.4

1.方法快速入門 public class Method01 {//編寫一個main方法public static void main(String[] args) {//方法使用//1.方法寫好后,如果不去調用(使用),不會輸出Person p1 new Person();p1.speak();//調用方法 p1.cal01();//調用計算方法1p1.cal02(10);…

Tiktok矩陣運營中使用云手機的好處

Tiktok矩陣運營中使用云手機的好處 云手機在TikTok矩陣運營中能夠大幅提高管理效率、降低封號風險,并節省成本,是非常實用的運營工具。TikTok矩陣運營使用云手機有很多優勢,特別是對于需要批量管理賬號、提高運營效率的團隊來說。以下是幾個…

指針函數、函數指針和指針函數指針的全面總結

C中指針函數、函數指針和指針函數指針的全面總結 一、核心概念區別 概念本質聲明示例核心特征指針函數返回指針的函數int* func(int);函數定義,返回值是指針類型函數指針指向函數的指針int (*ptr)(int);變量,存儲函數地址指針函數指針指向指針函數的指…

CherryStudio MCP實戰(一)filesystem篇

隨著DeepSeek的爆火,各行各業都在圍繞著大模型尋找新質量生產力。簡單來說,DeepSeek像是人的大腦,他可以推理,幫你思考一些問題,但是具體要做一些事情的時候,他還需要“手腳”來協同。MCP(Model…

TCP基礎篇(一)

文章目錄 1.TCP 是如何保證可靠性的?2. 滑動窗口機制3 超時重傳4.TCP 報文格式5. 什么是 TCP 協議5.1 如何唯一確定一個 TCP 連接 6.TCP 三次握手過程6.1 可以兩次握手嗎? 7.TCP 的四次揮手7.1 為什么客戶端要等待2MSL? 8.linux 中查看 TCP 的連接9.TCP 為什么要有…

【Axure元件分享】時間范圍選擇器

時間范圍選擇器下拉選擇開始時間和結束時間,實現效果如下。 源文件截圖: 元件獲取方式:

大模型學習一:deepseek api 調用實戰以及參數介紹

一、說明 DeepSeek(杭州深度求索人工智能基礎技術研究有限公司)是一家專注于大語言模型(LLM)研發的中國創新型科技公司,成立于2023年7月17日,由幻方量化孵化。其核心產品包括開源推理模型DeepSeek-R1、多模…

【Linux網絡與網絡編程】03.UDP Socket編程

一、UDP Socket編程接口 // 創建套接字 int socket(int domain, int type, int protocol); // 參數: // domain:域(協議家族),這里使用 AF_INET 表示進行網絡編程 // type:網絡通信傳輸的類型&#xff0…

linux gcc

一、常用編譯選項 ?基本編譯 gcc [input].c -o [output] ?示例: gcc hello.c -o hello # 將 hello.c 編譯為可執行文件 hello ./hello # 運行程序 ?分步編譯 預處理:-E(生成 .i 文件) gcc -E hello.c -o hello…

若依框架二次開發——RuoYi-AI 集成本地大模型

文章目錄 前提條件1. RuoYi-AI 已成功部署并運行2. Ollama 本地大模型已安裝1. 配置本地大模型2. 切換至本地模型3. 開始對話總結本文將詳細介紹如何在 RuoYi-AI 中集成本地 Ollama 大模型,使系統能夠在 離線環境 下提供智能對話能力。 前提條件 在開始集成本地大模型之前,…

Flask學習筆記 - 模板渲染

Flask 模板渲染 模板是包含占位符的 HTML 文件 Flask 使用 Jinja2 模板引擎來處理模板渲染。模板渲染允許你將動態內容插入到 HTML 頁面中,使得應用能夠生成動態的網頁內容。 創建模板:將 HTML 文件放在 templates 文件夾中,使用 Jinja2 占…

解碼 from XXX import * - 導入的真相

文章目錄 前言一、 什么是 from XXX import *?二、基本用法:導入的實際效果三、默認行為:無 __all__ 的情況四、與直接運行 XXX.py 的對比示例模塊使用 from XXX import *直接運行 python example.py關鍵差異五、為什么需要注意 from XXX import *?最佳實踐六、實際應用場景…