?? setup.c.txt
字號(hào):
any problems,send mails to lysindybear@sina.com.cn
相關(guān)函數(shù)
/arch/i386/e820.c
這個(gè)函數(shù)是系統(tǒng)啟動(dòng)以后的主要的初始化函數(shù),包括對(duì)主板的識(shí)別,內(nèi)存的識(shí)別
void __init setup_arch(char **cmdline_p)
……
parse_mem_cmdline(cmdline_p); //解析在lilo或者grub中所配置的參數(shù),例如append mem="640M"
start_pfn = PFN_UP(__pa(&_end));
max_pfn = 0;
for (i = 0; i < e820.nr_map; i++) {
unsigned long start, end;
/* RAM? */
if (e820.map[i].type != E820_RAM)
continue;
start = PFN_UP(e820.map[i].addr);
end = PFN_DOWN(e820.map[i].addr + e820.map[i].size);
if (start >= end)
continue;
if (end > max_pfn)
max_pfn = end;
} //紀(jì)錄監(jiān)測到的內(nèi)存的開始和結(jié)束,按4k頁計(jì)算。最后將最大頁號(hào)記錄到變量max_pfn中
…… //對(duì)內(nèi)存大小進(jìn)行有效性驗(yàn)證
highstart_pfn = highend_pfn = max_pfn;
if (max_pfn > MAXMEM_PFN) {
highstart_pfn = MAXMEM_PFN;
printk(KERN_NOTICE "%ldMB HIGHMEM available.\n",
pages_to_mb(highend_pfn - highstart_pfn));
} //紀(jì)錄highstart_pfn,也就是high_memory的開始頁號(hào)
…… //對(duì)內(nèi)存按照啟動(dòng)要求配置bootmem,啟動(dòng)以后用不著了
paging_init(); //這是最為重要的一個(gè)函數(shù),進(jìn)行頁表初始化
probe_roms(); //監(jiān)測所有的ROM
for (i = 0; i < e820.nr_map; i++) {
request_resource(&iomem_resource, res);
…… //為監(jiān)測到的內(nèi)存使用request_resource將資源放入到資源樹中
}
請(qǐng)求io資源
for (i = 0; i < STANDARD_IO_RESOURCES; i++)
request_resource(&ioport_resource, standard_io_resources+i);
}
static void __init probe_roms(void) //統(tǒng)一將系統(tǒng)中的ROM資源放入資源樹中
// video ROM 的范圍 C000:0000 - C7FF:0000, 監(jiān)察 signature
for (base = 0xC0000; base < 0xE0000; base += 2048)
request_resource(&iomem_resource, rom_resources + roms);//加入資源樹中
// 擴(kuò)展 roms 在 C800:0000 - DFFF:0000
for (base = 0xC8000; base < 0xE0000; base += 2048)
request_resource(&iomem_resource, rom_resources + roms);//加入資源樹中
/* 最后檢查主板上的 rom 范圍 E000:0000 */
base = 0xE0000;
romstart = bus_to_virt(base);
request_resource(&iomem_resource, rom_resources + roms);//加入資源樹中
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -