1. 程式人生 > >ucore lab1實驗筆記

ucore lab1實驗筆記

閱讀 bio tool 一個 中斷 練習 時鐘 12個 調用棧

實驗目的:

操作系統是一個軟件,也需要通過某種機制加載並運行它。在這裏我們將通過另外一個更加簡單的軟件-bootloader來完成這些工作。為此,我們需要完成一個能夠切換到x86的保護模式並顯示字符的bootloader,為啟動操作系統ucore做準備。lab1提供了一個非常小的bootloader和ucore OS,整個bootloader執行代碼小於512個字節,這樣才能放到硬盤的主引導扇區中。通過分析和實現這個bootloader和ucore OS,讀者可以了解到:

  • 計算機原理

    • CPU的編址與尋址: 基於分段機制的內存管理
    • CPU的中斷機制
    • 外設:串口/並口/CGA,時鐘,硬盤
  • Bootloader軟件

    • 編譯運行bootloader的過程
    • 調試bootloader的方法
    • PC啟動bootloader的過程
    • ELF執行文件的格式和加載
    • 外設訪問:讀硬盤,在CGA上顯示字符串
  • ucore OS軟件

    • 編譯運行ucore OS的過程
    • ucore OS的啟動過程
    • 調試ucore OS的方法
    • 函數調用關系:在匯編級了解函數調用棧的結構和處理過程
    • 中斷管理:與軟件相關的中斷處理
    • 外設管理:時鐘

練習1:理解通過make生成執行文件的過程。

  1. 操作系統鏡像文件ucore.img是如何一步一步生成的?
  2. 一個被系統認為是符合規範的硬盤主引導扇區的特征是什麽?
當執行make時,一般只會顯示輸出,不會顯示make到底執行了哪些命令。如想了解make執行了哪些命令,可以執行:
$ make "V="
閱讀Makefile:
$ less Makefile

主引導扇區的特征,看這裏的代碼:

$ less tools/sign.c

練習2:使用qemu執行並調試lab1中的軟件。

  1. 從CPU加電後執行的第一條指令開始,單步跟蹤BIOS的執行。
  2. 在初始化位置0x7c00設置實地址斷點,測試斷點正常。
  3. 從0x7c00開始跟蹤代碼運行,將單步跟蹤反匯編得到的代碼與bootasm.S和 bootblock.asm進行比較。
  4. 自己找一個bootloader或內核中的代碼位置,設置斷點並進行測試。
查看 labcodes_answer/lab1_result/tools/lab1init 文件,用如下命令試試如何調試bootloader第一條指令:
$ cd labcodes_answer/lab1_result/
$ make lab1-mon

ucore lab1實驗筆記