1. 程式人生 > >Linux0.11---head.s分析

Linux0.11---head.s分析

head.s位於system模組的頭部,故其命名為head。

system模組位於磁碟上setup模組之後(4個扇區),即從磁碟上第6個扇區開始的位置

從此核心完全開始執行在保護模式下運行了。

head.s的彙編程式與前面的語法格式不同,它採用的是AT&T的組合語言格式

此段程式實際上位於記憶體絕對地址0處開始的地方

功能:

1.載入各個段暫存器(因為gdt表的內容發生改變,段暫存器的影子部分是描述符,所以需要改變)

2.重新設定idt, gdt表

3.檢測A20的地址線是否開啟

4.檢查協處理器是否存在

5.利用命令.org 0x1000  .org 0x2000 .org0x3000 .org0000 .org 0x5000預設值了頁表的儲存位置

   4個頁表,每個對應4M,共16M

   NOTE:頁表的地址的低12位總為0,所以必然總是2^12 = 4K對齊

6.預留了1K的的緩衝位元組

7.利用模擬呼叫返回ret方式進入mian程式,首先是壓入了main的一些引數和main的入口地址

相關推薦

Linux0.11---head.s分析

head.s位於system模組的頭部,故其命名為head。 system模組位於磁碟上setup模組之後(4個扇區),即從磁碟上第6個扇區開始的位置 從此核心完全開始執行在保護模式下運行了。 head.s的彙編程式與前面的語法格式不同,它採用的是AT&T的組合語言格

閱讀Linux0.11——head.s

最近經過反饋,博主得知了自己在輸出自己的知識方面做的非常不好。經過認真的反思,好吧主要是思考別人是怎麼做的,以及結合我的特點,得出如下結論: 1、認為每一個聽眾或者讀者都是零基礎,要直白的講出想要講給別人的知識。雖然這句話聽起來像是廢話,但是挺不容易的。舉個栗

linux0.11head.s分析

/* *注意!32位啟動程式碼是從絕對地址0x0000 0000開始的,這裡同樣也是頁目錄 *將要存在的地方,因此啟動程式碼會被頁目錄覆蓋掉 */ .text .globl _idt,_gdt,_pg_dir,_tmp_floppy_area _pg_dir: !頁

嵌入式 arm平臺kernel啟動第一階段彙編head.s分析

arm_linux核心生成過程: 1. 依據arch/arm/kernel/vmlinux.lds 生成linux核心原始碼根目錄下的vmlinux,這個vmlinux屬於未壓縮,帶除錯資訊、符號表的最初的核心,大小約23MB;  命令:arm-linux-gnu-ld

linux0.00 "head.s"程式詳解

// head.s包含32位保護模式初始化設定程式碼、時鐘中斷程式碼、系統呼叫中斷程式碼和兩個任務的程式碼。 // 在初始化完成之後程式移動到任務0開始執行,並在時鐘中斷控制下進行任務0和1之間的切換操作。 LATCH = 119

linux2.4 啟動程式碼head.S分析

32位啟動程式碼,暫時不考慮SMP的情況。關鍵程式碼分析 頁目錄表的起始地址在0x101000,由於目前仍然處於真實模式,地址都是 實體地址 開始啟動核心 startup_32:  清方向標誌位  cld  用核心資料段的地址來初始化ds,es,fs,gs暫存器  巨

nasm重寫linux-0.11 head.s (博古以通今)

;檔名:followking/boot/head.s;本檔案改寫linux-0.11/boot/head.s,目的是為了體驗整個系統構建的過程。;我是看著趙炯《Linux核心0.11完全註釋》編寫的。不過,我是編寫程式碼,有疑問再看。;我用的nasm的語法格式。我想寫一個作業

第一次作業:基於Linux0.11操作系統的進程模型分析

機制 中斷處理程序 soft page tab nr_open sched move 關閉 1.前言 本文基於Linux0.11操作系統的源代碼,分析其進程模型。 Linux0.11下載地址:https://zhidao.baidu.com/share/20396e1704

linux-2.6.22.6內核啟動分析head.S引導段代碼

common begin ber 字節數 static smd 我們 ovs pro 學習目標: 了解arch/arm/kernel/head.S作為內核啟動的第一個文件所實現的功能! 前面通過對內核Makefile的分析,可以知道arch/arm/kernel/head

linux0.11 execve系統呼叫分析

    在Linux平臺下,我們一般都是在命令列下鍵入"./hello"來執行一個當前目錄下的hello應用程式("./"指定當前目錄)。雖然看似很簡單,但這麼小小的一個操作其實涉及到了很多的知識。比如:shell是如何將hello調入記憶體的?hello在執行前shell

linux0.11程序睡眠sleep_on函式和喚醒wake_up函式分析

核心中的這兩個函式主要用於訪問資源時的同步操作。高速緩衝區的訪問就是其中的一個例子:如果兩個程序都要訪問同一個緩衝塊,那麼其中的一個程序就必然睡眠等待,直到該緩衝塊被釋放才可訪問。趙炯博士所著的linux0.11核心完全註釋一書中也是對該問題進行詳細的討論,但是我在閱讀這部

linux0.11字元裝置的讀寫過程分析

首先要知道linux系統/dev目錄下的各種裝置檔案(檔案屬性c打頭)並不佔用空間,你可以發現他們的大小為0位元組,他們的區別在於檔案的i節點的成員i_zone[0]的值不同,該值標識不同的裝置號。比如tty0檔案的裝置號為0x0400,tty1裝置號為0x0401,hd0

linux 0.11 核心學習 -- head.s

# # 這段程式碼被連線到system模組的最前面,這也是它為什麼稱之為head.s的原因。 # 從這裡開始核心完全執行在保護模式下。head.s採用的是at&t格式的 # 彙編。注意的是程式碼中的賦值方向是從左到右。 # # 這段程式實際上是出於記憶體的絕對地址0開始處。首先是載入各個

Linux0.11核心讀書筆記/boot/bootsect.s

果凍QQ:457283! 本程式完成的主要功能! 1.bootsect.s從0x7c00處開始執行! 2.將自己複製到0x90000處! 3.將setup.s程式從磁碟第2扇區讀取到0x90200處! 4.將system讀取到0x10000處! 5.獲取根檔案系統裝置號! 6

LoadRunner 11 中Analysis分析

其實在 ane 可能 大於 操作系統 摘要 類型 觀察 9.png 原文:http://www.cnblogs.com/Chilam007/p/6445165.html analysis簡介 分析器就是對測試結果數據進行分析的組件,它

Linux0.11從開機到準備執行main函數的啟動學習

輸入輸出 沒有 tel 輸入 特性 目的 image 實時 概念 最近一直在看操作系統以及內核設計的東西,不確定自己有能力會參與到類似的開發之中,但是爭取能自己改造這內核玩一下,然後按照Linux From Scratch那樣的把改造後的系統編譯運行就心滿意足了。正在看的書

Linux0.11核心引導啟動過程概述

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

GitHub服務中斷24小時11分鐘事故分析報告

來源 | The GitHub Blog 譯者 | 無明 UTC 時間 10 月 21 日 22:52,為了更換髮生故障的 100G 光纖裝置,美國東海岸網路中心與美國東海岸資料中心之間的連線被斷開。連線在 43 秒後恢復,但這次短暫的中斷引發了一系列事故,導致 24 小時 1

PVS-Studio C/C++/C++11 靜態程式碼分析工具

  靜態程式碼分析儀是一種檢測程式碼缺陷、分析對比 商業程式碼的工具,它分析原始碼和它生成的目標 檔案,但並不實際執行原始碼。應用於對安全性、 穩定性要求很高的領域,比如航天、國防、工業 控制、金融等就需要嚴格的程式碼分析工具。PVS-Studio 能發現程式碼中一些潛

Nginx實戰 1.7-1.11 Nginx架構分析,虛擬機器配置

1.7-1.9 Nginx架構分析 Nginx模組化結構 Nginx涉及到的模組分為核心模組、標準HTTP模組、可選HTTP模組、郵件服務模組以及第三方模組等五大類。 核心模組 核心模組是指Nginx伺服器正常執行時必不可少的模組,它們提供了Nginx最基本最核心的服務,如程序管理、許可