亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > FreeBSD > 正文

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

2024-07-26 00:29:16
字體:
來源:轉載
供稿:網友

這介紹 FreeBSD 的 kernel, 目前暫不包含 SMP 的部分. 我是以我個人的想法去記錄下, 當我看到 code 時腦中的想法. 如果你有什麼建議, 能讓你更容易看懂, 請 mail 給我. 謝謝! 
i386/i386/locore.s 
   boot loader 將 kernel binary 讀入 memory 後, kernel 的進入點. 
i386/i386/machdep.c 
   和機器相關之 function. 
i386/i386/pmap.c 
   physcial mapping module. 
kern/init_main.c 
   執行 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

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

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

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

258 行, call identify_cpu 以辨別 CPU 的型號. identify_cpu 會設
定幾個 global 變數.
_cpu CPU 的種類, 為 32 bits 的整數, 所有的 constant
都定義在 i386/include/cputypes.h, 45行-60行.
相對應的文字和 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. 設定進行入 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 執行. 在執行完 ret 後, IP register
將指到我們所期望的 KERNBASE virtual address.

353-359行, 重新設立 stack 和 PCB.

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

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


create_pagetable: 744行,
746-778行, 計算出 kernel 結束的位址, 并設立兩個 global 變數,
_KERNend kernel 的結束位址.
physfree 尚未使用的記憶. 在初使階段, physical
address 的配置是從 kernel 之後的空間,
依序配置. 在此設立此變數, 以記錄目前
可用空間的開始位置.
781-814行, 為各種系統資料配置記憶空間.
_KPTphys kernel 所使用的 page table. 共 NKPT 個
page. (physical address)
_IdlePTD page table directory. 有關 page table
架構, 請參考 Intel 所出的 programming
guide. (physical address)
p0upa UPAGE (physical address)
_proc0paddr (virtual address)
vm86phystk
_vm86pa
_vm86paddr (virtual address)
831-935行, 設定 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 兩次. 主要是因為目前的指令實際執行的 address
為 physical address, 當一開始 enable paging 時, 將會
產生一個模糊地帶, 使的我們 address 依然是以 physcial
address 的值進行 map, 而不是我們所希望的 KERNBASE
為其 base. 因此, 我們做此 map, 以便在 enable paging
之後, 可以順利的執行正確的 code.
926-929行, 將 _KPTphys 安裝在 page table directory(PDE) 正確的位置,
使 kernel map 到 KERNBASE.
932-935行, 將 PDE 安裝在 PDE 上, 這是一個 recursive 的做法, 如
此會使的 PDE 在第二層 mapping 時, 轉而成為 page table,
使的原本 PDE 所 mapping 的 page table 反而成為最後的
destination memory. 我們可以直接透過 mapping 直接讀每
一個 page table.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久噜噜噜精品国产亚洲综合| 亚洲精品一二区| 久久久久久高潮国产精品视| 欧美在线免费看| 国产综合视频在线观看| 欧洲午夜精品久久久| 亚洲成人激情在线观看| 亚洲成人av在线播放| 久久色精品视频| 国产91网红主播在线观看| 国产一区二区三区免费视频| 国产精品揄拍一区二区| 成人免费午夜电影| 日韩视频免费在线观看| 日韩欧美国产一区二区| 午夜欧美不卡精品aaaaa| 欧美日韩国产999| 久久久免费观看视频| 亚洲欧美日本精品| 中文字幕v亚洲ⅴv天堂| 欧美性猛交xxxx久久久| 亚洲男人的天堂在线| 亚洲欧美色图片| 成人精品久久av网站| 亚洲深夜福利网站| 久久99青青精品免费观看| 日韩不卡在线观看| 欧美精品亚州精品| 成人免费淫片视频软件| 亚洲国产小视频在线观看| 国产www精品| 日韩在线观看你懂的| 第一福利永久视频精品| 91超碰caoporn97人人| 国产日韩在线一区| 精品久久久久久久久久国产| 日韩有码在线电影| 国产一区二区精品丝袜| 超薄丝袜一区二区| 久久男人av资源网站| 亚洲国产日韩一区| 亚洲四色影视在线观看| 国产成人在线精品| 亚洲欧洲成视频免费观看| 中文字幕久热精品视频在线| 亚洲丝袜av一区| 久久国产精品首页| 日韩国产欧美精品一区二区三区| 亚洲国产精品99久久| 中文字幕欧美精品在线| 午夜精品久久久久久久99热| 日韩av网站导航| 国产一区二区三区欧美| 日日骚av一区| 国产成人精品网站| 97色伦亚洲国产| 成人午夜在线观看| 欧美日韩国产999| 日本高清视频一区| 欧美裸体xxxx极品少妇| 久久人人爽亚洲精品天堂| 国产日产欧美精品| 欧美日韩在线第一页| 欧美极品美女电影一区| 国模吧一区二区| 欧美电影在线观看| 国产精品美女午夜av| 最近2019中文字幕mv免费看| 亚洲免费精彩视频| 萌白酱国产一区二区| 欧美激情小视频| 久久精品视频中文字幕| 久久精品久久久久久国产 免费| 欧美福利视频网站| 欧美最猛黑人xxxx黑人猛叫黄| 国产精品入口福利| 久久精品国产亚洲精品2020| 国产欧美精品一区二区三区介绍| 国产精品视频播放| 久久久免费精品| 久久国产精品99国产精| 成人中文字幕+乱码+中文字幕| 亚洲欧美制服中文字幕| 国产成人精品综合久久久| 久久久中文字幕| 精品magnet| 亚洲第一页在线| 国产99久久精品一区二区 夜夜躁日日躁| 美女视频黄免费的亚洲男人天堂| 俺也去精品视频在线观看| www.日韩免费| 国产精品网红福利| 亚洲在线观看视频| 在线观看日韩av| 成人福利视频网| 国产欧美一区二区三区久久人妖| 日韩小视频在线观看| 久热爱精品视频线路一| 国产精品高精视频免费| 亚洲欧美日韩区| 亚洲午夜国产成人av电影男同| 日本韩国欧美精品大片卡二| 亚洲美女av黄| 久久夜色精品国产| 亚洲人成电影在线| 免费99精品国产自在在线| 日韩大胆人体377p| 中文字幕精品在线视频| 色伦专区97中文字幕| 国内精品久久影院| 欧美交受高潮1| 精品久久久一区| 成人97在线观看视频| 欧美性做爰毛片| 国产精品极品在线| 欧美激情日韩图片| 亚洲欧美中文字幕在线一区| 成人在线免费观看视视频| 亚洲美女福利视频网站| 色婷婷**av毛片一区| 97av在线视频免费播放| 97av在线视频免费播放| 欧美极品少妇与黑人| 亚洲美女精品成人在线视频| 国产精品av网站| 96精品视频在线| 国产精品永久免费视频| 国产99久久久欧美黑人| 亚洲精品一二区| 国产成人精品久久亚洲高清不卡| 欧美日韩性视频在线| 亚洲精品之草原avav久久| 91精品啪在线观看麻豆免费| 久久免费成人精品视频| 51ⅴ精品国产91久久久久久| 欧美一区二区三区精品电影| 不卡av电影在线观看| 国产精品自拍网| 国内外成人免费激情在线视频| 亚洲精品理论电影| 欧美视频在线看| 久久夜精品香蕉| 日韩高清电影好看的电视剧电影| 欧美日韩国产在线看| 97碰在线观看| 亚洲欧美另类国产| 久久欧美在线电影| 欧美午夜精品伦理| 亚洲人成欧美中文字幕| 久久久久国产视频| 久久久精品国产| 91成人免费观看网站| 日韩电影大片中文字幕| 欧美激情视频网站| 欧美日韩亚洲系列| 久久久久99精品久久久久| 国产精品444| 国产日韩欧美自拍| 69av视频在线播放| 大伊人狠狠躁夜夜躁av一区| 国产亚洲精品高潮| 姬川优奈aav一区二区| 亚洲国产精品国自产拍av秋霞| 国产ts一区二区|