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

0
63
امبدد لینوکس – قسمت نهم – Toolchain یا زنجیره‌ای از ابزارهای لازم برای ساختن همه چیز (بخش پنجم)
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

 

نصب crosstool-NG
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 بازی کنید تا باهاش بیشتر آشنا بشید، چون توی قسمت بعد بدردتون خواهد خورد.

 

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

 

قسمت بعد (قسمت دهم – بخش ششم این فصل) را از اینجا میتونید مطالعه کنید، اما بهتره قبلش یه سری هم به نظرات این پایین بندازید، نظرات رو بخونید و اگر شما هم نظری دارید، مشارکت کنید!
همه آموزش های امبدد لینوکس

منبع:سیسوگ
مطلب قبلیامبدد لینوکس – قسمت دهم – ضمیمه راه اندازی سخت افزار (بخش ششم)
مطلب بعدیامبدد لینوکس – قسمت هفتم – Toolchain یا زنجیره‌ای از ابزارهای لازم برای ساختن همه چیز (بخش سوم)

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید