از نرم‌افزار تا سخت‌افزار – قسمت چهارم – فایل Linker و فرآیند Locating

blog
۱۳۹۹-۰۴-۰۱
2 دقیقه

در قسمت سوم در رابطه با هدر فابل صحبت کردیم و از اصول نوشتن آن گفتیم. اکنون داریم به آخرین مراحل آماده‌سازی کد برای پیاده‌سازی روی سخت‌افزار می‌رسیم. تا اینجا یه سری فایل‌های باینری از جاهای مختلف رسیده دستمون که می‌خواهیم همه رو تبدیل به یه فایل کرده و تقدیم سخت‌افزار کنیم! این کار وظیفه اصلی Linker هستش. برای انجام این مرحله یک فایل Linker هم در کنار بقیه فایل‌ها در اختیار لینکر قرار می‌گیره تا با کمک این فایل بتونه این مسئولیت رو انجام بده. ما میتونیم از طریق ترمینال این فایل رو با فلگ T- بهش بدیم.

سؤالی که ممکنه پیش بیاد اینه که داخل فایل Linker چیا قرار می‌گیره؟

به صورت مختصر موارد زیر رو میتونیم داخل این فایل ببینیم:

  • مپ کردن بخش‌های کد به نواحی مختلف حافظه
  • آدرس شروع و اندازه نواحی حافظه
  • پارامترهای دسترسی برای نواحی مختلف حافظه
  • بررسی اینکه مساله over allocation رخ نداده باشه و در صورت رخداد اطلاع دادن
  • مشخص کردن نقطه شروع برنامه

 

عملیات لینکر در فایل Linker

نکته جالب اینه که تو فرآیند لینک کردن به تشخیص خود لینکر یه سری کتابخونه‌ها به پروژه اضافه میشه که برای بعضی قسمتا ضروریه. مثلاً اینکه برنامه از تابع main شروع به اجرا کنه و در پایان این تابع هم متوقف بشه چیزی هست که تو یکی از همین کتابخونه‌ها معرفی شده به نحوی که اگه شما این کتابخونه رو به لینکر بگید اضافه نکنه (دیفالت اضافه می کنه خودش) تو اجرای برنامه با ارور مواجه میشین چون برنامه نمیدونه دقیقاً از کجا باید شروع کنه به اجرا:)
بعضی از فلگ‌های مورد استفاده برای لینکر رو میتونید تو تصویر زیر ببینید:

فلگ لینکر در فایل Linker

 

راجع به دو فلگ آخر این جدول نحوه استفاده ازشون به صورت زیر هستش:

فلگ لینکر در فایل Linker

در نهایت وارد فرایند locating میشیم که منابع سخت‌افزاری رو (عمدتاً فضای حافظه) در اختیار برنامه میذاره تا ازش استفاده کنه. خب طبیعتاً این مرحله وابستگی زیادی به معماری سخت افزار پیدا می کنه. در وهله اول این اختصاص منابع به صورت نمادهایی (symbols) برای قسمت‌های مختلف حافظه صورت می‌گیره و در مرحله نهایی این نمادها به آدرس مستقیم حافظه مورد نظر تبدیل میشه و خب تو این مرحله تقریباً فرایند ما به اتمام میرسه!
فایل اجرایی که در نهایت تولید میشه میتونه به فرمت‌های مختلفی باشه:

⦁ executable and linker format (ELF)
⦁ common object file format (COFF)
⦁ Intel Hex Record
⦁ Motorola S Record (SREC)
⦁ ARM Image file (AIF)

 

خب فکر کنم تا همین جا کافی باشه. ایشالا در قسمت پنجم میریم سراغ ابزار Make و نکات مرتبط باهاش!

اطلاعات
2
0
لینک و اشتراک
profile

سعید حقیقی پور

متخصص الکترونیک

تا حالا به این فکر کردین که تو یه سیستم کامپیوتری GPU چقدر کارآمد و مهمه ولی به اندازه CPU شناخته شده نیست.یه جورایی همون "مجهولون فی الارض معروفون فی السماء" که میگن! یه حسی بهم میگه کاش بتونم مثه GPU باشم :)

مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد. جستجو در آیسی
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
خانواده سیسوگ

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند.
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد.
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند.
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند.
family

دیدگاه ها

profile
محمدرضا عابدینی گفت :
۱۳۹۹-۰۴-۰۲ ۱۵:۱۷

سلام مطالب بسیار عالی ومفیدی بود ممنون. مهندس در رابطه با فایل های خروجی که در اخر مطلب فرمودید مثال هایی میزنید مثلا دیدم برای دیباگ کردن داخل نرم افزار پروتئوس ازcof استفاده میشه یا elf برای دیباگ کردن تو gcc . اگر درمورد خروجی های زیر توضیحات بیشتری بدید ممنون میشم

profile
حسین گفت :
۱۳۹۹-۰۴-۰۲ ۰۲:۳۹

سلام .
بسیار سپاسگزارم . بابت نوشتن این سری مطالب بخصوص این قسمت .
من خیلی دوست دارم بدونم که پارامترهای کمپایلری که باهاش کار میکنم چه چیزهایی هست .
چند تا سوال هم دارم .
1 – اول اینکه گفته بودید لینکر برای لینک کردن فایلها ( که اگر اشتباه نکنم object ها) به یک فایل کمکی احتیاج داره .
اون فایل رو چطور باید تهیه کرد ؟ خودمون باید بنویسیمش ( یعنی کلا چیز دست نویس هست ) یا یک چیز ثابت هست ؟
2- این (symbols) ها که برای locating برای منابع سخت افزاری استفاده میشه چه نامهایی دارند؟ آیا اینها را لینکراستفاده میکنه ؟
کجا تعریف میشن ؟

3 – من با یک نرم افزار برای gcc و هسته ARM کدنویسی میکنم که یک فایل با پسوند ld تولید میکنه ، این چی هست؟
راستش رو بخواهید در یکی از مطالب همین سایت در مورد برنامه نویسی رزبری بدون سیستم عامل مطلب هست . و یک کد نمونه را با gcc از طریق خط فرمان کمپایل کرده ، من میخوام با نرم افزار خودم اینکار را انجام بدم ( البته توی قسمتهای بعدی مطلب از طریق نصب پلاگینهایی برای eclips این کار انجام شده ولی چون روی نرم افزار من از قبل پلاگینهایی نصب هست و نمیدونم که نصب پلاگینهای جدید چه تاثیری میزاره ) نیاز دارم دقیقا بدونم کمپایل و لینک به صورت دستی چطور باید انجام بشه با توجه به اینکه توی مطلب قسمت سوم رزبری ،فقط یک فایل که از طریق خط فرمان کمپایل شد و اون موضوع لینک کردن چندتا فایل با لینکر مشهود نیست .البته وقتی طبق مطالب سایت کد رو از طریق خط فرمان کمپایل کردم کمپایلر یک اخطار با موضوع:
cannot find entry symbol _start; defaulting to 0000800c را صادر کرد .
که فکر میکنم به همون نمادهای مربوط به تخصیص سخت افزار که فرمودید ، مربوط میشه .
ببخشید یکم طولانی شد ام اگر در مورد اینها توضیحاتی با جزئیات زیاد بدید خیلی خوب خواهد بود .

سپاس فراوان بابت مطلب بسیار خوب شما.

become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله