PDA

View Full Version : سوال: Boot Loader



asadegha
چهارشنبه 17 آذر 1389, 21:25 عصر
سلام.
مي خوام يه بوت لودر درست كنم كه يه سيستم عامل رو لود كنه.

حالا اولين سوالي كه دارم اينه كه اصلا بوت لودر چيه؟ و چطور كار مي كنه؟

xman_1365_x
پنج شنبه 18 آذر 1389, 15:11 عصر
مي خوام يه بوت لودر درست كنم كه يه سيستم عامل رو لود كنه.
جالبه اول ميگي مي خوام درست كنم بعد ميگي نمي دونم چي هست:لبخند:
جستجو كنيد در تاپيك هاي ديگه لينك و سورس نمونه هم هست!


حالا اولين سوالي كه دارم اينه كه اصلا بوت لودر چيه؟ و چطور كار مي كنه؟
وقتي رايانه رو روشن كني يك مرحله اي انجام ميشه به اسم post بعدش برنامه ديگه اي به نام loader يا همون bootstrap loader مسئوليت فراخواني سيستم عامل به حافظه رم از روي ديسك رو به عهده داره
اين برنامه سكتور صفر يك ديسك يا ديسكت رو مي خونه و محتواي اون رو اجرا ميكنه
اين قطعه برنامه روي مد واقعي پردازنده اجرا ميشه بعد به حالت حفاظت شده سوئيچ مي كنه و كرنل رو لود مي كنه
نكته:براي نوشتن بوت لودر نمي توني از وقفه داس استفاده كني فقط بايوس
موفق باشي

asadegha
جمعه 19 آذر 1389, 13:47 عصر
سلام.
ممنون. پس اینطور که معلومه باید تو خونه صفر حافظه آدرس خونه حافظه ای رو بزارم که می خوام لود بشه؟

xman_1365_x
جمعه 19 آذر 1389, 14:57 عصر
گفتم كه جستجو كنيد اينا مطالبي كه فقط در تالار بود حالا مطالب گوگل به فارسي و انگليسي به كنار
توضيحات جزئي و نمونه سورس هست در لينك ها موفق باشي
http://barnamenevis.org/showthread.php?253173
http://barnamenevis.org/showthread.php?237064
http://barnamenevis.org/showthread.php?228318
http://barnamenevis.org/showthread.php?245395
http://barnamenevis.org/showthread.php?229440
http://barnamenevis.org/showthread.php?207338
http://barnamenevis.org/showthread.php?90984
http://barnamenevis.org/showthread.php?160923
http://barnamenevis.org/showthread.php?173045
http://barnamenevis.org/showthread.php?160023
http://barnamenevis.org/showthread.php?99776
http://barnamenevis.org/showthread.php?63973
http://barnamenevis.org/showthread.php?62671
http://barnamenevis.org/showthread.php?57113
http://barnamenevis.org/showthread.php?254399
http://barnamenevis.org/showthread.php?262699
http://barnamenevis.org/showthread.php?260098
http://barnamenevis.org/showthread.php?262699
http://barnamenevis.org/showthread.php?228318
http://barnamenevis.org/showthread.php?207338
http://barnamenevis.org/showthread.php?184686
http://barnamenevis.org/showthread.php?185992
http://barnamenevis.org/showthread.php?173045
http://barnamenevis.org/showthread.php?163080
http://barnamenevis.org/showthread.php?154562
http://barnamenevis.org/showthread.php?152508
http://barnamenevis.org/showthread.php?82769
http://barnamenevis.org/showthread.php?62671
http://barnamenevis.org/showthread.php?53819

h.kazemi
چهارشنبه 18 آذر 1394, 13:06 عصر
سلام یه سوال داشتم.من ای کد رو دارم اما نمیدونم قسمت boot و jmp kernel دقیقا چیه و چیکار میکنه؟ممنون میشم راهنماییم کنید
[bits 16]
[org 0x7c00]


Reset:
mov ah, 0 ; reset floppy disk function
mov dl, 0 ; drive 0 is floppy drive
int 0x13 ; call BIOS
jc Reset ; If Carry Flag (CF) is set, there was an error. Try resetting again


boot:
mov ah, 0x02 ; BIOS read sector function
mov al, 0x08 ; read three sector
mov ch, 0x00 ; Track to read
mov cl, 0x02 ; Sector to read
mov dh, 0x00 ; Head to read
mov dl, 0x00 ; Drive to read

mov bx, 0x0000
mov es, bx
mov bx, 0x7e00

jmp_kernel:
int 13h
jc jmp_kernel
jmp 0000h:7e00h


times 510 - ($-$$) db 0
dw 0xaa55

xman_1365_x
پنج شنبه 26 آذر 1394, 18:43 عصر
سلام یه سوال داشتم.من ای کد رو دارم اما نمیدونم قسمت boot و jmp kernel دقیقا چیه و چیکار میکنه؟ممنون میشم راهنماییم کنید
[bits 16]
[org 0x7c00]


Reset:
mov ah, 0 ; reset floppy disk function
mov dl, 0 ; drive 0 is floppy drive
int 0x13 ; call BIOS
jc Reset ; If Carry Flag (CF) is set, there was an error. Try resetting again


boot:
mov ah, 0x02 ; BIOS read sector function
mov al, 0x08 ; read three sector
mov ch, 0x00 ; Track to read
mov cl, 0x02 ; Sector to read
mov dh, 0x00 ; Head to read
mov dl, 0x00 ; Drive to read

mov bx, 0x0000
mov es, bx
mov bx, 0x7e00

jmp_kernel:
int 13h
jc jmp_kernel
jmp 0000h:7e00h


times 510 - ($-$$) db 0
dw 0xaa55

دوست گرامی نباید تاپیک هایی که مدت زیادی از اون گذشته رو زنده کنی، برای پرسش سوالتون بهتر بود که یک تاپیک ایجاد کنید، در ارتباط با کدی که گذاشتین کلا اشتباه نوشته شده
و با این حال اون بخشی که شما گفتی هم اشتباه هست چون وقفه 13 با تابع 2 برای خواندن از درایو استفاده میشه و اگر خطا داشته باشه کری رو ست میکنه، و اون پرش باید جایی برای هندل کردن و یا نمایش خطا باشه، اینجا سعی شده مجددا تلاش کنه که باید به اول مقدار دهی یعنی برچسب boot پرش میشد
برای اطلاعات بیشتر این (https://en.wikipedia.org/wiki/INT_13H#INT_13h_AH.3D02h:_Read_Sectors_From_Drive) صفحه رو ببینید،بنا بدلایلی این پست آخرین پست من در سایت برنامه نویس هست. اگر مشکلتون حل نشد تاپیک جدیدی ایجاد کنید و در انتظار پاسخ دیگر دوستان باشید.
همگی موفق باشید...