最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章帶你使用C語(yǔ)言編寫(xiě)內(nèi)核

 更新時(shí)間:2021年08月13日 10:50:25   作者:Anita-Sun  
內(nèi)核是操作系統(tǒng)最核心的內(nèi)容,主要提供硬件抽象層、磁盤(pán)及文件系統(tǒng)控制、多任務(wù)等功能,由于其涉及非常廣泛的計(jì)算機(jī)知識(shí),很少被人們所熟悉,因而披上了一層神秘的面紗

gcc 命令

  • 使用 gcc 編譯 c語(yǔ)言

-c 編譯、匯編到目標(biāo)代碼,不進(jìn)行鏈接,也就是直接生成目標(biāo)文件

-o 將輸出的文件以指定文件名來(lái)儲(chǔ)存,有同名文件存在時(shí)直接覆蓋

gcc -c -o kernel/main.o kernel/main.c

編譯:編譯號(hào)之后只是個(gè)目標(biāo)文件,也稱(chēng)為待重定位文件,重定位指的是文件里面所用的符號(hào)還沒(méi)有安排地址,這些符號(hào)的地址需要將來(lái)與其他目標(biāo)文件“組成”一個(gè)可執(zhí)行文件時(shí)再重新定位(編排地址〉,這里的符號(hào)就是指該目標(biāo)文件中所調(diào)用的函數(shù)或使用的變量,而這里的“組成”就是指鏈接。需要在所有目標(biāo)文件都到齊了,將它們鏈接到 起時(shí)再重新定位(編排地址)

  • 使用 gcc 鏈接

-Ttext指定虛擬地址

-e 用來(lái)指定程序的起始地址(默認(rèn)為_(kāi)start)

gcc kernel/main.o -Ttext 0xc0001500 -e main -o kernel/kernel.bin

  • 編譯鏈接

生成的test.bin不再是目標(biāo)文件,而是可執(zhí)行文件

gcc -o ./kernel/test.bin ./kernel/main.c

  • main 函數(shù)不是第一個(gè)執(zhí)行的代碼,它一定是被其它代碼調(diào)用的,main函數(shù)在運(yùn)行庫(kù)代碼初始化完環(huán)境后才被調(diào)用

文件頭

二進(jìn)制文件的運(yùn)行方法

  • 在文件頭中寫(xiě)入和程序?qū)傩杂嘘P(guān)的信息
  • 將這種具有程序頭格式的程序文件從外存讀入到內(nèi)存后,從該程序文件的程序頭中讀出入口地址, 要直接跳進(jìn)入口地址執(zhí)行,跨過(guò)程序頭才行。

在這里插入圖片描述

  • header.S

編譯后生成的文件是 header.binnams -o header.bin header.S

在這里插入圖片描述

  • 調(diào)用方的執(zhí)行過(guò)程

在這里插入圖片描述

在這里插入圖片描述

  • 在實(shí)際中,程序頭和程序體相分離的文件叫 elf 格式

將內(nèi)核載入內(nèi)存

將內(nèi)核寫(xiě)入磁盤(pán)

dd if=./test/kernel/kernel.bin of=hd60M.img bs=512 count=200 seek=9 conv=notrunc

可以將編譯、鏈接、寫(xiě)入硬盤(pán)寫(xiě)成一個(gè)腳本

gcc -c -o test/kernel/main.o test/kernel/main.c && gcc test/kernel/main.o -Ttext 0xc0001500 -e main -o test/kernel/kernel.bin && dd if=./test/kernel/kernel.bin of=hd60M.img bs=512 count=200 seek=9 conv=notrunc

修改 loader.S

加載內(nèi)核:需要把內(nèi)核文件加載到內(nèi)存緩沖區(qū)。

初始化內(nèi)核:需要在分頁(yè)后,將加載進(jìn)來(lái)的 elf 內(nèi)核文件安置到相應(yīng)的虛擬內(nèi)存地址,然后跳過(guò)去執(zhí)行,從此 loader 的工作結(jié)束。

把內(nèi)核文件從硬盤(pán)上加載到內(nèi)存中

   mov eax, KERNEL_START_SECTOR               ; kernel.bin所在的扇區(qū)號(hào)
   mov ebx, KERNEL_BIN_BASE_ADDR              ; 從磁盤(pán)讀出后,寫(xiě)入到ebx指定的地址。加載到的內(nèi)存地址
   mov ecx, 200			                      ; 讀入的扇區(qū)數(shù)

   call rd_disk_m_32

   ; 創(chuàng)建頁(yè)目錄及頁(yè)表并初始化頁(yè)內(nèi)存位圖
   call setup_page

初始化內(nèi)核:初始化內(nèi)核就是根據(jù) elf 規(guī)范將內(nèi)核文件中的段( segment )展開(kāi)到(復(fù)制到)內(nèi)存中的相應(yīng)位置

總結(jié)

本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 使用C++程序獲取新浪行情數(shù)據(jù)的方法

    使用C++程序獲取新浪行情數(shù)據(jù)的方法

    這篇文章介紹了在一定的周期范圍內(nèi)去抓取新浪中行情數(shù)據(jù),通過(guò)更新數(shù)據(jù)來(lái)緩解構(gòu)造模擬數(shù)據(jù)與真實(shí)數(shù)據(jù)差異性,感興趣的朋友可以了解一下
    2015-07-07
  • C++面向?qū)ο笳Z(yǔ)言自制多級(jí)菜單功能實(shí)現(xiàn)代碼

    C++面向?qū)ο笳Z(yǔ)言自制多級(jí)菜單功能實(shí)現(xiàn)代碼

    菜單類(lèi)主要負(fù)責(zé)菜單的創(chuàng)建、修改、刪除,是包含菜單結(jié)構(gòu)組織和響應(yīng)函數(shù)的模型,用戶擁有充分的自主性,可根據(jù)需要自定義菜單顯示和響應(yīng)函數(shù),這篇文章主要介紹了C++面向?qū)ο笳Z(yǔ)言自制多級(jí)菜單,需要的朋友可以參考下
    2024-06-06
  • C語(yǔ)言雙向鏈表的原理與使用操作

    C語(yǔ)言雙向鏈表的原理與使用操作

    雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個(gè)數(shù)據(jù)結(jié)點(diǎn)中都有兩個(gè)指針,分別指向直接后繼和直接前驅(qū)。本文主要介紹了C語(yǔ)言算法中雙向鏈表的實(shí)現(xiàn),需要的可以參考一下
    2022-05-05
  • C++ LeetCode1775通過(guò)最少操作次數(shù)使數(shù)組和相等

    C++ LeetCode1775通過(guò)最少操作次數(shù)使數(shù)組和相等

    這篇文章主要為大家介紹了C++ LeetCode1775通過(guò)最少操作次數(shù)使數(shù)組和相等,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)創(chuàng)建及遍歷十字鏈表

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)創(chuàng)建及遍歷十字鏈表

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)十字鏈表的創(chuàng)建及遍歷,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-10-10
  • C++異常處理的方式總結(jié)

    C++異常處理的方式總結(jié)

    C++有一套獨(dú)立的異常處理機(jī)制,相信大家一定聽(tīng)說(shuō)過(guò)try,catch這兩
    個(gè)詞,今天就來(lái)做詳細(xì)的介紹,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),具有一定參考價(jià)值,需要的朋友可以參考下
    2023-12-12
  • 解析bitmap處理海量數(shù)據(jù)及其實(shí)現(xiàn)方法分析

    解析bitmap處理海量數(shù)據(jù)及其實(shí)現(xiàn)方法分析

    本篇文章是對(duì)bitmap處理海量數(shù)據(jù)及其實(shí)現(xiàn)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++派生類(lèi)與基類(lèi)的轉(zhuǎn)換規(guī)則

    C++派生類(lèi)與基類(lèi)的轉(zhuǎn)換規(guī)則

    基類(lèi)與派生類(lèi)對(duì)象之間有賦值兼容關(guān)系,由于派生類(lèi)中包含從基類(lèi)繼承的成員,具體表現(xiàn)在以下幾個(gè)方面,需要的朋友可以參考下
    2012-11-11
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易學(xué)生成績(jī)管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易學(xué)生成績(jī)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C++實(shí)現(xiàn)掃雷經(jīng)典小游戲

    C++實(shí)現(xiàn)掃雷經(jīng)典小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)掃雷經(jīng)典小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評(píng)論

潍坊市| 石城县| 武川县| 宜阳县| 安化县| 宜阳县| 惠水县| 临潭县| 清原| 成都市| 黔东| 明溪县| 博客| 离岛区| 连州市| 镶黄旗| 肥东县| 英山县| 竹北市| 厦门市| 荔浦县| 宁明县| 丁青县| 延川县| 望奎县| 贵溪市| 台东县| 读书| 精河县| 台湾省| 南澳县| 西峡县| 珠海市| 临夏县| 夹江县| 惠东县| 霍城县| 金寨县| 辰溪县| 项城市| 错那县|