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

نام تاپیک: مشکل لینک کردن آبجکت فایل

  1. #1
    کاربر دائمی آواتار jeson_park
    تاریخ عضویت
    دی 1387
    محل زندگی
    گچساران
    سن
    33
    پست
    595

    مشکل لینک کردن آبجکت فایل

    با سلام
    یه کرنل داریم که از 2 بخش تشکیل شده یه فایل Asm و یه فایل .c
    فایل Asm رو با NASM اسمبل می کنم مشکلی نداره
    nasm -f aout kernel.asm -o k.o
    فایل سی هم مشکلی نداره
    gcc -c kernel.c -o kernel.o
    اما موقع کار با ld و لینک کردن خطا می ده
    ld -T link.ld -o kernel.bin k.o kernel.o
    متن خطا هم اینه

    k.o:file not recognized: File format not recognized

    این هم اسکریپت link.ld هست


    OUTPUT_FORMAT("binary")
    ENTRY(start)
    SECTIONS
    {
    .text 0x100000 : {
    code = .; _code = .; __code = .;
    *(.text)
    . = ALIGN(4096);
    }
    .data : {
    data = .; _data = .; __data = .;
    *(.data)
    . = ALIGN(4096);
    }
    .bss :
    {
    bss = .; _bss = .; __bss = .;
    *(.bss)
    . = ALIGN(4096);
    }
    end = .; _end = .; __end = .;
    }


    ممنون میشم راهنمایی کنید

  2. #2
    کاربر دائمی آواتار jeson_park
    تاریخ عضویت
    دی 1387
    محل زندگی
    گچساران
    سن
    33
    پست
    595

    نقل قول: مشکل لینک کردن آبجکت فایل

    یعنی الان کسی نیست جوا منو بده؟!؟؟!

  3. #3

    نقل قول: مشکل لینک کردن آبجکت فایل

    سلام
    آخه نحوه كامپايل شما هم مشكل داره. Makefile آراكس رو نگاه كن متوجه ميشي:
    http://arax.svn.sourceforge.net/view...17&view=markup

  4. #4
    کاربر دائمی آواتار jeson_park
    تاریخ عضویت
    دی 1387
    محل زندگی
    گچساران
    سن
    33
    پست
    595

    نقل قول: مشکل لینک کردن آبجکت فایل

    من make file ندارم
    کرنل خیلی کوچیکه!
    فقط می خوام زودی بوت شه و تابع سی رو صدا بزنه
    راه حلی سراغ ندارین؟؟
    پلت فرمم ویندوز 7 هست
    مشکل چیه؟؟

  5. #5

    نقل قول: مشکل لینک کردن آبجکت فایل

    من make file ندارم
    نگفتم كه make بنويس گفتم از روش نحوه كامپايل كردن رو نگاه كن. بدون make و لينوكس به نظر من فايده نداره

  6. #6
    کاربر دائمی آواتار jeson_park
    تاریخ عضویت
    دی 1387
    محل زندگی
    گچساران
    سن
    33
    پست
    595

    نقل قول: مشکل لینک کردن آبجکت فایل

    نقل قول نوشته شده توسط pswin.pooya مشاهده تاپیک
    نگفتم كه make بنويس گفتم از روش نحوه كامپايل كردن رو نگاه كن. بدون make و لينوكس به نظر من فايده نداره
    ببنید پروژه کوچیک هست نمی خوامواسه یه پروژه کوچیک لینوکس نصب کنم و درگیرش شم
    حالا اصلا درحالت کلی چه راه هایی برای لینک کردن 2 تا کد (یکی اسمبلی و یکی هم سی ) به وجود داره؟

  7. #7

    نقل قول: مشکل لینک کردن آبجکت فایل

    كار خيلي راحتي هست. اگر ميخوايين داخل اسمبلي توابع رو تعريف كنيد بايد از استاندارد cdecl استفاده بكنيد و بعدش پروتوتايپ تابع رو بنويسيد و دست آخر لينك كنيد و بر عكس اگر ميخواييد توابع سي رو از داخل اسمبلي صدا كنيد كافيه كه از دستور call استفاده بكنيد. داخل آراكس هر دو نمونه اون هست.

  8. #8

    نقل قول: مشکل لینک کردن آبجکت فایل

    k.o:file not recognized: File format not recognized
    فایل فرمت های دیگه رو امتحان کنید
    nasm -f elf -o boot.o [your asm file here]
    nasm -f coff -o boot.o [your asm file here]

  9. #9
    کاربر دائمی آواتار jeson_park
    تاریخ عضویت
    دی 1387
    محل زندگی
    گچساران
    سن
    33
    پست
    595

    نقل قول: مشکل لینک کردن آبجکت فایل

    نقل قول نوشته شده توسط xman_1365_x مشاهده تاپیک
    فایل فرمت های دیگه رو امتحان کنید
    nasm -f elf -o boot.o [your asm file here]
    nasm -f coff -o boot.o [your asm file here]

    ld: cannot preform PE operations on non PE output file "kernel.bin".

  10. #10

    نقل قول: مشکل لینک کردن آبجکت فایل

    چرا k.o رو در لینکر بکار بردین؟ به صورت زیر عمل کنید ببینید مشکلتون حل میشه اینطوری باید دو فایل bin برای خروجی داشته باشید که بوت bin در سکتور0 کپی میشه البته اگر هر دو فایل مربوط به کرنل نباشه،اگر مشکل حل نشد سورس رو قرار بدین

    nasm –f bin –o boot.bin boot.asm
    gcc -c -o kernel.o kernel.c

    linker script:



    OUTPUT_FORMAT("binary")
    INPUT(kernel.o)
    ENTRY(_main)
    SECTIONS
    {
    .text 0x40000 :
    {
    *(.text)
    }
    .data :
    {
    *(.data)
    }
    .bss :
    {
    *(.bss)
    }
    }



    ld -T link.ld -o kernel.bin



    موفق باشی

  11. #11
    کاربر دائمی آواتار jeson_park
    تاریخ عضویت
    دی 1387
    محل زندگی
    گچساران
    سن
    33
    پست
    595

    نقل قول: مشکل لینک کردن آبجکت فایل

    با تشکر از شما
    بنده در پست اول گفتم
    کرنل 2 بخش داره
    یه فایل Asm که بوت لودر هست

    [BITS 32] ; This is 32-bit Code

    [global start] ;make an assembly language label global (accessible outside the file)
    [extern _k_main] ; this is in the c file..reson of using '_'
    ;This is because C/C++‎ compilers add an underscore( _ ) in front of all C/C++‎ functions

    start:
    call _k_main

    cli ; stop interrupts,interrupts can awake the CPU from a hlt instruction
    hlt ; halt(stop) the CPU and tells the CPU to stop executing

    times 510 - ($-$$) db 0 ; $-$$ returns the number of bytes from the current line to the start write distance between 0-510 bye with '0'
    dw 0xAA55 ; write last tow byte AA 55


    یه فایل .c که هسته اصلی هست و از داخل فایل Asm صدا زده می شه

    حالا 2 فایل خروجی bin داشته باشم چه طوری لودشون کنم؟؟
    -=-=-edit-=-=-=-=
    باز هم موقع کامپایل ارور داد

  12. #12

    نقل قول: مشکل لینک کردن آبجکت فایل

    ساختار را اشتباه نوشتین ، به لینک های زیر برین تا مشکلتون حل شه،کد سی تونم هم که میدونید نباید از فایل کتابخانه سی استفاده کنید
    Hello World Boot Loader
    How to develop your own Boot Loader
    OS Development Tutorials
    موفق باشی

  13. #13
    کاربر دائمی آواتار jeson_park
    تاریخ عضویت
    دی 1387
    محل زندگی
    گچساران
    سن
    33
    پست
    595

    نقل قول: مشکل لینک کردن آبجکت فایل

    نقل قول نوشته شده توسط xman_1365_x مشاهده تاپیک
    ساختار را اشتباه نوشتین ، به لینک های زیر برین تا مشکلتون حل شه،
    اتفاقا این کرنل من هم مربوط میشه به یکی از همین لینک ها
    اینجا

    نقل قول نوشته شده توسط xman_1365_x مشاهده تاپیک
    کد سی تونم هم که میدونید نباید از فایل کتابخانه سی استفاده کنید
    موفق باشی
    بله می دونم اما دلیلش رو نمی دونم ..قربون دستت میشه توضیح بدین چرا؟!؟!؟
    دیگه نرم الکی تاپیک جدا بزنم
    قبلا هم اینجا درخواست سورس کتابخانه رو داده بودم ( که نخواد دوباره بشینم همه رو بنویسم )
    با تشکر

  14. #14
    کاربر جدید
    تاریخ عضویت
    مهر 1387
    محل زندگی
    اروميه
    پست
    15

    نقل قول: مشکل لینک کردن آبجکت فایل

    بوت لودرت ایراد داره
    باید با استفاده از یک بوت لودر مثل grub به protected mode سوئیچ کنی
    از همون صفحه که مطالعه کردی و کد رو نوشتی ازش ،اگه توجه می کردی در پایین صفحه بهش اشاره کرده !
    یک فایل ضمیمه گذاشتم،یاد میده که چه جوری کرنل رو با grub بوت کنیم و خود grub رو هم داره
    با تشکر
    فایل های ضمیمه فایل های ضمیمه

  15. #15
    کاربر دائمی آواتار jeson_park
    تاریخ عضویت
    دی 1387
    محل زندگی
    گچساران
    سن
    33
    پست
    595

    نقل قول: مشکل لینک کردن آبجکت فایل

    با تشکر از شما
    می تونستم از GRUB استفاده کنم اما خب می خوام خودم به بوت لودر ساده بنویسم
    چون مبدتی هستم نمی خوام درگیر مسائلی مثل MAKEFILE یا مثلا همین grub برای بوت بشم

  16. #16
    کاربر جدید
    تاریخ عضویت
    مهر 1387
    محل زندگی
    اروميه
    پست
    15

    نقل قول: مشکل لینک کردن آبجکت فایل

    نقل قول نوشته شده توسط jeson_park مشاهده تاپیک
    با تشکر از شما
    می تونستم از GRUB استفاده کنم اما خب می خوام خودم به بوت لودر ساده بنویسم
    چون مبدتی هستم نمی خوام درگیر مسائلی مثل MAKEFILE یا مثلا همین grub برای بوت بشم
    به نظر من بیشتر رو کرنل تمرکز کن تا بوت لودر!
    به هر حال اگه می خوای بوت لودر رو از اول خودت بنویسی، به لینک زیر یه سر بزن

    http://www.brokenthorn.com/Resources/OSDevIndex.html

  17. #17
    کاربر دائمی آواتار jeson_park
    تاریخ عضویت
    دی 1387
    محل زندگی
    گچساران
    سن
    33
    پست
    595

    نقل قول: مشکل لینک کردن آبجکت فایل

    دوستان از این حرف من ناراحت نشید
    اما هر کی رسیده اینجا یا گفته "بوت لودر رو عوض کن" یا گفته " به لینک های زیر سری بزنید"
    دوستان لینک هایی که شما دادید رو من خودم دارم و قبلا مطالعه کردم!
    این لینک آخری هم که در پست 16 گفته شده و بنده خودم دارم
    الان هم قسمت "Tutorial 5: Bootloaders 3" رو دارم می خونم
    خواهش می کنم اگه می خواید لینک بدین ..پست ندین بهتره!
    یه بار پست شماره 1 این تاپیک رو بخونید اگه می تونید راهنمایی کنید اگه هم نه که پست ندین
    ممنون

  18. #18

    نقل قول: مشکل لینک کردن آبجکت فایل

    شما در وبندوز به کار بردین که فکر میکنم پیش فرض براتون pe فرمت ساخته که باید از سوئیچ elf استفاده کنید
    برنامه در لینوکس به راحتی لینک شد ، فقط باید در فایل سی k_main با آندرلاین شروع بشه که ویرایش کنید
    بعد هم باید با لودر بوتش کنید که خود سایتش گفته با grub یا با لودر bootf02 bootsector این کار رو انجام بدین(اگر خواستین لودر شخصی بنویسید هر دور نگاهی بندازین دومی ساده تره میگرده دنبال فایل و در حافظه بار میکنش)

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

    برای دانلود ابزار های مورد نیاز هم به این لینک برین

    در این لینک هم joker گرامی آموزش کار بار ابزار های شبیه ساز رو توضیح دادن


    بله می دونم اما دلیلش رو نمی دونم ..قربون دستت میشه توضیح بدین چرا؟!؟!؟
    وقتی هر سیستم هدر خودشو رو داره و کامپایلری که برای محیط خاص نوشته شده از توابع api اون سیستم عامل استفاده میکنه مثلا برای داس از وقفه های داس استفاده میکنه که این توابع ناشناخته هست چرا که این توابع توسط سیستم عامل در حافظه رم قرار میگیره

    قبلا هم اینجا درخواست سورس کتابخانه رو داده بودم ( که نخواد دوباره بشینم همه رو بنویسم )
    در قسمتی گفتین پروژه کوچیکه اما اگر قصد ادامه دادن داشتین با پویا جان(pswin.pooya) همکاری کنید که چند سالی وقت گذاشتن نخواین از اول همه کار هارو تکرار کنید ، فقط اگر روش بهتری بود توابع رو بهینه یا ایجاد میکنید

    البته پویا جان از grub استفاده کرده که نظر شخصیم اینه همه موارد باید بومی سازی بشه

    ببنید پروژه کوچیک هست نمی خوامواسه یه پروژه کوچیک لینوکس نصب کنم و درگیرش شم
    یک wmware و نصب لینوکس که زمانی نمیبره و شما هم نمیخوای با سیستم عاملش آشنا شی فقط دستورات رو در کنسولش وارد میکنی و از ابزار هاش استفاده میکنید
    پیشنهاد میکنم لینوکس ubuntu رو نصب کنی نسخه 32 بیتی که باز درگیر سوییچ های تبدیل به 32 بیت و ساختار فایل که در ویندوز بهش برخوردی نشی بگی کامپایل یا لینک نشد

    دوستان از این حرف من ناراحت نشید
    چطور نشیم رو نمیدونم همه قصد کمک به شما برای حل مشکلتون رو دارن و وقت میزارن... ، شما توی سایت تخصصی سیستم عامل میخوای عضو شی ازت سوال تخصصی میکنه ببینه چیزی میدونی یا نه ، بیشتر موارد کارها تکراری هست و باید به مراجع رفت برای مطالعه بیشتر ، خطا هایی ها که شما قرار دادین بخاطر اجرای اون در سیستم عامل ویندوز هست که فکر میکنم ساختار پیش فرض سی برای کامپایل pe هست و باید تبدیل به elf بشه و یا موارد مشابه
    به فرمت فایل های زیر نگاه کنید:

    --------------------------------------------------------------------------------------

    http://www.osdever.net/tutorials/vie...imple-c-kernel

    --------------------------------------------------------------------------------------

    --------------------------------------------------------------------------------------
    assemble & compile & link
    --------------------------
    xman@ubuntu:~/Desktop/kernel$ nasm -f aout kernel_start.asm -o ks.o

    xman@ubuntu:~/Desktop/kernel$ gcc -c kernel.c -o kernel.o

    xman@ubuntu:~/Desktop/kernel$ ld -T link.ld -o kernel.bin ks.o kernel.o


    --------------------------------------------------------------------------------------

    --------------------------------------------------------------------------------------
    file format
    ------------
    xman@ubuntu:~/Desktop/kernel$ file ks.o
    ks.o: Linux/i386 impure executable (OMAGIC)


    xman@ubuntu:~/Desktop/kernel$ file kernel.o

    kernel.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

    xman@ubuntu:~/Desktop/kernel$ file kernel.bin
    kernel.bin: ASCII text

    --------------------------------------------------------------------------------------


    اینم خروجی برنامه:

    kernel.rar
    موفق باشی

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

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