در قسمت سوم در رابطه با هدر فابل صحبت کردیم و از اصول نوشتن آن گفتیم. اکنون داریم به آخرین مراحل آمادهسازی کد برای پیادهسازی روی سختافزار میرسیم. تا اینجا یه سری فایلهای باینری از جاهای مختلف رسیده دستمون که میخواهیم همه رو تبدیل به یه فایل کرده و تقدیم سختافزار کنیم! این کار وظیفه اصلی Linker هستش. برای انجام این مرحله یک فایل Linker هم در کنار بقیه فایلها در اختیار لینکر قرار میگیره تا با کمک این فایل بتونه این مسئولیت رو انجام بده. ما میتونیم از طریق ترمینال این فایل رو با فلگ T- بهش بدیم.
سؤالی که ممکنه پیش بیاد اینه که داخل فایل Linker چیا قرار میگیره؟
به صورت مختصر موارد زیر رو میتونیم داخل این فایل ببینیم:
- مپ کردن بخشهای کد به نواحی مختلف حافظه
- آدرس شروع و اندازه نواحی حافظه
- پارامترهای دسترسی برای نواحی مختلف حافظه
- بررسی اینکه مساله over allocation رخ نداده باشه و در صورت رخداد اطلاع دادن
- مشخص کردن نقطه شروع برنامه
عملیات لینکر در فایل Linker
نکته جالب اینه که تو فرآیند لینک کردن به تشخیص خود لینکر یه سری کتابخونهها به پروژه اضافه میشه که برای بعضی قسمتا ضروریه. مثلاً اینکه برنامه از تابع main شروع به اجرا کنه و در پایان این تابع هم متوقف بشه چیزی هست که تو یکی از همین کتابخونهها معرفی شده به نحوی که اگه شما این کتابخونه رو به لینکر بگید اضافه نکنه (دیفالت اضافه می کنه خودش) تو اجرای برنامه با ارور مواجه میشین چون برنامه نمیدونه دقیقاً از کجا باید شروع کنه به اجرا:)
بعضی از فلگهای مورد استفاده برای لینکر رو میتونید تو تصویر زیر ببینید:
راجع به دو فلگ آخر این جدول نحوه استفاده ازشون به صورت زیر هستش:
در نهایت وارد فرایند locating میشیم که منابع سختافزاری رو (عمدتاً فضای حافظه) در اختیار برنامه میذاره تا ازش استفاده کنه. خب طبیعتاً این مرحله وابستگی زیادی به معماری سخت افزار پیدا می کنه. در وهله اول این اختصاص منابع به صورت نمادهایی (symbols) برای قسمتهای مختلف حافظه صورت میگیره و در مرحله نهایی این نمادها به آدرس مستقیم حافظه مورد نظر تبدیل میشه و خب تو این مرحله تقریباً فرایند ما به اتمام میرسه!
فایل اجرایی که در نهایت تولید میشه میتونه به فرمتهای مختلفی باشه:
⦁ executable and linker format (ELF)
⦁ common object file format (COFF)
⦁ Intel Hex Record
⦁ Motorola S Record (SREC)
⦁ ARM Image file (AIF)
خب فکر کنم تا همین جا کافی باشه. ایشالا در قسمت پنجم میریم سراغ ابزار Make و نکات مرتبط باهاش!
منبع: سیسوگ