macbook 編寫作業系統 前置知識

2021-10-09 18:55:39 字數 1547 閱讀 9460

makefile有三個非常有用的變數。分別是$@,$^,$《代表的意義分別是: 

$@--目標檔案,$^--所有的依賴檔案,$<--第乙個依賴檔案。

你不可能在一台「裸機」上進行開發,所以你需要在自己的機器(host)上寫你的作業系統,然後讓編譯器將源**編譯成目標機器(guest)上執行的**。這樣的「跨平台」編譯則需要交叉編譯器(cross compiler)的支援,gcc就是乙個非常好的交叉編譯器!

選定了gcc之後,我們還需要選擇具體gcc的目標架構!例如如果我們希望我們地作業系統執行在arm cpu上和執行在intel 386架構上的gcc版本是不一樣的(因為cpu所支援的指令集不一樣)。

我們這裡就選用比較常用的架構── i386,具體需要的編譯器有:

i386-elf-ld: gnu i386-elf聯結器,將多個目標檔案鏈結成乙個二進位制檔案用。

nasm (netwide assmebler, 彙編編譯器): 在寫作業系統的時候,有些**是無法用c來完成地,這時候我們就需要用到彙編。

i386-elf-gcc (裡面包括 i386-elf-binutils): gcc 交叉編譯器,如果你想用c來寫作業系統的話就需要這個。

可選:i386-elf-gdb : 可以不裝gdb,bochs虛擬機器裡自帶了彙編級別的偵錯程式。

其中 elf 是 excutable and linkable format 的意思,即我們編譯出來的多個目標檔案是可以被聯結器ld鏈結在一起成為乙個二進位制檔案的。

在mac下,這些可以通過macports直接安裝,linux下也可以通過apt-get等來安裝。

在我們的makefile中,cflags裡一定要加上:」 -nostdlib -nostartfiles -nodefaultlibs

「,也就是gcc在編譯的時候不增加任何標準庫和其他額外資訊,因為我們要寫的是作業系統,所有這些標準庫都應該是我們提供的,我們的新作業系統裡沒有自帶這些東西,一切從零做起!

參考資料

$(v)

$(qemu)

-parallel stdio -hda $< -serial null

使用 dev 裝置的命令如:

`-serial dev'

重定向虛擬串列埠到主機裝置 dev 中。

`-parallel dev'

重定向虛擬並口到主機裝置 dev 中。

`-monitor dev'

`-s'

等待 gdb 連線到埠 1234。

`-p port'

改變 gdb 連線埠到 port。

`-s'

在啟動時不啟動 cpu, 需要在 monitor 中輸入 'c',才能讓qemu繼續模擬工作。

-parallel stdio

makefile有三個非常有用的變數。分別是$@,$^,$《代表的意義分別是:

$@--目標檔案,$^--所有的依賴檔案,$<--第乙個依賴檔案。

-hda $<

-serial null

組合語言入門教程

作業系統編寫筆記

說明 將當前資料夾下的pm.img軟盤映像掛載到 mnt floppy目錄,並將test.com檔案複製到軟盤映像,然後解除安裝映像。1 sudo mkdir mnt floppy 2sudo mount o loop pm img mnt floppy 3sudo cp test com mnt ...

自己編寫作業系統1 概述

打算做這件事很久了,一直拖到今天才開工,事情真的多,又到了過年期間,不得不做一些生活瑣事,唉,比較難集中精力了,只有深夜才有思路迸發,今天中午整理一下。所謂的編寫作業系統,就是想辦法製作一張 含有作業系統的,能夠自動啟動的磁碟 1.在windows 或其他 作業系統上編寫源 2.用c語言編譯器編譯源...

自己編寫作業系統的筆記3

今天研究了很長的時間,效果是顯著的,可是結果 還是沒有成功。今天主要研究怎麼進入保護模式。于淵 的nasm寫的總是好像很簡單,可是lgdt gdtptr jmp dword selectorcode32 0,mov gs edi ax怎麼也改不出可以編譯通過的 這是 然後在網上找了一天的資料,發現一...