نمایش نتایج 1 تا 2 از 2

نام تاپیک: لینک کردن فایل کرنل و فایل بوت

  1. #1
    کاربر جدید آواتار Mr_Linux
    تاریخ عضویت
    بهمن 1395
    پست
    3
    تشکر کردن
    6
    0 بار تشکر شده در 0 پست

    Post لینک کردن فایل کرنل و فایل بوت

    با سلام
    یه فایل بوت با اسمبلی و یک کرنل ساده نوشته شده با c داریم.
    هدف از نوشتن این فایل بوت لود کردن فایل کرنل ما هست.فایل بوت تو حالت real mode هست. و میخوایم که کرنل رو لود کنه به به حالت protected mode بره.
    در ابتدا فایل اسمبلی بوتی نوشته شد بدون داشتن تابع extern که وظیفش بوت شدن و نوشتن یک کاراکتر در صفحه با استفاده از توابع بایوس بود.و نحوه اسمبل کردن اون به صورت زیر بود:
    nasm -f bin boot.asm -o boot.o
    فایل boot.o با qemu بدون درگیری زیاد cpu در لینوکس اجرا شد.

    سپس کرنلی با زبان c نوشته و به صورت زیر کامپایل شد:

    gcc -c kernel.c -o kernel.o
    برای استفاده از تابع "k_main" در فایل بوت ، که در کرنل موجود است کد آن را در فایل بوت نوشتیم و آن را در قسمت لودر فراخوانی کردیم و کد اسمبلی را به صورت زیر اسمبل کردیم:

    nasm -f aout boot.asm -o boot.o
    برای اینکه امضای فایل بوت در جای درست خود قرار گیرد فایل بوت را با هگز ادیتور باز کرده و چند بیت اضافه که برای اجرا شدن aout در هنگام اسمبل کردن به آن اضافه شد را پاک کردیم.
    مشل در لینک کردن فایل کرنل و بوت وجود دارد.
    روش های گفته شده در اکثر سایتاها و از جمله سایت برنامه نویس را اجرا کردیم ، یسری روش ها ارور داشتن و لینک نشد . روشهایی هم که فایل ها رو لینک کردن . فایل خراب میشد.

    ما این فایل بوت رو آزمایشی ساختیم تا به مرور اون رو گسترش بدیم .
    ممنون میشم اگه مشکلی در کد فایل بوت یا فایل کرنل میبینید معرفی کنید ، و نحوه درست لینک این دو فایل رو بگین.

    نکته دیگه اینکه فایل ابتدایی بوت وقتی که تابع خارجیی به آن اضافه نشده بود cpu رو زیاد درگیر نمیکرد . ولی وقتی تابعی خارجی(تابع کرنل) بهش اضافه شد در حالی که هنوز لینک انجام نشده بود ، فایل بوت رو به تنهایی با qemu اجرا شد و هر دفه یکی از هسته های cpu به طور کامل شرو به محاسبه میکرد تا زمانی که برنامه بسته بشه.سوال بعدی اینجاس وقتی کرنل لینک بشه این مصرف درست میشه یا همچنان بالا میمونه ؟
    فایل بوت و فایل کرنل در زیر قرار داده شده .
    با تشکر ....
    فایل های ضمیمه فایل های ضمیمه

  2. #2
    مدیر بخش
    تاریخ عضویت
    بهمن 1385
    محل زندگی
    تبریز
    پست
    1,882
    تشکر کردن
    275
    1,432 بار تشکر شده در 810 پست

    نقل قول: لینک کردن فایل کرنل و فایل بوت

    کلا روشی که داری میری خیلی اشتباه هست و صد در صد به مشکل بر می خوری.

    اول از همه بهتره که از cross-compiler استفاده کنی تا کامپایلر معمولی.


    مورد دوم نیازی به ادیت مستقیم فایلهای نیست و خیلی اینکار اشتباه هست بجاش باید لینکر اسکریپت بنویسی این نمونه کد آراکس هست:

    https://sourceforge.net/p/arax/code/HEAD/tree/link.ld


    مورد سوم اینه که نباید از CRT استفاده کنی و برای غیر فعال کردنش می تونی از option های زیر استفاده کنی:

    -nostdlib -nostdinc -fno-builtin 


    معماری خروجی رو مشخص نکردی. براش باید از گزینه زیر استفاده کنی:

    -m32


    البته بهره که بهینه سازی های کامپایلر رو هم غیر فعال کنی مثل محافظ پشته و غیر رو غیر فعال کنی. می تونی خیلی از موارد این چنینی رو از روی کد من بدست بیاری:
    https://sourceforge.net/p/arax/code/...e/Makefile#l34

  3. کاربرانی که به خاطر مطلب مفید pswin.pooya از وی تشکر کرده‌اند:


تاپیک های مشابه

  1. سوال: مشکل در لینک کردن فایل css به قالب
    نوشته شده توسط ebibombas1988 در بخش طراحی وب (Web Design)
    پاسخ: 1
    آخرین پست: دوشنبه 14 تیر 1395, 17:48 عصر
  2. سوال: لینک کردن فایل css به یک صفحه
    نوشته شده توسط mehrdad85 در بخش ASP.NET
    پاسخ: 17
    آخرین پست: دوشنبه 19 اسفند 1392, 18:48 عصر
  3. لینک کردن فایل PDF در ASP.NET
    نوشته شده توسط golnouri در بخش ASP.NET
    پاسخ: 1
    آخرین پست: یک شنبه 29 خرداد 1390, 17:30 عصر
  4. پاسخ: 0
    آخرین پست: سه شنبه 23 فروردین 1390, 17:33 عصر
  5. لینک کردن دو فایل
    نوشته شده توسط hrshojaei در بخش C#‎‎
    پاسخ: 6
    آخرین پست: سه شنبه 27 شهریور 1386, 11:56 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •