<30 DAYS TO MAKE YOUR OWN OS> on Ubuntu(1)

Day 1:

1.install qemu

sudo apt-get install qemu

2.run

qemu-system-x86_64 -m 32 -fda projects/01_day/helloos0/helloos.img

在这里插入图片描述
3.build

nasm helloos.nas -o helloos.img

helloos.nas:41: error: attempt to reserve non-constant quantity of BSS space
modiy:

; RESB	0x1fe-$
RESB	0x1fe-($-$$)

NASM supports two special tokens in expressions, allowing calculations to involve the current assembly position: the $ and KaTeX parse error: Can't use function '$' in math mode at position 10: tokens. $̲ evaluates to t… evaluates to the beginning of the current section; so you can tell how far into the section you are by using ( − - $).
https://nasm.us/doc/nasmdoc3.html#section-3.5

Again:

 qemu-system-x86_64 helloos.img

It will be shown as above!

Day2:

projects/02_day/helloos3:
build

nasm helloos.nas -o helloos.img

Modify:

; RESB	0x7dfe-$
RESB	0x7dfe-($-$$)

no bootable device!?
Modify again:

; RESB	0x7dfe-($-$$)
RESB	0x1fe-($-$$)

build again:

nasm helloos.nas -o helloos.img

No error, run :

qemu-system-x86_64 helloos.img

It will be shown as above!

projects/02_day/helloos5

makefile:

ipl.bin : ipl.nas Makefile
	nasm ipl.nas -o ipl.bin
img : ipl.bin
	mformat -f 1440 -C -B ipl.bin -i helloos.img ::

run

make img

It will be shown as above!

Day3

projects/03_day/harib00a

Run:

nasm ipl.nas -o ipl.img
qemu-system-x86_64 -fda ipl.img

在这里插入图片描述

projects/03_day/harib00g

makefile:

IPL_NAME=ipl10
IMG_NAME=os
SYS_NAME=haribote

default: $(IPL_NAME) $(SYS_NAME)
	mformat -f 1440 -C -B $(IPL_NAME).bin -i $(IMG_NAME).img ::
	mcopy $(SYS_NAME).sys -i $(IMG_NAME).img ::

$(IPL_NAME):
	nasm $(IPL_NAME).nas -o $(IPL_NAME).bin

$(SYS_NAME):
	nasm $(SYS_NAME).nas -o $(SYS_NAME).sys

It will be shown a black screen!

projects/03_day/harib00i

makefile:

IPL_NAME=ipl10
IMG_NAME=os
SYS_NAME=haribote
ASM_HEAD=asmhead
BOOT_PACK=bootpack
OS_LINKERSCRIPT=os.ld

default: $(IPL_NAME) $(SYS_NAME)
	mformat -f 1440 -C -B $(IPL_NAME).bin -i $(IMG_NAME).img ::
	mcopy $(SYS_NAME).sys -i $(IMG_NAME).img ::

$(IPL_NAME):
	nasm $(IPL_NAME).nas -o $(IPL_NAME).bin

$(ASM_HEAD):
	nasm $(ASM_HEAD).nas -o $(ASM_HEAD).bin

$(SYS_NAME): $(ASM_HEAD)
	gcc -m32 -fno-pie -nostdlib -T $(OS_LINKERSCRIPT) $(BOOT_PACK).c -o $(BOOT_PACK).bin
	cat $(ASM_HEAD).bin $(BOOT_PACK).bin > $(SYS_NAME).sys

os.ld file:

OUTPUT_FORMAT("binary");

SECTIONS
{
    .head 0x0 : {
        LONG(64 * 1024)  /*  0 : stack+.data+heap の大きさ(4KBの倍数) */
        LONG(0x69726148)      /*  4 : シグネチャ "Hari" */
        LONG(0)               /*  8 : mmarea の大きさ(4KBの倍数) */
        LONG(0x310000)        /* 12 : スタック初期値&.data転送先 */
        LONG(SIZEOF(.data))   /* 16 : .dataサイズ */
        LONG(LOADADDR(.data)) /* 20 : .dataの初期値列のファイル位置 */
        LONG(0xE9000000)      /* 24 : 0xE9000000 */
        LONG(HariMain - 0x20) /* 28 : エントリアドレス - 0x20 */
        LONG(0)               /* 32 : heap領域(malloc領域)開始アドレス */
    }

    .text : { *(.text) }

    .data 0x310000 : AT ( ADDR(.text) + SIZEOF(.text) ) {
        *(.data)
        *(.rodata*)
        *(.bss)
    }

    /DISCARD/ : { *(.eh_frame) }

}

ref:https://vanya.jp.net/os/haribote.html
After run, it will be shown a black screen!

projects/03_day/harib00j

IPL_NAME=ipl10
IMG_NAME=os
SYS_NAME=haribote
ASM_HEAD=asmhead
BOOT_PACK=bootpack
OS_LINKERSCRIPT=os.ld
NASK_FUNC=naskfunc

default: $(IPL_NAME) $(SYS_NAME)
	mformat -f 1440 -C -B $(IPL_NAME).bin -i $(IMG_NAME).img ::
	mcopy $(SYS_NAME).sys -i $(IMG_NAME).img ::

$(IPL_NAME):
	nasm $(IPL_NAME).nas -o $(IPL_NAME).bin

$(ASM_HEAD):
	nasm $(ASM_HEAD).nas -o $(ASM_HEAD).bin

$(NASK_FUNC):
	nasm -f elf $(NASK_FUNC).nas -o $(NASK_FUNC).o

$(SYS_NAME): $(ASM_HEAD) $(NASK_FUNC)
	gcc -m32 -fno-pie -nostdlib -T $(OS_LINKERSCRIPT) $(BOOT_PACK).c $(NASK_FUNC).o -o $(BOOT_PACK).bin
	cat $(ASM_HEAD).bin $(BOOT_PACK).bin > $(SYS_NAME).sys

clean:
	rm *.bin *.sys *.img *.o

After run, it will be shown a black screen!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值