天天看點

Linux作業系統的BIOS啟動流程

       要了解大緻的啟動流程現需要了解幾組常用的寄存器:

       1,CS + IP:其中CS是段寄存器,或者是CODE段寄存器,存儲的是段的基位址。IP是程式段寄存器的偏移量。兩者結合,确定下一條CPU指令的執行位址。

       2,SS + SP:其實,SS是堆棧寄存器,而SP是堆棧寄存器偏移。前者存儲的是堆棧的基位址,後者存儲的是棧的棧頂。另外,如果使用到了BP,預設的基位址也是SS,通過BP可以通路的不僅僅是棧頂,通過SS和BP可以通路整個堆棧。

       3,DS/ES + 有效位址,這一組寄存器決定是附加資料的。

       上面就是常用的幾組寄存器,其中Linux啟動階段關系比較大的還是第一組。

       當電腦啟動或者複位的按鈕按下的時候,CPU會把CS寄存器設定為0xFFF0,段基位址設定為0xFFFF0000,段長度設定為64KB。而IP被設定為0xFFF0。是以此時CPU的代碼指向0xFFFFFFF0,也就是4GB最後64KB的最後64B處。

       上面這段基本上是來自于别人的書籍,但是從了解來看,最初的CS寄存器指派為0xFFF0我還是沒有弄明白什麼含義。是完全沒有用還是指派為0xFFF0之後其段基位址的數值就是0xFFFF0000?總體的程式執行位置還是把握住基位址加IP偏移量計算出來應該問題就不大了。

       程式的運作位置正好是現在的系統BIOS的存放位置,而這裡會存放一條JMP的指令。跳轉到BIOS的程式中的某個位置開始執行。

繼續閱讀