PDA

View Full Version : در لود کردن کرنل از بوت لودر مفهوم ROOT DIRECTORY یعنی چی؟



one hacker alone
شنبه 24 فروردین 1392, 02:03 صبح
با یاد خدا
سلام خدمت دوستان عزیز
بعد از نوشتن بوت لودر باید ادرس فایل کرنل رو گیر بیاریم و اجرا کنیم
حالا این روند دارای جزئیاتی هست که من اخرش هم متوجه نشدم که چرا باید درگیر یه سری مسائل مثل رست کردن هد دیسک و بلوک oem بشیم و اینکه ترتیب انجام این عملیات چیه ؟
و این بحث روت دایرکتوری یعنی چی؟

m.j_banitaba
دوشنبه 26 فروردین 1392, 10:18 صبح
سلام.
این مسئله مربوط می شود به اینکه سیستم عامل شما از چه فایل فرمتی استفاده کنه . احتمالا شما کدهایی را مشاهده کردین که بر اساس فایل فرمت FAT پیاده سازی شدن در ساختار FAT مباحثی از این دست وجود دارد.
اگر می خواهید وارد مباحث فایل فرمت نشوید همانطور که من در نوشتن لودر خودم در وبلاگ(oscreator.blogfa.com (http://oscreator.blogfa.com/)) توضیح دادم می توانید از وقفه های bios و فایل فرمت یک فایل در هر ترک استفاده کنی.

pswin.pooya
دوشنبه 26 فروردین 1392, 16:55 عصر
وقفه های بایوس فقط به درد ReadMode میخوره و توی مدهای 32 بیتی و ... جواب نمیده

m.j_banitaba
دوشنبه 26 فروردین 1392, 21:36 عصر
البته می شود با تنظیم v86 از وقفه bios استفاده کرد.

pswin.pooya
دوشنبه 02 اردیبهشت 1392, 20:12 عصر
خب اون موقعه هم که ذیگه pmode نیست.

m.j_banitaba
دوشنبه 02 اردیبهشت 1392, 22:48 عصر
خب اون موقعه هم که ذیگه pmode نیست.
منظور pmode بودن یعنی اجرای کدهای کرنل در pmode اما درایورها می توانند در هر مود دیگری نیز اجرا شوند. تنها لازم است io ها و مموری درست تنظیم شود و پس از اجرا شدن کامل کد درایور وقفه و بدست آمدن نتیجه با تغییر وظیفه کرنل به ادامه کار خود بپردازد. البته باید گفت که نوشتن درایور فلاپی از انجام تغییر وظیفه سریعتر و ساده تر است .

one hacker alone
چهارشنبه 04 اردیبهشت 1392, 03:04 صبح
ممنون از پاسخ هاتون اما من اخرش نفهمیدم این روت دایرکتوری چیه که تو NTFS نیست
درضمن من چه تا سوال داشتم ممنون میشم دوستان راهنمایی کنن
و اینکه ما توی pmode از وقفه ها نمیتونیم استفاده کنیم پس برای برنامه نویسی از چه توابعی استفاده کنیم؟ وقتی هیچ تابعی نیست و وقفه ها هم نیست پس؟؟؟؟
تو یکی از بوت لودرها من دیدم برنامه از main شروع میشد اما ادرس 07c0 بود اما تو بقیه 7c00 چرا؟ (با توجه به ساختار رم ما باید از 7c00 بوت لودر رو شروع میکردیم؟
برای رفتن به pmode باید یه سری کارا انجام بدیم در این راستا A20 چیه؟ و اینکه مادر Real Mode در ادرسدهی محدودیم یعنی چی؟
بعد از پیدا کردن دایرکتوری روت چجوری باید دنبال فایل کرنل بگردیم

m.j_banitaba
چهارشنبه 04 اردیبهشت 1392, 10:00 صبح
دایرکتوری ریشه یا همان root directory همان چیزی هست که شما در ویندوز با نام c:\ می بینید در واقع در ساختار fat اولین دایرکتوری به حساب می آید. و فایل فرمت برای شروع جستجو ابتدا باید آن را بیابد.
در pmode باید سیستم عامل شما جداول عمومی توصیف کننده حافظه و وقفه را برنامه ریزی کند سپس درایورهای مربوط به مدیریت کنترل کننده سخت افزاری وقفه را به همراه درایورهای فلاپی ، هارد ، صفحه کلید ، موش موشک و ... را لود کند و در ادامه به وظایف اصلی خودش برسد. لذا شما می توانید یک میکرو کرنل بنویسید که برنامه لودر که در 512 بایت اول درایو وجود دارد آن را توسط توابع بایوس لود کند سپس این برنامه با تنظیم پردازنده و بار گذاری درایورهای ابتدایی مثل درایور فلاپی یا هر درایوری که برای بار کذاری ادامه هسته اصلی مورد نیاز است را بار گذاری کند و به pmod برود در اینجا ادامه کار را به هسته اصلی 32 بیتی می دهد.
در مورد 7c0 هم باید گفت شما به دو صورت می توانید آدرس دهی کنید اول اینکه cs را صفر قرار دهید سپس آدرس آفست را به کامپایلر بدهید یا اینکه cs را 7c0 قرار دهید و آفست را از صفر شروع کنید. لذا در این حالت آدرس شما به صورت 0x07c0 * 0x10+0x0 محاسبه می شود اما این مقدار تا آدرس 0xFFFF * 0x10 +0xF ادامه دارد . که این مقدار تنها 1Mb از حافظه را شامل می شود و باقی حافظه در این حالت دور از دسترس است البته لازم به تذکر است که در این حالت تمامی 1Mb از حافظه هم در اختیار ما نمی باشد. وبیشتر آن را بایوس اشغال کرده است لذا برای حافظه بیشتر باید از کرم به پروانه دگردیسی کرد.

pswin.pooya
چهارشنبه 04 اردیبهشت 1392, 11:33 صبح
منظور pmode بودن یعنی اجرای کدهای کرنل در pmode اما درایورها می توانند در هر مود دیگری نیز اجرا شوند. تنها لازم است io ها و مموری درست تنظیم شود و پس از اجرا شدن کامل کد درایور وقفه و بدست آمدن نتیجه با تغییر وظیفه کرنل به ادامه کار خود بپردازد. البته باید گفت که نوشتن درایور فلاپی از انجام تغییر وظیفه سریعتر و ساده تر است .

منظورت رو دقیقا متوجه نشدم. میتونی بیشتر توضیح بدی

m.j_banitaba
چهارشنبه 04 اردیبهشت 1392, 14:28 عصر
فرض کنید می خواهید از وقفه های bios استفاده کنید باید 1Mb پایین حافظه را به صورت یک پروسه v86 تنظیم کنید. سپس خانه صفر را به عنوان virtual inttrupt table معرفی کنید و در قسمتی از کد آن کد فراخوانی همه int ها را قرار بدهید و در انتها از داخل کرنل یک فراخوانی دور به داخل این پروسس انجام دهید و نتیجه را به برنامه اصلی برگردانید.

emadrezvani
یک شنبه 28 اردیبهشت 1393, 18:04 عصر
فرض کنید می خواهید از وقفه های bios استفاده کنید باید 1Mb پایین حافظه را به صورت یک پروسه v86 تنظیم کنید. سپس خانه صفر را به عنوان virtual inttrupt table معرفی کنید و در قسمتی از کد آن کد فراخوانی همه int ها را قرار بدهید و در انتها از داخل کرنل یک فراخوانی دور به داخل این پروسس انجام دهید و نتیجه را به برنامه اصلی برگردانید.
نمونه کد ارائه میدید ؟