日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

清华操作系统实验课程实验一:系统软件启动过程

發布時間:2023/12/31 windows 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 清华操作系统实验课程实验一:系统软件启动过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ucore_lab1_練習一

(本示例中,如果輸入行前面出現美元符號($),表示這是命令行提示符。緊接其后的是命令行,可以通過控制臺輸入命令)

理解通過make生成執行文件的過程

通過靜態分析代碼來了解:

  • 操作系統鏡像文件ucore.img是如何一步一步生成的?(需要比較詳細地解釋Makefile中每一條相關命令和命令參數的含義,以及說明命令導致的結果)
  • 一個被系統認為是符合規范的硬盤主引導扇區的特征是什么?
  • 注:前面為一些基礎知識,看題目答案可直接到:二、make生成過程分析 中的 第2點第3點

    一、預備知識

    關于編譯和鏈接:程序編譯的過程

    對于在沒有匯編知識的時候有些不理解,所以寫一下
    類似于C、C++,有一個源文件,在Windows下也就是 .asm 文件。
    編譯過程首先要把源文件編譯成中間代碼文件,在Windows下也就是 .obj 文件,UNIX下是 .o文件,即 Object File,這個動作叫做編譯(compile)。然后再把大量的Object File合成執行文件,這個動作叫作鏈接(link),也就是把==.obj== 文件進行鏈接。

    關于gcc:

    GCC 編譯器是 Linux 下默認的 C/C++ 編譯器,大部分 Linux 發行版中都是默認安裝的。GCC 編譯器通常以 Linux 命令的形式在終端(Shell)中使用,它有很多選項。
    GCC 僅僅是一個編譯器,沒有界面,必須在命令行模式下使用。通過gcc命令就可以將源文件編譯成可執行文件。
    GCC 既可以一次性完成C語言源文件的編譯,也可以分步驟完成。
    (這里給出一些這次實驗用到的gcc命令,更詳細gcc教程參考:)

    1. 在類 Unix 操作系統(Unix、Linux、Mac OS 等)中檢測是否已經安裝GCC編譯器

    $ gcc --version


    如圖“cc”也可以

    2. gcc 命令
  • gcc -c 命令:只編譯不鏈接,僅生成目標文件
    -c選項表示編譯、匯編指定的源文件(也就是編譯源文件),但是不進行鏈接。使用-c選項可以將每一個源文件編譯成對應的目標文件。
    目標文件是一種中間文件或者臨時文件,如果不設置該選項,gcc 一般不會保留目標文件,可執行文件生成完成后就自動刪除了。
    例如:
  • $ gcc -c bootmain.c

    編譯bootmain.c源文件

  • gcc -o命令:指定輸出文件
    它的用法為:
  • $ [infile] -o [outfile]

    [infile] 表示輸入文件(也即要處理的文件),它可以是源文件,也可以是匯編文件或者是目標文件;[outfile] 表示輸出文件(也即處理的結果),它可以是預處理文件、目標文件、可執行文件等。

    關于gdb

    UNIX及UNIX-like下的調試工具。具有修復網絡斷點以及恢復鏈接等功能,比BCB的圖形化調試器有更強大的功能。
    GDB主要幫助你完成下面四個方面的功能:
    1、啟動你的程序,可以按照你的自定義的要求隨心所欲的運行程序。
    2、可讓被調試的程序在你所指定的調置的斷點處停住。(斷點可以是條件表達式)
    3、當程序被停住時,可以檢查此時你的程序中所發生的事。
    4、你可以改變你的程序,將一個BUG產生的影響修正從而測試其他BUG。

    關于Makefile

    所要完成的Makefile 文件描述了整個工程的編譯、連接等規則。其中包括:工程中的哪些源文件需要編譯以及如何編譯、需要創建哪些庫文件以及如何創建這些庫文件、如何最后產生我們想要的可執行文件。

    makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。

    make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數的IDE都有這個命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成為了一種在工程方面的編譯方法。

    二、make生成過程分析

    1、執行Makefile文件的方法

    進入 Makefile 文件所在位置執行 make 命令

    $ cd [文件位置]


    1是文件位置,用清華的系統應該都是這個位置,
    進入文件后用命令

    $ ls

    看到有Makefile文件,執行make命令

    $ make

    如果已經執行過make文件則會顯示nothing to be啥啥啥,用以下命令清除之前make的執行結果:

    $ make clean


    然后看到 + cc 我覺得就是在調用gcc 編譯器編譯 .c 文件,然后執行結果生成一個名為 obj 的文件夾

    然后執行命令:

    $ man make

    可以看到應該是關于make命令的使用手冊

    2、Makefile文件干了什么,如何一步一步生成本次實驗問的鏡像文件ucore.img

    1、用make V=命令查看make命令的詳細執行過程

    $ make V=


    然后顯示makefile文件詳細執行過程
    其中:
    1、

    +cc kern/init/init.c
    表示編譯了 kern/init 文件中的 init.c 文件

    -ggdb : 生成可供gdb使用的調試信息
    -m32 :生成適用于32位環境的代碼
    -gstabs :生成stabs格式的調試信息
    -nostdinc :不在標準系統文件夾尋找頭文件,只在-I等參數指定的文件夾中搜索頭文件
    -fno-stack-protector :不生成用于檢測緩沖區溢出的代碼
    -Os 為減小代碼大小而進行優化

    標黑的一段表示將 init.c 文件編譯為輸出文件 init.o 并放入 obj 文件夾中
    之后的類似的+cc開頭的代碼均執行了這樣一個過程

    2、

    這里的 .S 文件是經過預編譯的匯編語言源代碼文件

    3、

    ld 命令目標文件轉化成可執行程序,這里轉化成 bootblock.out,可以理解成一個Bootloader的執行程序

    4、

    dd 命令把Bootloader放到一個虛擬的硬盤里去,這里生成一個虛擬硬盤叫 uCore.img ,這個虛擬硬盤就會基于里面的數據來執行相應的代碼

    5、

    這里生成兩個軟件,第一個是Bootloader,第二個是kernel,kernel是uCore的組成部分

    3、被系統認為是符合規范的硬盤主引導扇區的特征

    這里需要看一下一個文件:

    在tools文件夾中的sign.c文件,這個文件中完成了特征的標記
    查看sign.c文件內容:

    按照這個文件的描述,需要檢查以下幾點:

    輸入的主引導扇區的記錄必須是510字節以內(446+64)
    輸出的主引導扇區的最后兩個字節是55AA
    bootblock就是需要用到的主引導扇區

    總結

    以上是生活随笔為你收集整理的清华操作系统实验课程实验一:系统软件启动过程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。