با قسمت نهم از دوره ورود به دنیای امبدد لینوکس که دوره مقدماتی آموزش امبدد لینوکس می باشد همراه ما باشید.
(فصل دوم – بخش پنجم)
در قسمتهای قبلی آموزش، مسیر حرکت و فصلهای پیش رو، بسیاری از مفاهیم مورد نیاز و سؤالها و ابهامات شما در این دوره پاسخ داده شده است.
پس اگر اولین بار است که این آموزش را شروع میکنید، با توجه به سلسله مراتب پیش بینی شده برای آموزشها، بهتر است از جلسه اول شروع کنید!
جلسه اول آموزش، ورود به دنیای امبدد لینوکس
ساختن تولچین 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.
گفته که با توجه به سیستمعامل هاست یه سری پیش نیازها هست که برید از اینجا ببینید.
خوشبختانه کریس رفته دیده و میگه که باید اینها رو نصب کنید:
1 | 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 من یکم منظمسازی میکنم
1 2 3 4 5 6 7 8 9 10 11 | 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.
اول اینجوری گیتش میکنیم:
1 | git clone https://github.com/crosstool-ng/crosstool-ng.git |
بعد میریم توی فولدرش
1 | cd crosstool-ng |
بعد با این دستور میبینیم که چه نسخهای هست
1 | git describe –tags |
که به من میگه
1 | crosstool-ng-1.24.0-105-g5659366b |
همنیجا بگم که اگه گیت رو بلد نیستین برین از عمو جادی یاد بگیرین!
حالا قبل از make باید اسکریپت bootstrap رو اجرا کنیم
1 | ./bootstrap |
خب مثل هر سورس دیگهای توی لینوکس مراحل رو میریم فقط من ترجیح میدم که بش بگم قراره اینجا نصب شی
1 | /home/at00/EmbeddedLinux/F1C100s/build-tools/crosstool-ng-build |
پس سه تا دستور زیر رو اجرا میکنیم
1 2 3 4 5 6 | ./ configure --prefix=/home/at00/EmbeddedLinux/F1C100s/build-tools/crosstool-ng-build make make install |
خب اگه همه چی خوب پیش بره خروجی این دستور باید واستون جذاب باشه!
1 | ../crosstool-ng-build/bin/ct-ng list-samples |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | 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 بازی کنید تا باهاش بیشتر آشنا بشید، چون توی قسمت بعد بدردتون خواهد خورد.
پایان بخش پنجم از فصل دوم
reza@areza-ThinkPad-P50:~/EmbededLinux/f1c100s/build-tools/crosstool-ng$ dir
ABOUT-NLS bash-completion config.h.in configure contrib debian kconfig m4 Makefile.in po scripts verbatim-data.mk
aclocal.m4 bootstrap config.h.in~ configure~ COPYING docs LICENSE maintainer packages README.md testing
autom4te.cache config config.log configure.ac ct-ng.in issue_template.md licenses.d Makefile.am paths.sh.in samples TODO
areza@areza-ThinkPad-P50:~/EmbededLinux/f1c100s/build-tools/crosstool-ng$ make
make: *** No targets specified and no makefile found. Stop.
areza@areza-ThinkPad-P50:~/EmbededLinux/f1c100s/build-tools/crosstool-ng$ sudo make install
[sudo] password for areza:
make: *** No rule to make target ‘install’. Stop.
درود بر شما. من تا اینجا دروس را دنبال کرده ام اما دو دستورmake,make install اجرا نمی شود(no such file or directory) ubuntu 24.04 کار می کنم
لطفا راهنمایی فرمایید
سلام. قبلش دستور configure رو اجرا کردید ؟
بدون ارور اجرا شده ؟
بلی در دایرکتوری دو فایل Makefile.in و Makefile.am وجود داردکه توی اینترنت سرچ کرده ام میگه باید توی دایرکتوریMakefile بدون پسوندوجود داشته باشه(دایرکتوریcrosstool-ng),configure هم اجراشده
ممنون
همونطور که گفتم باید بدون ارور اجرا شده باشه.
برای اینکه راحت تر بتونیم پیش بریم سوالتون رو داخل انجمن بپرسید
خروجی دستور configure رو هم قرار بدید
https://ask.sisoog.com/
سلام
کراس تول ان جی نصب شد.
فقط مشکلی که من خوردم DNS لینوکسم آی پی ایرانی بود، برای همین بعضی از پکیجها رو نصب نمیکرد دستور apt-get update خطای دریافت اطلاعات میزد. DNS ها رو به 8.8.8.8 و 1.1.1.1 تغییر دادم اون چندتا پکیجی که نصب نمیشدن، نصب شدن و بعدشم به سلامتی دستور ct-ng list-sample اجرا شد.
ممنونم و سپاسگذارم
سلام وقتتون بخیر
ممنون از همراهی شما
سلام … ابزار هایی که برای اجرای کامند های فوق بود کامل نبود.
من از ubuntu linux استفاده می کنم البته.
که برای اجرای کامند ها باید قبلش دوتا ابزار دیگه که با دستور های زیر می تونید نصب کنیدشون.
sudo apt install help2man
sudo apt install libtool-bin
البته اینو بگم که برای هر کسی ممکنه هر اتفاقی بیوفته اخرش که متفاوته با دیگری … حتما ارور هاتون رو بخونید شاید با یه sudo apt install توی اون مراحل نصب کارتون راه بیوفته 🙂
سلام بر پویا
بله دقیقا ممکنه روی هر سیستم یک سری نیازمندیها وجود نداشته باشه که با خواندن خطا ها میشه پیداش کرد و برطرفش کرد.
سلام وقتتون بخیر
ممنون از همراهی شما
بله درسته
سلام و تشکر، من کلی داخل نت برای f1c100s سرچ کردم اما هیچکدوم مطالبشون پیوسته و پایه ای نبود.
سلام جناب پورخلیلی عزیز
بله تولید و یا نشر محتوای پیوسته برای چیپ های متنوعی که در حال حاضر با این سرعت به بازار می آیند می تواند کار طاقت فرسایی باشد، مخصوصاً اگر نیاز باشد بخش های مختلف این آی سی ها راه اندازی شود، بر همین اساس اهمیت فراگیری فن ماهیگیری در این زمینه بارز تر است تا افراد خودشان بتوانند نسبت به تامین نیازشان اقدام نمایند
البته در این میان دستیابی به اطلاعات کار با برخی پردازنده ها یا بخش هایی از آنها به صورت مستقیم در دسترس نمی باشد و می بایست برای آن هزینه نمود تا کدها و کتابخانه های مورد نظر در دسترس قرار بگیرند، دقیقاً مانند کاری که ما در طراحی آیفون یا درب بازکن تصویری با آن روبرو بودیم و به همین نحو به انجام رساندیم و در حال حاضر به بیشتر بخش های پردازنده های آن پروژه به صورت عملیاتی دسترسی داریم.
درود و خسته نباشید
سلام و تشکر
سلام و تشکر بابت آموزش.
«گفته که با توجه به سیستمعامل هاست یه سری پیش نیازها هست که برید از اینجا ببینید.»
تقریبا سخت ترین بخش ساخت crosstoll این بخش هست که نیاز داره به کار با داکر(البته با توجه به متفاوت بودن نسخه سیستم عامل ها و کتابخانه های مختلف ،استفاده از داکر منطقی هست).جادی عزیز یه آموزش در رابطه با داکر داره که دوستانی که آشنایی ندارن میتونن استفاده کنن.
Rich_Dad عزیز بهتر بود این بخش رو بیشتر توضیح میدادید.
سلام جناب اسماعیلی عزیز و عرض تشکر
در نظر داشته باشید این آموزش مقدماتی می باشد و ترجیح در ساده سازی روند مقاله می باشد.
به همین خاطر در ابتدا مشخص کردیم، سیستم عامل فلان نسخه از Ubuntu است و با توجه به این مطلب پیش نیازهای crosstool-NG ذکر شده.
البته در حالت کلی و در نظر نگرفتم موارد بالا صحیح می فرمایید.
موفق باشید
سلام
خیلی ممنون
کاش یه مقدار سرعت بیشتری داشت آموزش ها
سلام بر احسان عزیز
ما تمام تلاشمون را داریم انجام میدیم و اغلب بخش های جدید، از قبل نوشته میشه.
البته مدیریت پروژه های در حال تحویل و اجرای طرح های پیش رو هم هست که می بایست به سرانجام برسونیم تا در این شرایط توانسته باشیم، موثرتر واقع بشویم.
با تشکر از توجه شما به مطالب
خیلی هم عالی
کمتر کسی مطالبی به این ارزشمندی در اختیار دیگران قرار میده
ممنون
محبت دارید، هدف ارتقای سطح دانش و همدلی مابین نیروهای فنی ایران زمین و همچنین ایجاد بستری برای همکاری در زمینه های فنی است?
سلام. مهندس عالی پیش میرید. خسته نباشید
سلام و تشکر