Toolchain là gì

Compiler là gì ? Cross Compiler là gì ? Nó bao gồm tương quan gì cho tới một hệ thống nhúng ? Mình thuộc tò mò một vài định nghĩa cơ bạn dạng vào bài này nhé.Quý Khách vẫn xem: Gcc là gì

Compiler

Compiler tốt có cách gọi khác là trình biên dịch rất có thể được phát âm là quá trình dịch chuỗi câu lệnh được viết xuất phát điểm từ 1 ngữ điệu lập trình thành lịch trình tương tự bên dưới dạng ngôn ngữ máy tính xách tay, hay là ngôn ngữ ngơi nghỉ thấp cấp hơn, ngôn từ máy. Đơn giản dễ dàng nắm bắt thì hoàn toàn có thể trợ thì nói là nhờ vào Complier này cơ mà tệp tin .c họ viết bắt đầu được dịch thành file .hex .bin để nạp được xuống một MCU ngẫu nhiên.

Bạn đang xem: Toolchain là gì

Quá trình biên dịch



Chúng ta có thể xem sơ trang bị chi tiết công việc từ Code/Build/Run ngơi nghỉ hình sau


*

Thông thường giả dụ cần sử dụng công tác nhằm xây dựng nlỗi Keil C chẳng hạn thì chỉ việc ấn một nút Build/Run xong xuôi là chúng ta chỉ vấn đề ngồi đợi và chương trình được nạp trực tiếp vào chip luôn, cơ mà ẩn đằng sau đa số nút ít này là 1 loạt vận động theo công việc nhỏng hình bên trên.

Cross Compiler/ Toolchain là gì ?

Cross Compiler tốt có cách gọi khác là Toolchain hoàn toàn có thể được phát âm là một trong source code được viết trên laptop chạy trên chip Hãng sản xuất Intel, sau thời điểm thông sang 1 cross compiler đang cho ra file nhị phân có chức năng chạy được trên một căn cơ chip không giống là ARM. Một ví dụ cơ phiên bản nhất là tôi đã dùng một máy tính xách tay hệ điều hành Ubuntu để build ra một tệp tin image có thể chạy trên Raspberry Pi


*

Qúa trình tạo thành cùng thực hiện cross compiler/ tool chain gồm tương quan cho tới 3 đối tượng

Build: hệ thống tạo nên tool chain, thường xuyên là những máy tính dùng chip Intel cùng hệ quản lý Linux hoặc WindowsHost: khối hệ thống chạy tool chain để compile source code, host cũng giống như build thường xuyên là các laptop dùng chip Hãng sản xuất Intel cùng Windows hoặc Linux là hệ quản lý và điều hành.Target: là khối hệ thống chạy chương trình bởi host tạo ra, hay target là những laptop nhúng cần sử dụng chip ARM, tuy nhiên nó cũng hoàn toàn có thể là một trong những máy vi tính bình thường dùng chip Hãng sản xuất Intel.

Xem thêm: Máy Ép Dừa Chạy Điện - Máy Ép Dừa Bằng Tay Gia Đình Máy Ép Nước Cốt Dừa


*

Vậy các thành phần của Cross Compiler là gì ?


*

Binutils: Là một tập các pháp luật để chế tác và thống trị tệp tin nhị phân (bin) của target CPUas : là assembler, nó ra đời mã nhị phân (binary code) từ assembler source codeld : trình link (linker)ar, ranlib : hiện ra file đã được nén .a, áp dụng như thể thư việnobjdump, readelf, size, nm, strings: so sánh file nhị phânstrip : nhằm sa thải hồ hết phần vượt vào file nhị phân để sút form size của chúng

Đôi khi để cross-compiler một công tác ta phải thiết đặt biến đổi môi trường thiên nhiên mới rất có thể compile đúng đượcVí dụ

$ export PATH=/path/to/compiler/bin:$PATH $ export CROSS_COMPILE=arm-none-linux-gnueabi- $ export CC=$gcc $ export CXX=$g++ $ export CPP=$cpp $ export AR=$ar $ export AS=$as $ export LD=$ld $ export RANLIB=$ranlib $ export STRIP=$strip C/C++ LibraryLibrary được sử dụng làm interface giữa applications và kernel, cung cấp những C API chuẩn chỉnh để dễ dãi cách tân và phát triển vận dụng. Một số libb rất có thể kể tới như: glibc, uClibc, eglibc, dietlibc, newlib, …
Kernel headerCung cấp các API quan trọng cho Applications và C Library tiếp xúc với Kernel.
GCC compilergcc, c++, g++ : compilerTrình biên dịch vào hệ thống Linux, compile đến không ít ngữ điệu với những kiến trúc CPU khác nhau nlỗi ARM, MIPS, PowerPC, SuperH, x86; mặc dù mình chỉ đề cập tới ngữ điệu C/C++ và phong cách thiết kế CPU là ARM với x86.GDB Debugger: Trình tháo gỡ, trợ giúp cho quá trình phạt hiện nay lỗi Lúc develop application.

lấy ví dụ như cùng với GCC Compiler

Cài đặt GCC

Trước không còn, mình tiến hành quá trình cùng với GCC bên trên máy tính xách tay cần sử dụng Ubuntu nhé

Thực hiện nay kiểm tra version hiện tại tất cả của gcc/g++ với cài đặt đặt

$ gcc --version $ g++ --version $ suvị apt-get install gcc g++

Ví dụ

Xét một ví dụ cơ phiên bản với chương trình C tính cnạp năng lượng bậc 2 của 4 nlỗi sau

#include #include int main(int argc, char **argv)

Để tiến hành thì bọn họ lưu lại code xấp xỉ dạng file là main.c, kế tiếp thực hiện gõ lệnh commvà sau trên ubuntu

$ export CFLAGS="-I./include -DDEBUG -Wall -g" $ export LDFLAGS+=" -L./lib -lm" $ gcc -c main.c $ #chế tác file object từ source $ gcc -o prog main.o $ #sinh sản tệp tin lịch trình nhị phân trường đoản cú tệp tin object $ ./prog #chạy chương thơm trình

Kết quả


Giải thích

Trên đó là một format cơ phiên bản nhất của GCC

CFLAGSC compiler flags gửi những options vào vào compiler để triển khai quá trình compile source code thành object đã bao gồm các thông tin:

Đường dẫn các header ban đầu cùng với -I, ví dụ -I./includeCác define được bắt đầu cùng với -D, ví dụ -DDEBUG nhằm define DEBUGCác option quan trọng đặc biệt không giống của compiler nlỗi -g nhằm bật công dụng debug gdb của gcc compiler, -wall để trace những chú ý (warning) trong quy trình c$ export CFLAGS="-I./include -DDEBUG -Wall -g"

LDFLAGS

Linker flags sử dụng vào quy trình linking những tlỗi viện, nó bao hàm các thông tin:

Đường mang đến tlỗi viện, được bước đầu bằng -L, ví dụ -L./libCác thư viện ban đầu cùng với -l là viết tắt của lib, ví dụ: -lm tương xứng cùng với libm, tlỗi viện math bao gồm sẵn trong hệ thống$ export LDFLAGS+=" -L./lib -lm"

gcc : Complier mang lại C source với g++ là complier mang đến C++ source

Tiếp một ý bổ sung cập nhật của anh Minatu

Có một thông số hơi quan trọng đặc biệt. Đó là sysroot, Có nghĩa là đường truyền cho tlỗi mục root (/).Lúc kiếm tìm tệp tin header cơ hội compile thì gcc vẫn làm cho đường dẫn base nhằm tìm kiếm các tệp tin .h.Nó hay có một tập các thỏng mục mang định nhỏng /usr/local/include,.. để tra cứu kiếm các file stdio.h, string… lúc đó, nó đã tìm kiếm trê tuyến phố dẫn đầy là sysroot/usr/local/include.lúc linking cũng vậy, nếu như băng thông là /usr/lib thì đường truyền không thiếu khi kiếm tìm đã là sysroot/usr/lib.Nếu biên dịch native sầu thì sysroot đó là /. Còn nếu như thực hiện cross-compiler đặc thì băng thông này thường xuyên khác.Có thể hiển thị tính năng này bằng tsi mê số –print-sysroot đến gcc. Bạn có thể làm việc bình chọn nhanh hao bởi lệnh gcc -print-sysroot cũng có thể thêm -v vào câu lệnh biên dịch giúp xem đúng mực những tham mê số của gcc. lấy ví dụ nhỏng vào ví dụ trên ta thêm -v ở lệnh demo$ gcc -c main.c $ -v

Tạm kết

Thế là ngừng được phần đa bước cơ phiên bản thứ nhất với Crosscompiler, tìm hiểu được một chút về cách để compile source .c đơn giản. Mới bước đầu tiên có tác dụng quen núm là đủ, hứa phần đông tín đồ sinh hoạt bài bác tiếp sau.