با سلام خدمت همگی
این آموزش رو من از اینجا برداشتم :
http://mikeos.berlios.de/write-your-own-os.htmlاینجا گفته چطور میشه یک سیستم عامل ساده با اسمبلی نوشتن که یک پیغام رو روی صفحه چاپ کنه! مسلمه که اول کار کسی انتظار نباید داشته باشه تا یک سیستم عامل مثل BSD یا Windows بنویسه. بهر حال این سیستم عاملها هم از ایده هایی استفاده میکنند که در این سیستم عاملهای کوچک استفاده شده. فقط برای خودشون تغییرش میدن.
این ویکی توضیحات خوبی داره :
http://wiki.osdev.orgخب پرچونگی نکنم! برسیم به این که چه چیزهایی نیازه؟
۱- مجموعه build-essential
۲- یک دستگاه اسمبلر (در اینجا nasm)
۳- یک مجازی ساز (من به رسم امانت داری از متن اصلی qemu رو آوردم ولی شخصا با Virtual Box تست میکنم ) .
sudo apt-get install nasm build-essential qemu
خب! توضیحات جالبی در این قسمتهای متن اومده که به نظرم بهتر هست خودتون بخونیدش :
http://mikeos.berlios.de/write-your-own-os.html#pcprimerhttp://mikeos.berlios.de/write-your-own-os.html#asmprimerدر این دو قسمت چون بیشتر به جنبه های فنی پرداخته شده ، به نظر بهتر هست که زبان اصلی بخونید (البته بی حوصلگی استارتر تاپیک رو هم بهش بیافزایید
) .
آیا ادیتور خاصی نیاز داریم؟ نه! بازهم با هر ادیتوری میشه نوشت. gedit , leafpad, geany و یا vi , nano و ... . باید این کد رو بنویسیم :
BITS 16
start:
mov ax, 07C0h ; Set up 4K stack space after this bootloader
add ax, 288 ; (4096 + 512) / 16 bytes per paragraph
mov ss, ax
mov sp, 4096
mov ax, 07C0h ; Set data segment to where we're loaded
mov ds, ax
mov si, text_string ; Put string position into SI
call print_string ; Call our string-printing routine
jmp $ ; Jump here - infinite loop!
text_string db 'This is my cool new OS!', 0
print_string: ; Routine: output string in SI to screen
mov ah, 0Eh ; int 10h 'print char' function
.repeat:
lodsb ; Get character from string
cmp al, 0
je .done ; If char is zero, end of string
int 10h ; Otherwise, print it
jmp .repeat
.done:
ret
times 510-($-$$) db 0 ; Pad remainder of boot sector with 0s
dw 0xAA55 ; The standard PC boot signature
در اسمبلی ، کامنتها بعد از ; (سمی کالن ، نقطه ویرگول) قرار میگیرند ، پس در این کد هم توضیحات خوبی افزوده شده و میتونه راهنماییتون کنه که هر تیکه چه عملی رو انجام میده
.
و اما ، باید اسمبل کنیم ، کد رو با نام myfirst.asm سیو میکنیم و بعدش :
nasm -f bin -o myfirst.bin myfirst.asm
این فقط به ما یک باینری ساده میده! باینری ساده به چه درد میخوره؟ برای بوت یا ایمیج فلاپی نیازه یا CD . خب با این کد ایمیج فلاپی درست میکنیم :
dd status=noxfer conv=notrunc if=myfirst.bin of=myfirst.flp
خب الان به myfirst.flp رسیدیم! کد زیر رو اجرا کنید :
qemu-i386 -fda myfirst.flp
برای اینکه CD Image درست کنیم :
mkisofs -o myfirst.iso -b myfirst.flp cdiso/
توجه کنید که اول فایل myfirst.flp رو در cdiso قرار بدید. فولدر cdiso هم که میدونید چطور باید ساخت دیگه خب برای بوت از CD هم در دستور فوق بجای fda بنویسید cdrom ! و از سیستم عامل سادتون لذت ببرید
.
خب برای کار پیشرفته تر چه کنیم؟ این هم تیم MikeOS توضیح خوبی داده :
http://mikeos.berlios.de/write-your-own-os.html#gofurtherبه جهت اینکه بتونید MikeOS رو به GRUB بشناسونید باید اون رو به Protected مد ببرید! و برای این کار هم هکی از این سیستم عامل موجوده :
http://board.flatassembler.net/topic.php?t=12381که میتونید ببینید چه کار کرده
.