Compiler là gì ? Cross Compiler là gì ? Nó có tương quan gì tới một khối hệ thống nhúng ? bản thân cùng tìm hiểu một số định nghĩa cơ bản trong bài này nhé.
Bạn đang xem: Compiler là gì
Compiler
Compiler hay nói một cách khác là trình biên dịch có thể được hiểu là các bước dịch chuỗi câu lệnh được viết tự một ngôn từ lập trình thành chương trình tương tự dưới dạng ngôn từ máy tính, thường là ngôn từ ở cấp thấp hơn, ngữ điệu máy. Đơn giản dễ nắm bắt thì có thể tạm nói là nhờ Complier này mà lại file .c chúng ta viết bắt đầu được dịch thành file .hex .bin nhằm nạp được xuống một MCU bất kỳ.
Quá trình biên dịch

Chúng ta có thể xem sơ đồ đưa ra tiết các bước từ Code/Build/Run làm việc hình sau

Thông thường xuyên nếu dùng chương trình để lập trình như Keil C chẳng hạn thì chỉ cần ấn một nút Build/Run chấm dứt là chúng ta chỉ vấn đề ngồi hóng và chương trình được hấp thụ trực tiếp vào chip luôn, dẫu vậy ẩn đằng sau những nút này là 1 loạt hoạt động theo công việc như hình trên.
Cross Compiler/ Toolchain là gì ?
Cross Compiler hay nói một cách khác là Toolchain rất có thể được hiểu là 1 source code được viết trên máy tính xách tay chạy trên chip Intel, sau thời điểm thông qua 1 cross compiler sẽ cho ra file nhị phân có khả năng chạy được trên một nền tảng chip không giống là ARM. Một lấy ví dụ cơ bạn dạng nhất là mình đã dùng một máy tính hệ điều hành quản lý Ubuntu nhằm build ra một file image có thể chạy bên trên Raspberry Pi

Qúa trình tạo ra và áp dụng cross compiler/ tool chain có liên quan tới 3 đối tượng
Build: khối hệ thống tạo ra tool chain, thường xuyên là các máy tính xách tay dùng chip Intel cùng hệ điều hành quản lý Linux hoặc WindowsHost: khối hệ thống chạy tool chain nhằm compile source code, host cũng tương tự build thường là các máy tính dùng cpu Intel cùng Windows hoặc Linux là hệ điều hành.Target: là hệ thống chạy chương trình do host tạo ra, thường xuyên target là các laptop nhúng cần sử dụng chip ARM, tuy vậy nó cũng có thể là một máy tính thông thường dùng cpu Intel.
Vậy các thành phần của Cross Compiler là gì ?

Thông thường nhằm cross-compiler một chương trình ta phải cài đặt biến môi trường mới hoàn toàn có thể compile đúng đượcVí dụ
$ export PATH=/path/to/compiler/bin:$PATH$ export CROSS_COMPILE=arm-none-linux-gnueabi- $ export CC=$CROSS_COMPILEgcc $ export CXX=$CROSS_COMPILEg++ $ export CPP=$CROSS_COMPILEcpp $ export AR=$CROSS_COMPILEar $ export AS=$CROSS_COMPILEas $ export LD=$CROSS_COMPILEld $ export RANLIB=$CROSS_COMPILEranlib $ export STRIP=$CROSS_COMPILEstrip C/C++ LibraryLibrary được dùng làm interface giữa applications cùng kernel, hỗ trợ các C API chuẩn chỉnh để dễ dàng phát triển ứng dụng. Một số trong những libb rất có thể kể đến như: glibc, uClibc, eglibc, dietlibc, newlib, …


Xem thêm: Tập The Dục Giảm Mỡ Bụng Vào Thời Gian Nào
Ví dụ với GCC Compiler
Cài để GCC
Trước hết, mình thực hiện quá trình với GCC trên máy vi tính dùng Ubuntu nhéThực hiện kiểm tra version hiện bao gồm của gcc/g++ và cài đặt
$ gcc --version$ g++ --version$ sudo apt-get install gcc g++
Ví dụ
Xét một ví dụ như cơ bạn dạng với chương trình C tính căn bậc 2 của 4 như sau#include #include int main(int argc, char **argv) double x; x = sqrt(4); printf("x = %f ", x); return 1; Để thực hiện thì họ lưu code trên dưới dạng file là main.c, tiếp đến thực hiện gõ lệnh command sau trên ubuntu
$ export CFLAGS="-I./include -DDEBUG -Wall -g" $ export LDFLAGS+=" -L./lib -lm" $ gcc -c main.c $CFLAGS #tạo tệp tin object từ bỏ source $ gcc -o prog main.o $LDFLAGS #tạo file công tác nhị phân từ file object $ ./prog #chạy chương trình
Kết quả

Giải thích
Trên đây là một format cơ phiên bản nhất của GCCCFLAGSC compiler flags đưa các options vào vào compiler nhằm thực hiện quy trình compile source code thành object sẽ bao gồm các thông tin:
Đường dẫn những header bắt đầu với -I, lấy một ví dụ -I./includeCác define được bắt đầu với -D, lấy ví dụ như -DDEBUG để define DEBUGCác option đặc biệt khác của compiler như -g nhằm bật tác dụng debug gdb của gcc compiler, -wall nhằm trace các cảnh báo (warning) trong quá trình c$ export CFLAGS="-I./include -DDEBUG -Wall -g"LDFLAGS
Linker flags cần sử dụng trong quy trình linking các thư viện, nó bao hàm các thông tin:
Đường dẫn tới thư viện, được bước đầu bằng -L, lấy ví dụ như -L./libCác thư viện bắt đầu với -l là viết tắt của lib, ví dụ: -lm khớp ứng với libm, thư viện math có sẵn trong hệ thống$ export LDFLAGS+=" -L./lib -lm"gcc : Complier mang lại C source và g++ là complier cho 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 tiền trọng. Đó là sysroot, tức là đường dẫn đến thư mục root (/).Khi tìm tệp tin header thời điểm compile thì gcc đang làm đường truyền base nhằm tìm các file .h.Nó thường có một tập những thư mục mặc định như /usr/local/include,.. Nhằm tìm kiếm những file stdio.h, string… khi đó, nó đã tìm trên phố dẫn đầy là sysroot/usr/local/include.Khi linking cũng thế, nếu băng thông là /usr/lib thì mặt đường dẫn không thiếu khi tìm đã là sysroot/usr/lib.Nếu biên dịch native thì sysroot chính là /. Còn nếu áp dụng cross-compiler đặc thì đường dẫn này hay khác.Có thể hiển thị mẫu này bởi tham số –print-sysroot mang đến gcc. Bạn có thể thao tác bình chọn nhanh bằng lệnh gcc -print-sysrootCó thể thêm -v vào câu lệnh biên dịch nhằm thấy đúng mực các tham số của gcc. Ví dụ như trong ví dụ như trên ta thêm -v sinh sống lệnh demo$ gcc -c main.c $CFLAGS -vTạm kết
Thế là hoàn thành được những bước cơ bạn dạng đầu tiên cùng với Crosscompiler, khám phá được một chút về cách để compile source .c đối chọi giản. Mới bước đầu làm quen cố gắng là đủ, hứa hẹn mọi bạn ở bài bác tiếp theo.