歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux 2.4.0 內核bootsect.S文件完全注釋

Linux 2.4.0 內核bootsect.S文件完全注釋

日期:2017/3/1 11:08:46   编辑:Linux編程

說明一下,這裡省略了一些print信息,目的是為了使代碼短一些,而且print信息的代碼都很簡單,大家有興趣可以自己讀一下。

#include <linux/config.h> /* for CONFIG_ROOT_RDONLY */

#include <asm/boot.h>

// 我把這些宏的定義都列在下面了。

SETUPSECS =4 /* default nr ofsetup-sectors */

BOOTSEG =0x07C0 /* original address ofboot-sector */

INITSEG =0x9000 /* we move boot here - out of theway */

SETUPSEG =0x9020 /* setup starts here */

SYSSEG =0x10000 /* system loadedat 0x10000 (65536) */

SYSSIZE =0x7F00 /* system size: # of16-byte clicks */

/* to be loaded */

ROOT_DEV =0 /* ROOT_DEV is nowwritten by "build" */

SWAP_DEV =0 /* SWAP_DEV is nowwritten by "build" */

#ifndef SVGA_MODE

#define SVGA_MODE ASK_VGA

#endif

#ifndef RAMDISK

#define RAMDISK 0

#endif

#ifndef CONFIG_ROOT_RDONLY

#define CONFIG_ROOT_RDONLY 1

#endif

// 在此這上的部分,是不會出現在編譯運行的二進制中的,這一部分內容只是匯編器所需要的信息

//下面是真正運行的代碼了

.code16 // 表示下面的代碼運行在16位模式下

.text

.global _start //global標簽的意思是讓鏈接器可以看到_start符號。

_start:

/* section 1的內容很簡單,開機上電bios會把啟動設備的一個扇區,加載到0x0:0x7c00

* 即BOOTSEG,並跳轉到這裡執行,然後程序會把自己搬運到0x:0x9000,如何搬?下面的* 代碼很簡單,不說了!為什麼搬?最好的解釋是,這塊內存後面會挪作他用。

Copyright © Linux教程網 All Rights Reserved