के साथ त्रुटि हम कर्नेल को लिखने और इंस और आउट सीखने के लिए एक प्रोजेक्ट पर काम कर रहे हैं। हमारे पास बूटस्ट्रैप लोडर लिखा गया है और यह काम करता प्रतीत होता है। हालांकि हमें कर्नेल लोडिंग में कोई समस्या है। यह इजाफा होगा और गला घोंटना करने के लिए पैदा करने के बिनाबूटस्ट्रैप लोडर और कर्नेल
[BITS 16]
[ORG 0x0000]
;
; all the stuff in between
;
; the bottom of the bootstrap loader
datasector dw 0x0000
cluster dw 0x0000
ImageName db "KERNEL SYS"
msgLoading db 0x0D, 0x0A, "Loading Kernel Shell", 0x0D, 0x0A, 0x00
msgCRLF db 0x0D, 0x0A, 0x00
msgProgress db ".", 0x00
msgFailure db 0x0D, 0x0A, "ERROR : Press key to reboot", 0x00
TIMES 510-($-$$) DB 0
DW 0xAA55
;*************************************************************************
bootloader.asm संपादक के लिए बहुत लंबा है: मैं पहले भाग के साथ शुरू करेंगे:
bootloader.asm। इसके अलावा, बूटलोडर और कर्नेल बोच के भीतर काम करते हैं क्योंकि हमें "हमारे ओएस में आपका स्वागत है" संदेश मिलता है। वैसे भी, इस बिंदु पर कर्नेल के लिए हमारे पास निम्नलिखित है।
kernel.asm:
[BITS 16]
[ORG 0x0000]
[SEGMENT .text] ; code segment
mov ax, 0x0100 ; location where kernel is loaded
mov ds, ax
mov es, ax
cli
mov ss, ax ; stack segment
mov sp, 0xFFFF ; stack pointer at 64k limit
sti
mov si, strWelcomeMsg ; load message
call _disp_str
mov ah, 0x00
int 0x16 ; interrupt: await keypress
int 0x19 ; interrupt: reboot
_disp_str:
lodsb ; load next character
or al, al ; test for NUL character
jz .DONE
mov ah, 0x0E ; BIOS teletype
mov bh, 0x00 ; display page 0
mov bl, 0x07 ; text attribute
int 0x10 ; interrupt: invoke BIOS
jmp _disp_str
.DONE:
ret
[SEGMENT .data] ; initialized data segment
strWelcomeMsg db "Welcome to our OS", 0x00
[SEGMENT .bss] ; uninitialized data segment
एनएएसएम 2.06rc2 का उपयोग करते हुए मैं इस तरह के रूप संकलन:
nasm bootloader.asm -o bootloader.bin -f bin
nasm kernel.asm -o kernel.sys -f bin
हम जैसे फ्लॉपी को bootloader.bin लिखें:
dd if=bootloader.bin bs=512 count=1 of/dev/fd0
हम floppy को kernel.sys लिखते हैं जैसे:
cp kernel.sys /dev/fd0
जैसा कि मैंने कहा, इस Bochs में काम करता है। लेकिन फ्लॉपी से बूटिंग हम इतनी तरह आउटपुट प्राप्त:
अन्य बारीकियों को रीबूट करने की प्रेस कुंजी:
लोड हो रहा है कर्नेल शैल
...........
त्रुटि: ओपनएसयूएसई 11.2, गनोम डेस्कटॉप, एएमडी x64 कोई अन्य जानकारी जो मैंने याद की हो, पूछने के लिए स्वतंत्र महसूस करें। मैंने यहां सब कुछ पाने की कोशिश की जिसकी आवश्यकता होगी। अगर मुझे इसकी ज़रूरत है, तो मैं पूरे बूटलोडर.सम को कहीं भी पोस्ट करने का रास्ता ढूंढ सकता हूं। हम वास्तव में कई कारणों से GRUB का उपयोग करने में रूचि नहीं रखते हैं। यह बदल सकता है, लेकिन हम वास्तव में GRUB पर विचार करने से पहले इस बूट को सफल देखना चाहते हैं।संपादित करें: बूटस्ट्रैप लोडर डिस्क के बूट सेक्टर (बहुत पहले क्षेत्र) में लिखे गए 512 बाइट्स होने का अनुमान है। इसके लिए मेरा शब्द लें, बूटलोडर 512 बाइट संकलित है। कर्नेल अगले ही क्षेत्र में होने का अनुमान है।
मैं अत्यधिक शक है कि तुम सच मतलब 'सीपी kernel.sys/dev/fd0', जो फ्लॉपी डिवाइस को अधिलेखित कर देगा शुरू से। यहां तक कि यदि आप इसे पेस्ट नहीं करते हैं, तो क्या आप वर्णन कर सकते हैं कि आपके बूटलोडर से कर्नेल को स्मृति में लोड करने की उम्मीद है? – ephemient
ठीक है, हाँ वास्तव में मेरा मतलब है। यह एक उदाहरण है जिसे मुझे डिवाइस पर फ़ाइल की प्रतिलिपि बनाने के लिए दिया गया था। क्या यह अलग होना चाहिए?मैं लिनक्स के रास्ते में बहुत नया हूं - मैं विंडोज के बाद से विंडोज में रहा हूं। – IAbstract
आपका 'डीडी' फ्लॉपी के पहले सेक्टर में 'बूटलोडर.बीबी' का एक क्षेत्र लिखता है। फिर आपकी 'cp' प्रतिलिपि' kernel.sys' को सीधे फ्लॉपी पर प्रतिलिपि बनाता है, जो ओवरलैटिंग कर रहा है ... शायद आप फ्लॉपी के दूसरे सेक्टर में 'kernel.sys' रखने शुरू करने के लिए' dd seek = 1' 'का मतलब है? यह निर्धारित करने के लिए कि क्या आप चाहते हैं कि अपने बूटलोडर पर अधिक जानकारी चाहिए। – ephemient