(فصل دوم – بخش پنجم)
در قسمتهای قبلی آموزش، مسیر حرکت و فصلهای پیش رو، بسیاری از مفاهیم مورد نیاز و سؤالها و ابهامات شما در این دوره پاسخ داده شده است.
پس اگر اولین بار است که این آموزش را شروع میکنید، با توجه به سلسله مراتب پیش بینی شده برای آموزشها، بهتر است از جلسه اول شروع کنید!
جلسه اول آموزش، ورود به دنیای امبدد لینوکس
همه آموزشهای امبدد لینوکس
ساختن تولچین Toolchain
برای ساختن تولچین گنو دو تا راه کلی وجود داره، یکی اینکه خودمون هر جزء از اون رو دانلود کنیم و بعد همه رو با هم کامپایل کنیم و یک راه دیگه هم اینکه از یه سری ابزارها برای این کار استفاده کنیم.
روش اول به دلیل این که اجزای تولچین هر کدوم نسخههای خودشون رو دارن و این نسخهها با هم بعضا سازگاری ندارن کار بسیار زمانبری هست چون باید دونه دونه نخسههای مختلف هر قسمت رو دانلود کنیم و بذاریم کامپایل شه و بعد ببینیم چی با چی ناسازگاری داره و نسخه رو عوض کنیم و باز همین پروسه رو بریم تا به نتیجه برسیم!
برای کار در راه اول، اگه کسی علاقه داشت میتونه بره سراغ این سایت:
http://www.linuxfromscratch.org
ما روش دوم رو انتخاب میکنیم و ابزاری هم که باهاش این کار رو میخواهیم انجام بدیم اسمش crosstool-NG هست که زمان کریم اسمش crosstool بوده.
البته ابزارهای دیگهای هم هست واسه این کار که با یکیشون توی فصلهای بعدی آشنا میشیم.
کراس تول ان جی یا کراس تول (crosstool / crosstool-NG) چیست؟
سالها پیش آقای Dan Kegel یه سری اسکریپ و makefile نوشت برای ساختن کراس تولچین و اسمش رو گذاشت 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
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 بازی کنید تا باهاش بیشتر آشنا بشید، چون توی قسمت بعد بدردتون خواهد خورد.
پایان بخش پنجم از فصل دوم
قسمت بعد (قسمت دهم – بخش ششم این فصل) را از اینجا میتونید مطالعه کنید، اما بهتره قبلش یه سری هم به نظرات این پایین بندازید، نظرات رو بخونید و اگر شما هم نظری دارید، مشارکت کنید!
همه آموزش های امبدد لینوکس