Title Image

Blog Logo

Linker Script File

🌱 Linker Script File

    👉 Linker Script File là gì?

    Như ở bài Build Process mình đã giới thiệu về quá trình Linking  và Locator, thì quá trình locator là một quá trình rất quan trọng trong lập trình vi điều khiển, quá trình này được thể hiện bằng một Linker script file
Build Process

    Một file Linker script là một file không thể thiếu trong một project STM32, khi các bạn lập trình trên STM32CubeIDE, bạn có thể dễ dàng nhìn thấy các file .ld như sau <Bare - metal Example>

Makefile

    Một Linker Script File (.ld) là một file text trong quá trình locator nhằm phân vùng địa chỉ trên vi điều khiển, do các vi điều khiển có vùng địa chỉ tuyệt đối trên flash, ram (không giống như máy tính). 

    Ví dụ: Vùng flash bắt đầu từ đâu, độ dài bao nhiêu, vùng text, data trên đó chiếm bao nhiêu dung lượng, ... tất cả được quy định trên linker script file.

    👉 Tại sao cần có Linker Script File?

    Như các bạn biết trong quá trình Build Process thì các file .o sẽ được tạo ra sau quá trình Compile  và Assemble. Quá trình Compile này sẽ tạo ra địa chỉ tương đối cho mỗi file object, bao gồm text, data, bss, rodata, tức là mỗi file object đang bắt đầu từ địa chỉ 0x0000.0000. 

Makefile

    Như vậy, các file objects có thể bị conflict lẫn nhau. và địa chỉ này sẽ không phù hợp với địa chỉ mong muốn mà ta muốn nạp xuống vi điều khiển. 
    Vì vậy, cần merge các file object trên với nhau, và phân bổ vào bộ nhớ vi điều khiển như người dùng mong muốn.

    Và file giúp làm điều đó chính là file Linker Script (.ld). 

    👉 Các lệnh trong Linker Script File

    Cấu trúc một file linker các bạn có thể xem trong một project stm32 bất kỳ. Về cơ bản thì nó bao gồm các lệnh. 

    💬 ENTRY(_symbol_name_) Command

    Dùng để set thông tin "Entry point address" ở đầu file .elf. Debugger sẽ dùng entry point này để biết hàm nào được chạy đầu tiên.
    Ví dụ hay được dùng nhất là Reset Handler

Linker

    💬 MENORY Command 

    Lệnh này dùng để set các phân vùng bộ nhớ, bao gồm thông tin địa chỉ bắt đầu & kích thước của các vùng nhớ tương ứng, cùng với đó là các Attribute (cho phép đọc/ghi).

Linker

 Dưới đây là một số Attribute thường dùng: 

Linker

    💬 SECTION Command

    Các thành phần trong bộ nhớ sẽ được chia thành các Section, vì vậy lệnh SECTION trong linker file được dùng để định nghĩa các phân vùng nhớ này.
    Ví dụ: Các vùng .text, .data, .bss trong vùng nhớ FLASH.

Linker

    💬 AT> Command

    Lệnh AT này được sử dụng sau mỗi section ở hình trên, được dùng để định nghĩa hai vùng nhớ trước và trong run-time. 

    Ở ví dụ trên, vùng nhớ data trước khi run-time được phân bổ ở vma (virtual memory address) và được phân bổ trên lma (load memory address) khi run-time.

    Trên đây là một số kiến thức cơ bản về Linker Script File, để các bạn có thể đọc hiểu và sửa được file Linker, còn nếu muốn viết file Linker thì nên tìm hiểu thêm nữa. 

    Chúc các bạn học tập tốt 😊

Đăng nhận xét

1 Nhận xét