Compiler là gì ? | Học ARM
trình biên dịch là gì? trình biên dịch chéo là gì? nó có liên quan gì đến một hệ thống nhúng? Hãy cùng tìm hiểu một số điều cơ bản trong bài viết này.
trình biên dịch
compiler hay còn gọi là trình biên dịch, có thể hiểu là công việc dịch một chuỗi các câu lệnh đã viết từ một ngôn ngữ lập trình sang một chương trình tương đương bằng ngôn ngữ máy tính, thường là ngôn ngữ cấp thấp hơn là ngôn ngữ máy. đơn giản và dễ hiểu, có thể tạm nói rằng nhờ trình biên dịch này mà file .c chúng ta viết ra được dịch thành file .hex .bin để tải trên mọi mcu.
xây dựng
Chúng ta có thể xem sơ đồ chi tiết các bước từ Code/Build/Run ở hình sau
Bạn đang xem: Compiler là gì
Thông thường 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 xong là chúng ta chỉ việc ngồi chờ và chương trình được nạp trực tiếp vào chip luôn, nhưng ẩn đằng sau những nút này là một loạt hoạt động theo các bước như hình trên.
cross-compiler / toolchain là gì?
cross compiler hay còn gọi là chuỗi công cụ có thể hiểu là mã nguồn được viết trên máy tính chạy trên chip intel, sau khi thông qua trình biên dịch chéo nó sẽ tạo ra một tệp nhị phân có khả năng chạy trên một nền tảng khác. con chip là cánh tay. ví dụ cơ bản nhất là tôi đã sử dụng máy tính ubuntu để tạo tệp hình ảnh có thể chạy trên raspberry pi
Qúa trình tạo ra và sử dụng cross compiler/ tool chain có liên quan tới 3 đối tượng
- build : hệ thống tạo ra chuỗi công cụ, thường là các máy tính có chip intel và hệ điều hành linux hoặc windows
- target : là một hệ thống thực thi một chương trình do máy chủ tạo, thường nhắm đến các máy tính nhúng sử dụng chip cánh tay, nhưng cũng có thể là một máy tính thông thường sử dụng chip thông minh.
> máy chủ lưu trữ : hệ thống thực thi chuỗi công cụ để biên dịch mã nguồn, máy chủ lưu trữ giống như một máy chủ biên dịch, nói chung là các máy tính sử dụng chip intel và windows hoặc linux làm hệ điều hành . host li>
Vậy các thành phần của Cross Compiler là gì ?
- Binutils: Là một tập các công cụ để tạo và quản lý file nhị phân (bin) của target CPU
- as : là assembler, nó sinh ra mã nhị phân (binary code) từ assembler source code
- ld : trình liên kết (linker)
- ar, ranlib : sinh ra file nén .a, sử dụng như là thư viện
- objdump, readelf, size, nm, strings: phân tích file nhị phân
- strip : để loại bỏ những phần thừa trong file nhị phân để giảm kích thước của chúng
Xem thêm: Dự định trong tương lai của bạn là gì
Thông thường, để biên dịch chéo một chương trình, chúng ta phải đặt biến môi trường để có thể biên dịch chính xác, chẳng hạn như
Thư viện
- c / c ++ thư viện được sử dụng làm giao diện giữa các ứng dụng và hạt nhân, cung cấp api tiêu chuẩn để tạo điều kiện phát triển ứng dụng. có thể kể đến một số thư viện như: glibc, ulibc, eglibc, dietlibc, newlib,…
- Kernel headerCung cấp các API cần thiết cho Applications và C Library giao tiếp với Kernel.
- GCC compilergcc, c++, g++ : compilerTrình biên dịch trong hệ thống Linux, compile cho rất nhiều ngôn ngữ và nhiều kiến trúc CPU khác nhau như ARM, MIPS, PowerPC, SuperH, x86; tuy nhiên mình chỉ đề cập đến ngôn ngữ C/C++ và kiến trúc CPU là ARM và x86.
- GDB Debugger: Trình gỡ rối, trợ giúp cho quá trình phát hiện lỗi khi develop application.
ví dụ với trình biên dịch gcc
cài đặt gcc
Trước hết, tôi thực hiện các bước với gcc trên máy tính của mình bằng ubuntu nye
kiểm tra phiên bản gcc / g ++ có sẵn và cài đặt nó
ví dụ
Hãy xem xét một ví dụ cơ bản với chương trình c tính căn bậc hai của 4 như sau
để thực hiện việc này, chúng tôi lưu đoạn mã trên dưới dạng tệp main.c, sau đó chạy lệnh sau trên ubuntu
kết quả
Giải thích
ở trên là định dạng gcc cơ bản nhất
Xem thêm: Inox 304 là gì? Thành Phần & 4 Cách Kiểm Tra Nhanh | GD Plus
cflags c cờ trình biên dịch đặt các tùy chọn trong trình biên dịch để thực hiện quá trình biên dịch mã nguồn trong một đối tượng sẽ bao gồm các thông tin sau:
- các đường dẫn tiêu đề bắt đầu bằng -i, ví dụ -i./bao gồm cả
- Các định nghĩa bắt đầu bằng -d, ví dụ -ddebug để xác định gỡ lỗi
- các tùy chọn trình biên dịch đặc biệt khác như -g để bật chức năng gỡ lỗi gdb của trình biên dịch gcc,-tường để theo dõi các cảnh báo trong c
- đường dẫn đến thư viện, bắt đầu bằng -l, ví dụ -l./lib
- Các thư viện bắt đầu bằng -l có nghĩa là lib, ví dụ: -lm tương ứng với libm, thư viện toán học có sẵn trên hệ thống
gcc : tuân thủ nguồn c và g ++ tuân thủ nguồn c ++
một ý tưởng khác từ minatu
- có một tham số khá quan trọng. đó là sysroot, tức là đường dẫn đến thư mục gốc (/). Khi tìm kiếm tệp tiêu đề tại thời điểm biên dịch, gcc sẽ thực hiện đường dẫn cơ sở để tìm tệp .h. thường thì nó có tập hợp các thư mục mặc định như / usr / local / include, … để tìm kiếm các file stdio.h, string … thì nó sẽ tìm trong đường dẫn đầy đủ như sysroot / usr / local / include.khi liên kết nữa. , nếu đường dẫn là / usr / lib thì đường dẫn đầy đủ khi tìm kiếm sẽ là sysroot / usr / lib. nếu bạn xây dựng bản địa, thì sysroot là /. và nếu bạn sử dụng trình biên dịch chéo mạnh, đường dẫn này thường khác. Điều này có thể được hiển thị với tham số -print-sysroot thành gcc. bạn có thể kiểm tra nhanh bằng gcc -print-sysroot
- bạn có thể thêm -v vào câu lệnh xây dựng để xem các thông số gcc chính xác. ví dụ: trong ví dụ trên, chúng tôi thêm -v trong bản demo lệnh $ gcc -c main.c $ {cflags} -v
tạm thời
vì vậy đó là bước đầu tiên với trình biên dịch chéo, hãy tìm hiểu một chút về cách biên dịch một nguồn .c đơn giản. thế là đủ hiểu nhau rồi, hẹn gặp lại ở bài sau.
Xem thêm: Bằng độc quyền sáng chế (Patent) là gì? – InvestOne Law Firm
cờ
cờ trình liên kết được sử dụng trong quá trình liên kết thư viện, bao gồm các thông tin sau: