امبدد لینوکس – قسمت یازدهم – کار با crosstool-NG – زنجیره‌ای از ابزارهای لازم برای ساختن همه چیز (بخش هفتم)

0
591
امبدد لینوکس – قسمت یازدهم – کار با crosstool-NG – زنجیره‌ای از ابزارهای لازم برای ساختن همه چیز (بخش هفتم)

(فصل دوم – بخش هفتم)

خوب! توی قسمت قبل یاد گرفتیم که چطوری یه برد “رسپبری پای سه بی پلاس – Raspberry Pi 3 B Plus” یا “لیچی پای نانو – Lichee Pi Nano” رو راه اندازی اولیه کنیم. یعنی بتونیم از طریق یه سیستم دیگه بهش ssh بزنیم. توی این قسمت میخوایم با crosstool-NG و menuconfig که قبلاً قولشو داده بودیم، بیشتر آشنا بشیم و کار کنیم، همین طور بتونیم برای این دو برد، تولچین بسازیم.

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

کار با crosstool-NG

مسیر کامل crosstool-NG روی سیستم من با توجه به تنظیمات نصب این هست:

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

منطقی نیست هر بار که می‌خوام ازش استفاده کنم اینجوری اجراش کنم درسته؟

راه بسیار هست واسه جلوگیری از این کار که من این راه رو ترجیح می‌دم.

یه فایل می‌سازیم اینجوری:

vi /home/at00/EmbeddedLinux/F1C100s/at00exports.sh

راستی اگه با vi رفیق فاب نیستین باز هم عمو جادی رو دریابید!

و توش اینا رو میریزیم فعلا در آینده هم بیشتر میشه:

#!/bin/sh

export PATH=$PATH:/home/at00/EmbeddedLinux/F1C100s/build-tools/crosstool-ng-build/bin/

خب حالا هر سری اول کار این فایل رو source می‌کنیم توی ترمینال‌مون و دیگه به راحتی می‌شه توی اون ترمنیال فقط ct-ng رو صدا بزنیم.

source /home/at00/EmbeddedLinux/F1C100s/at00exports.sh

ct-ng list-samples

خب همون طور که اولش گفتیم crosstool-NG یه سری makefile بوده و menuconfig طور هست رابط کاربریش مثل Kernel و U-Boot و خیلی چیزهای دیگه.

خب اگه بدون هیچ ورودی اجراش کنیم یه سری اطلاعات به ما می‌ده:

 ct-ng

This is crosstool-NG version 1.24.0.105_5659366





Copyright (C) 2008  Yann E. MORIN <yann.morin.1998@free.fr>

This is free software; see the source for copying conditions.

There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A

PARTICULAR PURPOSE.





See below for a list of available actions, listed by category:





Configuration actions:

  show-config        - Show a brief overview of current configuration

  saveconfig         - Save current config as a preconfigured target

  menuconfig         - Update current config using a menu based program

  nconfig            - Update current config using a menu based program

  oldconfig          - Update current config using a provided .config as base

  upgradeconfig      - Upgrade config file to current crosstool-NG

  extractconfig      - Extract to stdout the configuration items from a

                       build.log file piped to stdin

  savedefconfig      - Save current config as a mini-defconfig to ${DEFCONFIG}

  defconfig          - Update config from a mini-defconfig ${DEFCONFIG}

                       (default: ${DEFCONFIG}=./defconfig)

  show-tuple         - Print the tuple of the currently configured toolchain





Preconfigured toolchains (#: force number of // jobs):

  list-samples       - Prints the list of all samples (for scripting)

  show-<sample>      - Show a brief overview of <sample> (list with list-samples)

  <sample>           - Preconfigure crosstool-NG with <sample> (list with list-samples)

  build-all[.#]      - Build *all* samples (list with list-samples) and install in

                       ${CT_PREFIX} (set to ~/x-tools by default)





Build actions (#: force number of // jobs):

  list-steps         - List all build steps

  source             - Download sources for currently configured toolchain

  build[.#]          - Build the currently configured toolchain





Clean actions:

  clean              - Remove generated files

  distclean          - Remove generated files, configuration and build directories





Distribution actions:

  check-samples      - Verify if samples need updates due to Kconfig changes

  update-samples     - Regenerate sample configurations using the current Kconfig

  updatetools        - Update the config tools





Environment variables (see http://crosstool-ng.github.io/docs/build/)

  STOP=step          - Stop the build just after this step (list with list-steps)

  RESTART=step       - Restart the build just before this step (list with list-steps)

  CT_PREFIX=dir      - Install samples in dir (see action "build-all", above).

  V=0|1|2|<unset>    - <unset> show only human-readable messages (default)

                       0 => do not show commands or human-readable message

                       1 => show only the commands being executed

                       2 => show both





Use action "menuconfig" to configure your toolchain

Use action "build" to build your toolchain

Use action "version" to see the version

See "man 1 ct-ng" for some help as well

 

خوب نحوه استفاده ازش چه جوری هست حالا؟

اول برید توی فولدری که میخواید Toolchain رو بسازید:

cd /home/at00/EmbeddedLinux/F1C100s/build-tools

بعدش با این دستور تنظیمات مربوط به یکی از سمپلها رو که به پردازنده‌تون میخوره توی فولدری Toolchain تون ذخیره کنید. مثلا:

ct-ng arm-unknown-linux-gnueabi

خب حالا می‌تونید با دستور زیر به منو تنظیمات دسترسی داشته باشین

ct-ng menuconfig

 

 

کار با crosstool-NG

 

خبر خوب یا بد این هست که همه این منوها رو قرار نیست توضیح بدیم واستون و قراره خودتون برین یادبگیرین!

چون الان دیگه میدونید هر قسمت چی هست!

 

ساختن تولچین Toolchain  برای لیچی پای نانو Lichee Pi Nano

خب یه ترمینال باز می‌کنیم و این دستورات رو اجرا می‌کنیم

source /home/at00/EmbeddedLinux/F1C100s/at00exports.sh

cd /home/at00/EmbeddedLinux/F1C100s/build-tools

ct-ng arm-unknown-linux-gnueab

 

سوال: چرا این تنظیمات؟ چرا بقیه رو انتخاب نکردین؟

arm-unknown-linux-gnueabi

arm-unknown-linux-musleabi

arm-unknown-linux-uclibcgnueabi

جواب: چون لینوکسی که الان روی برد هست با کتابخانه glibc ساخته شده. ولی وقتی که ما می‌خوایم از صفر همه چیز رو بسازیم بهتره به توصیه کریس گوش کنیم.

خب حالا بریم توی منو و یکم crosstool-NG رو شخصی‌سازی کنیم!

توی اولین منو من ترجیح میدم که این متغیر رو تغییر بدم.

به چی و چرا؟

به:

${CT_TOP_DIR}/at00toolchain

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

بقیه متغیرها رو هم ببینید و اگه دوست داشتین تغییر بدین.

منوی دوم که واسه خودم خیلییییی گیج کننده بود تا مدت‌ها!!!!

به یاد دبستان مانند نمونه پر کنید. ?

برای این که بفهمید هر کدوم چی هست و چه مقادیری می‌تونه داشته باشه انتخابش کنید و هلپش رو ببینید و هم زمان این سایت  رو هم ببینید:

https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html

این رو هم اگر نمی‌دانید بدانید!

آرم یه اسم معماری داره یه اسم پردازنده یا کور و یه اسم خانواده:

معماری مثل armv5te

پردازنده مثل arm926ej-s

و خانواده مثل خانواده آرم ۹

منوی بعد هم تغییر خاصی نمی‌خواد

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

دیدن سایر منوها و بررسیشون هم خالی از لطف نیست.

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

هشدار: از تحریم شکن مناسب استفاده کنید!

ct-ng build

سوال: چه خطاهایی ممکنه داشته باشیم؟ و راه حلشون چیه؟

 

جواب: خطاهایی که مربوط به نبودن یه سری پکیج روی سیستم‌تون هست که راه حل هم نصب اون پکیج‌هاست.

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

 

سوال: از کجا دانلود کنیم و جاش کجاست؟

جواب: اگه به گزینه‌های منو و متن خطا دقت کنی جواب خواهی گرفت!

تست کردن تولچین Toolchain  برای لیچی پای نانو Lichee Pi Nano

خوب من اولش ترجیح میدم این خط رو به فایل at00exports.sh اضافه کنم:

export GCC=/home/at00/EmbeddedLinux/F1C100s/build-tools/at00toolchain/bin/arm-richdad-linux-gnueabi-gcc

و دوباره این فایل رو source کنم.

 

خوب الان میریم توی فولدر پروژه‌هامون و یه فایل می‌سازیم:

cd /home/at00/EmbeddedLinux/F1C100s/project

vi first.c

#include <stdio.h>

#include <stdlib.h>

#include <string.h>





int main(void)

{

            printf("\r\nHello World!\r\n");

            printf("I'm AT00FirstF1C100S!\r\n");

            return 0;

}

خب حالا با کراس کامپایلرمون Cross Compiler کامپیالش می‌کنیم:

$GCC first.c –o at00

خوب حالا فایل اجرایی رو یه بررسی کنیم و بعدش بریزیم روی SD Card

file at00

at00: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 4.4.214, with debug_info, not stripped

حسب ظاهر که اکی هست امیدوارم حسب باطن هم اکی باشه!

خوب حالا کارت حافظه رو میذاریم و برد رو روشن میکینم و برنامه رو از هرجایی که ریختیم اجرا می‌کنیم:

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

چرا انگار چون تست اصلی زمانی هست که کرنل رو کامپایل کنیم با تولچین خودمون.

 

ساختن تولچین Toolchain  برای رسپبری پای سه بی پلاس Raspberry Pi 3  B Plus

خب معما چون حل گشت گلابی شد دیگه، مخصوصاً که یکی از مثال‌ها دقیقا واسه رسپبری پای سه بی پلاس Raspberry Pi 3  B Plus

اولش طبق قاعده از اولش منظم باشیم تا آخرش گم نشیم فولدرهامون رو می‌سازیم

mkdir /home/at00/EmbeddedLinux/RPI3BP

cd /home/at00/EmbeddedLinux/RPI3BP

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

cd build-tools

خب در اینجا من چون crosstool-NG رو توی فولدر F1C100s نصب کردم دوباره فایل at00exports.sh رو از اونجا source میکنم و بعدش این دستورات

ct-ng aarch64-rpi3-linux-gnu

ct-ng menuconfig

خب تغییراتی که من دادم یکی در مورد مسیر هست یکی هم کرنل:

و بعدش

ct-ng build

مدت‌ها صبر می‌کنیم و در نهایت به موفقیت می‌رسیم.

برای تست کردنش هم مثل قبل منتهی برای ریختن فایل روی رسپبری پای سه بی پلاس Raspberry Pi 3 B Plus از scp قافل نشید!

خب الان همه چیز رو برای ساختن همه چیز دارید! اگه سازنده باشید خیلی چیزها رو تا قسمت بعد خواهید ساخت. ?

 

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

توصیه میکنم یه سری هم به نظرات این پایین بندازید، نظرات رو بخونید و اگر شما هم نظری دارید، مشارکت کنید!
همه آموزش های امبدد لینوکس

 

منبع:سیسوگ

 

مطلب قبلیآموزش راه اندازی ماژول تابلو روان LED P10
مطلب بعدیRaspberry Pi 400 رزبری پای 400 ,کامپیوتر 70 دلاری

پاسخ دهید

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