Tin Tổng Hợp

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

Compiler là gì ? | Học ARM

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ì

Compiler là gì ? | Học ARM

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

Compiler là gì ? | Học ARM

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
  • > 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>

  • 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.

Compiler là gì ? | Học ARM

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

Compiler là gì ? | Học ARM

  • 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,…

Compiler là gì ? | Học ARM

  • Kernel headerCung cấp các API cần thiết cho Applications và C Library giao tiếp với Kernel.

Compiler là gì ? | Học ARM

  • 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ả

Compiler là gì ? | Học ARM

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

    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:

    • đườ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

      1. 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
      2. 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

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *