2 關於啟動參數
啟動參數結構宣告在 linux/arch/x86/kernel/setup.c,而其內容則是在 vmlinux 核心正式啟動前就已經準備好了。
如果是以 GRUB2 啟動 LINUX,則啟動參數由 GRUB2 填寫。
如果是由其他載入器啟動 LINUX,並執行了 LINUX 的設置程式 SETUP.BIN,則啟動參數由 SETUP.BIN 填寫。
從啟動參數的宣告可以看出關於啟動參數的一些資訊。
__initdata 將啟動參數安置在區段 .init.data,這是在整個 vmlinux 核心映像很前面的地方,定義在 linux/arch/x86/kernel/vmlinux.lds。
程式區段 .init.data 的連結描述。
從開頭就先對齊 1<<12,接著就是放置程式區段 .init.text,再放程式區段 .init.data,而程式區段 .init.data 的第一個程式內容就是 .init.data。
所有 .init 的程式區段和資料結構都會放到這段記憶體,對齊分頁邊界 4KB,並且在記憶體初始化的過程中被保護,而得以維持住資料的內容。
行號 | 說明 |
01 | 記憶體對齊頁邊界 4KB。 |
02~03 | 宣告連結段落 .init.text,並於段落內放置 .init.text、.meminit.text。 |
03~04 | 宣告連結段落 .init.data,並於段落內放置 .init.data、.meminit.data、.init.rodata 以及其他程式。 |
啟動參數結構 boot_params 存放的內容很雜,主要是硬體相關的資訊,包括 BIOS、顯示器、磁碟機、系統記憶體等等。
因為 LINUX 是運作在保護模式,而且不會再回到真實模式,所以啟動參數結構必須收集存放於 BIOS 的硬體資訊。
在真實模式的啟動參數結構是一群變數,核心將啟動參數結構群組成一群結構,這樣的做法方便於管理。
行號 | 說明 |
02 | 顯示資訊結構,。 |
03 | APM BIOD 資訊結構,。 |
05 | 可信任啟動位址,INTEL TRUSTED EXECUTION TECHNOLOGY。 |
06 | IST 資訊結構。IST 是 INTEL SPEEDSTEP 的簡稱。 |
08 | 第一個硬碟資訊,。 |
09 | 第二個硬碟資訊,。 |
10 | MCA 系統描述表結構。MCA 是 IBM MICRO CHANNEL ARCHITECTURE 的簡稱。 |
11 | OLPC 檔頭結構。 OLPC 是 ONE LAPTOP PER CHILD 的簡稱。 |
13 | EDID 結構,顯示器描述結構。 |
14 | EFI 資訊結構。EFI 是 EXTENDED FIRMWARE INTERFACE。 |
15 | 可變記憶體體積,這是指位於 1MB~16MB 之間的記憶體。 |
16 | ??,。 |
17 | E820 記憶體對映單元數目,最高是 128。 |
18 | EDD 緩衝區數,。 |
19 | EDD 主要啟動表的特性緩衝區數目,??。 |
21 | 設置程式檔頭結構,。 |
23 | EDD 主要啟動表的特性緩衝區陣列,最大 16 個特性紀錄。 |
24 | E820 記憶體對映資訊,可儲存 128 個記憶體對映單元,用於紀錄 BIOS 記憶體資訊。 |
26 | EDD 資訊結構,可存放六個磁碟資訊。 |
顯示資訊結構。
行號 | 說明 |
02 | X 軸螢幕游標位置,。 |
03 | Y 軸螢幕游標位置,。 |
04 | 延伸記憶體,。 |
05 | 視訊頁數,。 |
06 | 視訊模式,。 |
07 | 視訊寬度,。 |
08 | 視訊旗號,。 |
10 | EGA 視訊 BX??,。 |
12 | 視訊高度,。 |
13 | 有 VGA 旗號,。 |
14 | 字型體積,。 |
15 | LINUX FRAME BUFFER 的寬度,FRAME BUFFER 是指視窗緩衝區??。 |
16 | LINUX FRAME BUFFER 的高度,。 |
17 | LINUX FRAME BUFFER 的深度,。 |
18 | LINUX FRAME BUFFER 的基底,。 |
19 | LINUX FRAME BUFFER 的體積,。 |
20 | 命令列特徵值,。 |
21 | 命令列偏移植,。 |
22 | LINUX FRAME BUFFER 的線長度,??。 |
23 | 紅色遮罩體積,8 位元。 |
24 | 紅色參數位置,第 16 位元。 |
25 | 綠色遮罩體積,8 位元。 |
26 | 綠色參數位置,第 8 位元。 |
27 | 藍色遮罩體積,8 位元。 |
28 | 藍色參數位置,第 0 位元。 |
29 | 保留遮罩體積,8 位元。 |
30 | 保留參數位置,第 24 位元。 |
31 | VESAPM 的節區值,。 |
32 | VESAPM 的偏移值,。 |
33 | LINUX FRAME BUFFER 的分頁數,。 |
34 | VESA 屬性值,。 |
35 | 能力值,。 |
先進電源管理 BIOS 資訊結構。
行號 | 說明 |
01 | ,。 |
01 | APM 版本,APM 是 ADVANCE POWER MANAGEMENT。 |
01 | APM 程式碼節區,。 |
01 | APM 程式入口點,。 |
01 | APM 16 位元程式節區,。 |
01 | APM 資料節區,。 |
01 | APM 旗號群,。 |
01 | APM 程式體積,。 |
01 | APM 資料體積,。 |
IST 資訊結構。
IST 是 INTEL SPEED STEP 技術的簡稱。
行號 | 說明 |
01 | ,。 |
01 | IST 特徵值,IST 是 INTEL SPEED STEP。 |
01 | IST 命令,。 |
01 | IST 事件,。 |
01 | IST 效能層級,。 |
MCA 系統描述表結構。
MCA 是 IBM MICROCHANNEL ARCHITECTURE 的簡稱。
OFW 的 OLPC 檔頭結構。
OFW 是 OPEN FIRMWARE 的簡寫。
OLPC 是 ONE LAPTOP PER CHILD 的簡寫。
行號 | 說明 |
01 | ,。 |
01 | OFW 特徵值, ofw 是 OPEN FIRMWARE ??。 |
01 | OFW 項目數,。 |
01 | OFW CIF 處理函式,。 |
01 | OFW 中斷描述表,。 |
EDID 表結構。
EDID 是 EXTENDED DISPLAY INFORMATION DESCRIPTION 的簡稱,通常由 DVI 或 HDMI 介面提供,用以描述顯示器的顯示規格。
EFI 資訊結構。
EFI 是 EXTENDED FIRMWARE INTERFACE 的簡稱。
設置程式檔頭結構。
行號 | 說明 |
01 | 宣告設置程式檔頭結構。 |
02 | 設定設置程式磁區數,磁區體積為 512 位元組,由 build.c 填寫。 |
03 | 設定根旗號 root_flags,值應該是一。 |
04 | 設定系統映像體積,即 LINUX 自我解壓縮映像檔體積。 |
05 | 變數 ram_size 已經沒有用,。 |
06 | 顯示模式,值應該是 0xFFFD。linux/arch/x86/include/asm/boot.h。 |
07 | 根裝置特徵值,由 build.c 填寫。 |
08 | 啟動旗號,0x55AA。 |
09 | 跳躍指令,用來跳躍到設置程式的執行入口點 start_of_setup。 |
10 | 設置程式檔頭字串 HdrS。 |
11 | 設置程式版本號碼,如 0x020A。 |
12 | 真實模式切換變數 realmode_swtch,值為 0。 |
13 | 啟動節區值 0x1000。這是早期 LINUX 的啟動位址,現在已經沒有用了。 |
14 | 核心版本字串指標,用來指向核心版本字串。 |
15 | 載入器類型,值為 0,使用 ancient bootloader。 |
16 | 載入旗號,值為一表示可以使用 HEAP。 |
17 | 設置程式移動體積值,0x8000。當 setup 的載入位址不是 0x90000。 |
18 | 啟動位址 0x100000,LINUX 的啟動位址。 |
19 | ram disk 的載入位址。 |
20 | ram disk 的體積值,。 |
21 | 變數已經沒有用,。 |
22 | 指向 heap 的結束位址,。 |
23 | Extended boot loader version,載入器版本。 |
24 | Extended boot loader type,載入器型態。 |
25 | cmd_line_ptr,命令列指標指向核心命令列。位於設置程式起始位址和 0xA0000 之間。 |
26 | RAM DISK 的最大值。 |
27 | 核心對齊值為 0x1000000。 |
28 | 核心重定址旗號為一,表示核心可重定址。 |
29 | 最小對齊值 13,即 8KB。 |
30 | 命令列體積值 2047。 |
31 | X86 的硬體子架構值為 0。 |
32 | 硬體子架構的資料值為 0。 |
33 | payload_offset,值為 0x6c。 |
34 | payload_length,值為 0x48c646。 |
35 | setup_data,設定資料指標,64 位元才有用到。 |
BIOS 記憶體對映單元結構。
由BIOS INT?? E820 命令提供。
行號 | 說明 |
02 | 記憶體起始位址,。 |
03 | 記憶體體積,。 |
04 | 記憶體類型,。 |
EDD 資訊結構。
EDD 是 EXTENDED DISK DRIVE 的簡稱。
行號 | 說明 |
01 | 裝置名稱,。 |
01 | 裝置版本,。 |
01 | 裝置介面,。 |
01 | 裝置最大磁柱值,。 |
01 | 裝置最大磁頭值,。 |
01 | 磁軌最大磁區值,。 |
01 | 裝置參數結構,。 |
EDD 裝置參數結構。
|