Elinux, توصیه شده, مقاله

امبدد لینوکس – قسمت نهم – Toolchain یا زنجیره‌ای از ابزارهای لازم برای ساختن همه چیز (بخش پنجم)

آموزش امبدد لینوکس

قسمت قبل

(فصل دوم – بخش پنجم)

 

ساختن تولچین Toolchain

برای ساختن تولچین گنو دو تا راه کلی وجود داره، یکی این‌که خودمون هر جزء از اون رو دانلود کنیم و بعد همه رو با هم کامپایل کنیم و یک راه دیگه هم این‌که از یه سری ابزارها برای این کار استفاده کنیم.

روش اول به دلیل این که اجزای تولچین هر کدوم نسخه‌های خودشون رو دارن و این نسخه‌ها با هم بعضا سازگاری ندارن کار بسیار زمان‌بری هست چون باید دونه دونه نخسه‌های مختلف هر قسمت رو دانلود کنیم و بذاریم کامپایل شه و بعد ببینیم چی با چی ناسازگاری داره و نسخه رو عوض کنیم و باز همین پروسه رو بریم تا به نتیجه برسیم!

برای کار در راه اول، اگه کسی علاقه داشت می‌تونه بره سراغ این سایت:

http://www.linuxfromscratch.org/

 

ما روش دوم رو انتخاب می‌کنیم و ابزاری هم که باهاش این کار رو می‌خواهیم انجام بدیم اسمش crosstool-NG هست که زمان کریم اسمش crosstool بوده.

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

 

کراس تول ان جی یا کراس تول (crosstool / crosstool-NG)   چیست؟

سال‌ها پیش آقای Dan Kegel یه سری اسکریپ و makefile نوشت برای ساختن کراس تولچین و اسمش رو گذاشت crosstool که خوشبختانه هنوز هم از این آدرس قابل دسترس هست:

http://kegel.com/crosstool/

 

بعدها آقای Yann E. Morin اومد پشتیبانی از uClibc رو به کار آقای Kegel اضافه کرد و اسمش رو گذاشت crosstool-NG که اون NG مخفف Next Generation هست.

اگه یه سر به سایت crosstool-NG بزنیم می‌بینیم که خودش خودش رو اینجوری معرفی کرده:

Crosstool-NG is a versatile (cross) toolchain generator. It supports many architectures and components and has a simple yet powerful menuconfig-style interface.

به زبون خودمونی crosstool-NG یک تولچین‌ساز همه کاره است که معماری‌های بسیاری رو پشتیبانی می‌کنه و رابط کاربریش هم menuconfig طور هست. حالا menuconfig چیه؟ عجول نباشین، می‌بینمیش یکم دیگه.

 

دانلود و نصب crosstool-NG

یا علی گفتیم و کارهای عملی آغاز شد!

یه سر به قسمت داکیومنت سایت می‌زنیم ببینیم برای نصب چه باید کرد:

http://crosstool-ng.github.io/docs/ 

بله فقط فهرست اینجا هست و دیگر هیچ 🙂

پس می‌ریم به قسمت Installing crosstool-NG.

گفته که با توجه به سیستم‌عامل هاست یه سری پیش نیازها هست که برید از  اینجا ببینید.

خوش‌بختانه کریس رفته دیده و می‌گه که باید این‌ها رو نصب کنید:

sudo apt-get install automake bison chrpath flex g++ git gperf gawk libexpat1-dev libncurses5-dev libsdl1.2-dev libtool python2.7-dev texinfo

حالا قبل از اینکه بریم واسه دانلود کردن crosstool-NG من یکم منظم‌سازی می‌کنم

mkdir ~/EmbededLinux

cd ~/EmbededLinux

mkdir f1c100s

cd f1c100s

mkdir bootldr build-tools debug doc images kernel project rootfs sysapps tmp tools

cd build-tools

خب حالا می‌ریم واسه گیت کردن و ساختن و نصب  crosstool-NG.

 

 اول اینجوری گیتش می‌کنیم:

git clone https://github.com/crosstool-ng/crosstool-ng.git

بعد میریم توی فولدرش

cd crosstool-ng

بعد با این دستور می‌بینیم که چه نسخه‌ای هست

git describe –tags

که به من می‌گه

crosstool-ng-1.24.0-105-g5659366b

همنیجا بگم که اگه گیت رو بلد نیستین برین از عمو جادی یاد بگیرین!

حالا قبل از make باید اسکریپت bootstrap رو اجرا کنیم

./bootstrap

خب مثل هر سورس دیگه‌ای توی لینوکس مراحل رو می‌ریم فقط من ترجیح می‌دم که بش بگم قراره اینجا نصب شی

/home/at00/EmbeddedLinux/F1C100s/build-tools/crosstool-ng-build

پس سه تا دستور زیر رو اجرا می‌کنیم

./configure –prefix=/home/at00/EmbeddedLinux/F1C100s/build-tools/crosstool-ng-build

make

make install

خب اگه همه چی خوب پیش بره خروجی این دستور باید واستون جذاب باشه!

../crosstool-ng-build/bin/ct-ng list-samples

 

تولچین Toolchain

 

Status  Sample name

[L…]   aarch64-rpi3-linux-gnu

[L..X]   aarch64-unknown-linux-android

[L…]   aarch64-unknown-linux-gnu

[L…]   aarch64-unknown-linux-uclibc

[L…]   alphaev56-unknown-linux-gnu

[L…]   alphaev67-unknown-linux-gnu

[L…]   arc-arc700-linux-uclibc

[L…]   arc-archs-linux-gnu

[L…]   arc-multilib-elf32

[L…]   arc-multilib-linux-gnu

[L…]   arc-multilib-linux-uclibc

[L…]   arm-bare_newlib_cortex_m3_nommu-eabi

[L…]   arm-cortex_a15-linux-gnueabihf

[L..X]   arm-cortexa5-linux-uclibcgnueabihf

[L…]   arm-cortex_a8-linux-gnueabi

[L..X]   arm-cortexa9_neon-linux-gnueabihf

[L..X]   x86_64-w64-mingw32,arm-cortexa9_neon-linux-gnueabihf

[L…]   armeb-unknown-eabi

[L…]   armeb-unknown-linux-gnueabi

[L…]   armeb-unknown-linux-uclibcgnueabi

[L…]   arm-multilib-linux-uclibcgnueabi

[L…]   arm-nano-eabi

[L…]   arm-unknown-eabi

[L…]   arm-unknown-linux-gnueabi

[L..X]   arm-unknown-linux-musleabi

[L…]   arm-unknown-linux-uclibcgnueabi

[L..X]   arm-unknown-linux-uclibcgnueabihf

[L…]   armv6-nommu-linux-uclibcgnueabi

[L…]   armv6-rpi-linux-gnueabi

[L…]   armv7-rpi2-linux-gnueabihf

[L…]   armv8-rpi3-linux-gnueabihf

[L…]   avr

[L…]   i586-geode-linux-uclibc

[L…]   i686-centos6-linux-gnu

[L…]   i686-centos7-linux-gnu

[L…]   i686-nptl-linux-gnu

[L…]   i686-ubuntu12.04-linux-gnu

[L…]   i686-ubuntu14.04-linux-gnu

[L…]   i686-ubuntu16.04-linux-gnu

[L..X]   i686-w64-mingw32

[L…]   m68k-unknown-elf

[L…]   m68k-unknown-uclinux-uclibc

[L…]   powerpc-unknown-linux-uclibc,m68k-unknown-uclinux-uclibc

[L…]   mips64el-multilib-linux-uclibc

[L…]   mips-ar2315-linux-gnu

[L…]   mipsel-multilib-linux-gnu

[L…]   mipsel-sde-elf

[L…]   mipsel-unknown-linux-gnu

[L…]   mips-malta-linux-gnu

[L…]   mips-unknown-elf

[L…]   mips-unknown-linux-uclibc

[L..X]   moxiebox

[L..X]   moxie-unknown-elf

[L..X]   x86_64-multilib-linux-uclibc,moxie-unknown-moxiebox

[L..X]   msp430-unknown-elf

[L…]   nios2-altera-linux-gnu

[L..X]   i686-w64-mingw32,nios2-spico-elf

[L…]   nios2-unknown-elf

[L…]   powerpc-405-linux-gnu

[L…]   powerpc64le-unknown-linux-gnu

[L…]   powerpc64-multilib-linux-gnu

[L…]   powerpc64-unknown-linux-gnu

[L…]   powerpc-8540-linux-gnu

[L…]   powerpc-860-linux-gnu

[L…]   powerpc-e300c3-linux-gnu

[L…]   powerpc-e500v2-linux-gnuspe

[L…]   x86_64-multilib-linux-uclibc,powerpc-unknown-elf

[L…]   powerpc-unknown-linux-gnu

[L…]   powerpc-unknown-linux-uclibc

[L…]   powerpc-unknown_nofpu-linux-gnu

[L..X]   riscv32-hifive1-elf

[L..X]   riscv32-unknown-elf

[L..X]   riscv64-unknown-elf

[L..X]   riscv64-unknown-linux-gnu

[L..X]   s390-ibm-linux-gnu

[L…]   s390x-ibm-linux-gnu

[L…]   sh-multilib-linux-gnu

[L…]   sh-multilib-linux-uclibc

[L…]   sh-unknown-elf

[L…]   sparc64-multilib-linux-gnu

[L…]   sparc-leon-linux-uclibc

[L…]   sparc-unknown-linux-gnu

[L…]   x86_64-centos6-linux-gnu

[L…]   x86_64-centos7-linux-gnu

[L…]   x86_64-multilib-linux-gnu

[L..X]   x86_64-multilib-linux-musl

[L…]   x86_64-multilib-linux-uclibc

[L..X]   x86_64-w64-mingw32,x86_64-pc-linux-gnu

[L…]   x86_64-ubuntu12.04-linux-gnu

[L…]   x86_64-ubuntu14.04-linux-gnu

[L…]   x86_64-ubuntu16.04-linux-gnu

[L…]   x86_64-unknown-linux-gnu

[L…]   x86_64-unknown-linux-uclibc

[L..X]   x86_64-w64-mingw32

[L..X]   xtensa-fsf-elf

[L…]   xtensa-fsf-linux-uclibc

 L (Local)       : sample was found in current directory

 G (Global)      : sample was installed with crosstool-NG

 X (EXPERIMENTAL): sample may use EXPERIMENTAL features

 B (BROKEN)      : sample is currently broken

 O (OBSOLETE)    : sample needs to be upgraded

 

خب حالا شما یکم به این اسم‌ها دقت کنید و سعی کنید یکم با crosstool-NG بازی کنید تا باهاش بیشتر آشنا بشید، چون توی قسمت بعد بدردتون خواهد خورد.

 

پایان بخش پنجم از فصل دوم


همه آموزش های امبدد لینوکس

Rich_Dad

درباره Rich_Dad

طراحی،بومی سازی، بهینه سازی و تولید سیستم هاومحصولات الکترونیکی وکنترلی،با توجه به تکنولوژی روز و نیاز تولیدکنندگان میهن عزیزمان ایران درحوزه های تجاری،صنعتی و تجهیزات پزشکی

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

10 دیدگاه در “امبدد لینوکس – قسمت نهم – Toolchain یا زنجیره‌ای از ابزارهای لازم برای ساختن همه چیز (بخش پنجم)

  1. سجاد گفت:

    درود و خسته نباشید

  2. سلام و تشکر بابت آموزش.
    «گفته که با توجه به سیستم‌عامل هاست یه سری پیش نیازها هست که برید از اینجا ببینید.»
    تقریبا سخت ترین بخش ساخت crosstoll این بخش هست که نیاز داره به کار با داکر(البته با توجه به متفاوت بودن نسخه سیستم عامل ها و کتابخانه های مختلف ،استفاده از داکر منطقی هست).جادی عزیز یه آموزش در رابطه با داکر داره که دوستانی که آشنایی ندارن میتونن استفاده کنن.
    Rich_Dad عزیز بهتر بود این بخش رو بیشتر توضیح میدادید.

    1. Rich_Dad Rich_Dad گفت:

      سلام جناب اسماعیلی عزیز و عرض تشکر
      در نظر داشته باشید این آموزش مقدماتی می باشد و ترجیح در ساده سازی روند مقاله می باشد.
      به همین خاطر در ابتدا مشخص کردیم، سیستم عامل فلان نسخه از Ubuntu است و با توجه به این مطلب پیش نیازهای crosstool-NG ذکر شده.
      البته در حالت کلی و در نظر نگرفتم موارد بالا صحیح می فرمایید.
      موفق باشید

  3. احسان گفت:

    سلام
    خیلی ممنون
    کاش یه مقدار سرعت بیشتری داشت آموزش ها

    1. Rich_Dad Rich_Dad گفت:

      سلام بر احسان عزیز
      ما تمام تلاشمون را داریم انجام میدیم و اغلب بخش های جدید، از قبل نوشته میشه.
      البته مدیریت پروژه های در حال تحویل و اجرای طرح های پیش رو هم هست که می بایست به سرانجام برسونیم تا در این شرایط توانسته باشیم، موثرتر واقع بشویم.
      با تشکر از توجه شما به مطالب

      1. احسان گفت:

        خیلی هم عالی
        کمتر کسی مطالبی به این ارزشمندی در اختیار دیگران قرار میده
        ممنون

        1. Rich_Dad Rich_Dad گفت:

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

  4. عباس گفت:

    سلام. مهندس عالی پیش میرید. خسته نباشید