مشکل لینک کردن آبجکت فایل
با سلام
یه کرنل داریم که از 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 = .;
}
ممنون میشم راهنمایی کنید
نقل قول: مشکل لینک کردن آبجکت فایل
یعنی الان کسی نیست جوا منو بده؟!؟؟! :عصبانی++:
نقل قول: مشکل لینک کردن آبجکت فایل
سلام
آخه نحوه كامپايل شما هم مشكل داره. Makefile آراكس رو نگاه كن متوجه ميشي:
http://arax.svn.sourceforge.net/view...17&view=markup
نقل قول: مشکل لینک کردن آبجکت فایل
من make file ندارم
کرنل خیلی کوچیکه!
فقط می خوام زودی بوت شه و تابع سی رو صدا بزنه
راه حلی سراغ ندارین؟؟
پلت فرمم ویندوز 7 هست
مشکل چیه؟؟
نقل قول: مشکل لینک کردن آبجکت فایل
نقل قول:
من make file ندارم
نگفتم كه make بنويس گفتم از روش نحوه كامپايل كردن رو نگاه كن. بدون make و لينوكس به نظر من فايده نداره
نقل قول: مشکل لینک کردن آبجکت فایل
نقل قول:
نوشته شده توسط
pswin.pooya
نگفتم كه make بنويس گفتم از روش نحوه كامپايل كردن رو نگاه كن. بدون make و لينوكس به نظر من فايده نداره
ببنید پروژه کوچیک هست نمی خوامواسه یه پروژه کوچیک لینوکس نصب کنم و درگیرش شم
حالا اصلا درحالت کلی چه راه هایی برای لینک کردن 2 تا کد (یکی اسمبلی و یکی هم سی ) به وجود داره؟
نقل قول: مشکل لینک کردن آبجکت فایل
كار خيلي راحتي هست. اگر ميخوايين داخل اسمبلي توابع رو تعريف كنيد بايد از استاندارد cdecl استفاده بكنيد و بعدش پروتوتايپ تابع رو بنويسيد و دست آخر لينك كنيد و بر عكس اگر ميخواييد توابع سي رو از داخل اسمبلي صدا كنيد كافيه كه از دستور call استفاده بكنيد. داخل آراكس هر دو نمونه اون هست.
نقل قول: مشکل لینک کردن آبجکت فایل
نقل قول:
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]
نقل قول: مشکل لینک کردن آبجکت فایل
نقل قول:
نوشته شده توسط
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".
نقل قول: مشکل لینک کردن آبجکت فایل
چرا 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
موفق باشی
نقل قول: مشکل لینک کردن آبجکت فایل
با تشکر از شما
بنده در پست اول گفتم
کرنل 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-=-=-=-=
باز هم موقع کامپایل ارور داد
http://up98.org/upload/server1/02/g/...aqya1pcnf7.png
نقل قول: مشکل لینک کردن آبجکت فایل
ساختار را اشتباه نوشتین ، به لینک های زیر برین تا مشکلتون حل شه،کد سی تونم هم که میدونید نباید از فایل کتابخانه سی استفاده کنید
Hello World Boot Loader
How to develop your own Boot Loader
OS Development Tutorials
موفق باشی
نقل قول: مشکل لینک کردن آبجکت فایل
نقل قول:
نوشته شده توسط
xman_1365_x
ساختار را اشتباه نوشتین ، به لینک های زیر برین تا مشکلتون حل شه،
اتفاقا این کرنل من هم مربوط میشه به یکی از همین لینک ها
اینجا
نقل قول:
نوشته شده توسط
xman_1365_x
کد سی تونم هم که میدونید نباید از فایل کتابخانه سی استفاده کنید
موفق باشی
بله می دونم اما دلیلش رو نمی دونم ..قربون دستت میشه توضیح بدین چرا؟!؟!؟ :لبخند:
دیگه نرم الکی تاپیک جدا بزنم :لبخندساده:
قبلا هم اینجا درخواست سورس کتابخانه رو داده بودم ( که نخواد دوباره بشینم همه رو بنویسم )
با تشکر
1 ضمیمه
نقل قول: مشکل لینک کردن آبجکت فایل
بوت لودرت ایراد داره
باید با استفاده از یک بوت لودر مثل grub به protected mode سوئیچ کنی
از همون صفحه که مطالعه کردی و کد رو نوشتی ازش ،اگه توجه می کردی در پایین صفحه بهش اشاره کرده !
یک فایل ضمیمه گذاشتم،یاد میده که چه جوری کرنل رو با grub بوت کنیم و خود grub رو هم داره
با تشکر
نقل قول: مشکل لینک کردن آبجکت فایل
با تشکر از شما
می تونستم از GRUB استفاده کنم اما خب می خوام خودم به بوت لودر ساده بنویسم
چون مبدتی هستم نمی خوام درگیر مسائلی مثل MAKEFILE یا مثلا همین grub برای بوت بشم
نقل قول: مشکل لینک کردن آبجکت فایل
نقل قول:
نوشته شده توسط
jeson_park
با تشکر از شما
می تونستم از GRUB استفاده کنم اما خب می خوام خودم به بوت لودر ساده بنویسم
چون مبدتی هستم نمی خوام درگیر مسائلی مثل MAKEFILE یا مثلا همین grub برای بوت بشم
به نظر من بیشتر رو کرنل تمرکز کن تا بوت لودر!
به هر حال اگه می خوای بوت لودر رو از اول خودت بنویسی، به لینک زیر یه سر بزن
http://www.brokenthorn.com/Resources/OSDevIndex.html
نقل قول: مشکل لینک کردن آبجکت فایل
دوستان از این حرف من ناراحت نشید
اما هر کی رسیده اینجا یا گفته "بوت لودر رو عوض کن" یا گفته " به لینک های زیر سری بزنید"
دوستان لینک هایی که شما دادید رو من خودم دارم و قبلا مطالعه کردم!
این لینک آخری هم که در پست 16 گفته شده و بنده خودم دارم
الان هم قسمت "Tutorial 5: Bootloaders 3" رو دارم می خونم
خواهش می کنم اگه می خواید لینک بدین ..پست ندین بهتره!
یه بار پست شماره 1 این تاپیک رو بخونید اگه می تونید راهنمایی کنید اگه هم نه که پست ندین
ممنون
1 ضمیمه
نقل قول: مشکل لینک کردن آبجکت فایل
شما در وبندوز به کار بردین که فکر میکنم پیش فرض براتون 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
--------------------------------------------------------------------------------------
اینم خروجی برنامه:
ضمیمه 85339
موفق باشی