麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統(tǒng) > FreeBSD > 正文

FreeBSD 4.0 Kernel Hacking Guide--i386/i386/l

2024-07-26 00:29:16
字體:
供稿:網(wǎng)友

這介紹 FreeBSD 的 kernel, 目前暫不包含 SMP 的部分. 我是以我個人的想法去記錄下, 當(dāng)我看到 code 時腦中的想法. 如果你有什麼建議, 能讓你更容易看懂, 請 mail 給我. 謝謝! 
i386/i386/locore.s 
   boot loader 將 kernel binary 讀入 memory 後, kernel 的進入點. 
i386/i386/machdep.c 
   和機器相關(guān)之 function. 
i386/i386/pmap.c 
   physcial mapping module. 
kern/init_main.c 
   執(zhí)行 sub-system 的初始. 
vm/vm_init.c 
   vm sub-system 初始. 
vm/vm_page.c 
   vm_page module. 
vm/vm_object.c 
   vm_object module. 

-----------------------------------------------
i386/i386/locore.s

當(dāng) boot loader load kernel 之後, i386/i386/locore.s
為 kernel 的進入點. 第一個被執(zhí)行的 code 為 label btext 所標
示的 assembly code.

boot manager (bootstrap) 會從 stack 傳入. 最主要的的參數(shù)是
bootinfo, 開機時使用者所下的參數(shù)和 bios 資料. 248 行 call
recover_bootinfo, recover_bootinfo 即從 stack 取得 bootinfo,
即之存入變數(shù) _bootinfo, 讓以後的 C code 可以直接以 global
變數(shù)(bootinfo)讀使.

256 行, 設(shè)立之一個新的 stack 供之後的 instruction 使用. stack
之所以在此設(shè)立, 是因為我們必需先從舊的 stack 取得 bootinfo 的
內(nèi)容, 然後才可以設(shè)立新的 stack, 丟棄舊的 stack.

258 行, call identify_cpu 以辨別 CPU 的型號. identify_cpu 會設(shè)
定幾個 global 變數(shù).
_cpu CPU 的種類, 為 32 bits 的整數(shù), 所有的 constant
都定義在 i386/include/cputypes.h, 45行-60行.
相對應(yīng)的文字和 CPU 分類, 定義在 i386/i386/identcpu.c
, 89行, i386_cpus.
_cpu_vendor CPU 造商.
_cpu_id CPU 的 ID. 也許就是 Intel 所提的序號.
_cpu_feature unknow ???

303-309 行, 清除 bss.

311 行, call create_pagetable. 設(shè)定進行入 PRotected mode 之後,
enable paging 所需的 page table. create_pagetable 的說明請見
後面的說明.

316-336行, enable paging mechanical. 在此, ip register 的 value
為 kernel 的 physical address, 因此會使用到 create_pagetable
920-923行, 重 mapping 的 page table.

347-348行, 以 ret 的方式跳到 begin 執(zhí)行. 在執(zhí)行完 ret 後, IP register
將指到我們所期望的 KERNBASE virtual address.

353-359行, 重新設(shè)立 stack 和 PCB.

363行, call _init386, i386/i386/machdep.c, 1802行, function init386.
傳入 physfree, 尚未使用的 free memory. init386 設(shè)定各種
cpu 會使用到的 table, 如 gdt, ldt, idt, tss. 并進行 proc0
的資料設(shè)定. init386 所進行的工作為雜, 主要是進行初始化
的動作, 以讓機器(CPU+內(nèi)部裝置)可以順利的在 protected mode 運作.
詳細動作, 請見專篇報導(dǎo).

377行, call _mi_startup, 執(zhí)行 mi_startup 函數(shù), kern/init_main.c, 171行.
從此開始, 正式進入 kernel 的核心部分.


create_pagetable: 744行,
746-778行, 計算出 kernel 結(jié)束的位址, 并設(shè)立兩個 global 變數(shù),
_KERNend kernel 的結(jié)束位址.
physfree 尚未使用的記憶. 在初使階段, physical
address 的配置是從 kernel 之後的空間,
依序配置. 在此設(shè)立此變數(shù), 以記錄目前
可用空間的開始位置.
781-814行, 為各種系統(tǒng)資料配置記憶空間.
_KPTphys kernel 所使用的 page table. 共 NKPT 個
page. (physical address)
_IdlePTD page table directory. 有關(guān) page table
架構(gòu), 請參考 Intel 所出的 programming
guide. (physical address)
p0upa UPAGE (physical address)
_proc0paddr (virtual address)
vm86phystk
_vm86pa
_vm86paddr (virtual address)
831-935行, 設(shè)定 page table. 將所有上面配置的空間和 kernel 所占之間空
依 physical addr 順序, map 到 virtual address 的 KERNBASE 位址.
831-834行, 將 kernel 的 text section map 成為 read only page.
837-851行, 將 kernel 的 data, bss 和symbols map 成為 read-write
page.
..........
920-923行, 將第一個 page table map 到 page directory 的第一個
entry. 這一個 page table 將會"暫時"在 page directory
map 兩次. 主要是因為目前的指令實際執(zhí)行的 address
為 physical address, 當(dāng)一開始 enable paging 時, 將會
產(chǎn)生一個模糊地帶, 使的我們 address 依然是以 physcial
address 的值進行 map, 而不是我們所希望的 KERNBASE
為其 base. 因此, 我們做此 map, 以便在 enable paging
之後, 可以順利的執(zhí)行正確的 code.
926-929行, 將 _KPTphys 安裝在 page table directory(PDE) 正確的位置,
使 kernel map 到 KERNBASE.
932-935行, 將 PDE 安裝在 PDE 上, 這是一個 recursive 的做法, 如
此會使的 PDE 在第二層 mapping 時, 轉(zhuǎn)而成為 page table,
使的原本 PDE 所 mapping 的 page table 反而成為最後的
destination memory. 我們可以直接透過 mapping 直接讀每
一個 page table.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美性生活久久 | 日韩美香港a一级毛片免费 日韩激情 | 中文字幕欧美视频 | 欧洲精品视频在线观看 | 爱逼av | 国产美女的小嫩bbb图片 | 久久久久久久黄色片 | 91黄瓜视频| 毛片成人网 | 男女一边摸一边做羞羞视频免费 | 色999中文字幕 | 中文字幕在线观看1 | 色毛片 | 国产午夜精品一区二区三区四区 | 在线日韩av电影 | 91一区二区三区久久久久国产乱 | 亚洲视频综合网 | 精品三区视频 | 蜜桃视频最新网址 | 中文字幕综合在线观看 | 成人黄色网战 | 亚州成人在线观看 | 欧美成人高清视频 | 国产在线免 | 久久蜜桃精品一区二区三区综合网 | 欧美成人小视频 | 欧美一级高潮 | 成人免费在线视频播放 | 国产亚洲综合一区二区 | 免费在线观看午夜视频 | 免费毛片随便看 | 羞羞答答影院 | 男女羞羞视频 | 中文字幕一二三区芒果 | 精品一区二区免费视频视频 | 一区二区三区日本在线观看 | 久久经典免费视频 | 久草在线综合网 | va免费视频 | 国产亚洲精品久久久久婷婷瑜伽 | 99国产精品欲a |