makefile製作虛擬磁碟 編譯 執行虛擬機器

2021-10-01 22:35:01 字數 2639 閱讀 2234

1.dd指令

引數作用

if=檔名

輸入檔名,預設為標準輸入

of=檔名

輸出檔名,預設為標準輸出

ibs=bytes

obs=bytes

bs=bytes

一次讀入bytes個位元組,即指定乙個塊大小為bytes個位元組

一次輸出bytes個位元組,即指定乙個塊大小為bytes個位元組

同時設定讀入/輸出的塊大小為bytes個位元組

cbs=bytes

一次轉換bytes個位元組,即指定轉換緩衝區大小

skip=blocks

從輸入檔案開頭跳過blocks個塊後再開始複製

seek=blocks

從輸出檔案開頭跳過blocks個塊後再開始複製

count=blocks

僅拷貝blocks個塊,塊大小等於ibs指定的位元組數

conv=conversion

用指定的引數轉換檔案

ascii:轉換ebcdic為ascii

ebcdic:轉換ascii為ebcdic

ibm:轉換ascii為alternate ebcdic

block:把每一行轉換為長度為cbs,不足部分用空格填充

unblock:使每一行的長度都為cbs,不足部分用空格填充

lcase:把大寫字元轉換為小寫字元

ucase:把小寫字元轉換為大寫字元

swab:交換輸入的每對位元組

noerror:出錯時不停止

notrunc:不截短輸出檔案

sync:將每個輸入塊填充到ibs個位元組,不足部分用空(nul)字元補齊

用dd命令建立虛擬磁碟:

/*

mbr.bin為引導扇區**;boot.bin為必要功能**,由引導扇區匯入;user.bin為使用者程式;

*///建立空檔案empty.img 大小為512b*2880,

dd if

=/dev/zero of=empty.img bs=

512 count=

2880

//將mbr.bin第一塊內容拷到myos.img中

dd if

=mbr.bin of=myos.img bs=

512 count=

1//將myos.img第二塊以後內容置空

dd if

=empty.img of=myos.img skip=

1 seek=

1 bs=

512 count=

2879

//從myos.img第2塊開始,存放boot.bin中512b*2879的內容

dd if

=boot.bin of=myos.img seek=

1 bs=

512 count=

2879

//建立c.img,從c.img的100塊的開始存放user.bin內容

dd if

=user.bin of=c.img bs=

512 seek=

100 conv=notrunc

2.qemu

引數設定:myos.img為軟盤映象,c.img為硬碟0的映象,以軟盤啟動,模擬386執行

qemu-system-i386 -fda myos.img -hda /home/li/documents/test/c.img -boot a
3.makefile
#makefile

all:bin

dd if=/dev/zero of=empty.img bs=512 count=2880

dd if=mbr.bin of=myos.img bs=512 count=1

dd if=empty.img of=myos.img skip=1 seek=1 bs=512 count=2879

dd if=boot.bin of=myos.img seek=1 bs=512 count=2879

dd if=user.bin of=c.img bs=512 seek=100 conv=notrunc

bin:

nasm mbr.asm -o mbr.bin

nasm boot.asm -o boot.bin

nasm user.asm -o user.bin

.phony:clean

clean:

rm boot.bin empty.img mbr.bin user.bin

.phony:qemu

qemu:

qemu-system-i386 -fda myos.img -hda /home/li/documents/test/c.img -boot a

終端輸入:make qemu執行虛擬機器

4.gdb除錯

qemu配置:

//-s是設定gdbserver的監聽埠,-s則是讓cpu加電後被掛起。

qemu-system-i386 -s -s

gdb:

gdb -q

gdb server target remote :

1234

set architecture i8086

makefile檔案製作

makefile檔案製作 個人課堂筆記 臥槽,怎麼把別人名字洩露了的 工程管理器make 很多原始檔組成的 結構組成乙個專案工程,這些檔案可能位於不同目錄下 make 批處理編譯工程檔案 makefile 編譯邏輯 如何執行批處理make命令,沒有makefile無法執行make命令 make he...

source檔案和makefile檔案編寫

一.makefile 沒有副檔名,它名字就叫makefile 內容如下 include ntmakeenv makefile.def wdm程式使用的所有makefile都這樣寫,我們只需寫乙個,編譯時把它拷貝到工作目錄下就行了 二.sources檔案就需要我們根據不同的場合修改了,不過基本模板如下...

ant呼叫make實現Makefile編譯

為了讓ant能執行make,還得用指令碼實現 linux sh指令碼實現,build.sh bin sh export build folder cd dirname 0 pwd prj 判斷makefile是否存在,如果不存在,則呼叫newprj.sh生成makefile if r build f...