ข้ามไปที่เนื้อหาหลัก

บันทึกทดลองสร้าง OS

อันแรกต้องติดตั้ง NASM
sudo apt-get install nasm

loader.asm
==========
global loader
extern dmain
MODULEALIGN equ 1<<0
MEMINFO equ 1<<1
FLAGS equ MODULEALIGN | MEMINFO
MAGIC equ 0x1BADB002
CHECKSUM equ -(MAGIC + FLAGS)

section .text
align 4
MultiBootHeader:
dd MAGIC
dd FLAGS
dd CHECKSUM

STACKSIZE equ 0x4000

loader:
mov esp, stack+STACKSIZE
push eax
push ebx

call dmain

cli

hang:
hlt
jmp hang

section .bss
align 4
stack:
resb STACKSIZE
===============
จะนั้นใช้เทอร์มินัล มาโพรเดอร์ที่เก็บไฟล์
nasm -f elf -o loader.o loader.asm
สร้างไฟล์ kernel.c
โค้ด
==============
void dmain(void*mbd,unsigned int magic)
{
    if(magic != 0x2BADB002)
    {
        clearscreen();
        print("Error: Invalid magic number!",0x04);
    }
    else
    {
        clearscreen();
        print("Hello World!",0x07);//04,07คือรหัสสีบนDOS
    }
}
void print(char*message,int color)
{
    char* mem = (char*)(0xb8000);
    while(*message != 0)
    {
        *mem = *message;
        mem++;
        message++;
        *mem = (char*)color;
        mem++;
    }
}
void clearscreen(void)
{
    char* mem = (char*)(0xb8000);
    while(*mem != 0)
    {
        *mem = 0;
        mem++;
    }
}
=================
จะนั้นใช้เทอร์มินัล มาโพรเดอร์ที่เก็บไฟล์
gcc -o kernel.o -c kernel.c -Wall -Wextra -nostdlib -nostartfiles -nodefaultlibs

**
gcc -o kernel.o -c kernel.c -Wall -Wextra -nostdlib -nostartfiles -nodefaultlibs -m32

ต่อมาสร้างไฟล์ linker.ld
โคัด:
=================
ENTRY(loader)
SECTIONS{

    . =0x00100000;
    .text : {
            *(.text)
    }
    .rodata ALIGN(0x1000):{
        *(.data)
    }
    .bss : {
        sbss = .;
        *(COMMON)
        *(.bss)
        ebss = .;
    }
}
===================
จะนั้นใช้เทอร์มินัล มาโพรเดอร์ที่เก็บไฟล์
ld -T linker.ld -o kernel.bin loader.o kernel.o
กรณีใช้ amd64
ld -m elf_i386 -T linker.ld -o kernel.bin loader.o kernel.o
จากนั้นติดตั้ง qemu
sudo apt-get install qemu
หลังจากนั้นลองรันด้วยคำสั่ง
qemu -kernel kernel.bin

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

บรรณานุกรมกับ Zotero เรื่องน่าปวดหัวของนศ.มข.

เอาล่ะ ก่อนอื่นเรามาเริ่มที่บรรณานุกรม คืออะไร แบบย่อ ๆ บรรณานุกรมเป็นการอ้างอิงเอกสารหรือเอกสารอ่านเพิ่มเติมที่เรานำมาจัดทำรายงาน หนังสือ รวมไปถึงวิทยานิพนธ์ด้วย เป็นการอ้างอิงกันทางวิชาการถือเป็นเรื่องจำเป็นต้องทำและต้องมี ด้วยเหตุผลหลาย ๆ อย่าง

ฝึกงาน IST @ VISTEC : วันที่ 0 เข้าหอพัก

สวัสดีครับ ช่วงปิดเทอมของปี 2 ผมได้โอกาสไปฝึกงานกับ IST ที่ VISTEC ในโครงการ "IST Research Internship 2019"

เชื่อมต่อ kku-wifi-s ใน Linux (ใช้งานได้กับ Raspberry Pi)

สวัสดีครับ ผมได้ใช้ Raspberry Pi แต่ผมติดปัญหาที่ไม่สามารถเชื่อมต่อ kku-wifi-s  ได้ เนื่องจากการตั้งค่าที่เป็นปัญหา ทำให้ผมหาวิธีจนสามารถเชื่อมต่อ kku-wifi-s ได้ โดยทำตามวิธีดังนี้ครับ