Giới thiệu về U-Boot bootloader

Bootloader là gì?

Bộ vi xử lý (microprocessor) chỉ có thể thực thi mã có trong bộ nhớ (ROM hoặc RAM), trong khi hệ điều hành thường nằm trong các thiết bị có dung lượng lớn như ổ cứng, CD-ROM, ổ USB, máy chủ (network server) và các phương tiện lưu trữ khác (storage media).

Khi bộ xử lý được bật nguồn, lúc này bộ nhớ (memory) chưa chứa hệ điều hành, do đó cần có một phần mềm đặc biệt để đưa hệ điều hành (operating system – OS) vào bộ nhớ từ phương tiện lưu trữ (media). Phần mềm này thường là một đoạn mã nhỏ được gọi là bộ nạp khởi động hay bootloader. Với máy tính để bàn, bootloader được đặt trong bản ghi khởi động chính (master boot record – MBR) của ổ cứng và được thực thi sau khi hệ thống đầu vào đầu ra cơ bản (basic input output system – BIOS) của máy tính thực hiện các tác vụ khởi tạo hệ thống.

Trong hệ thống nhúng, vai trò của bộ nạp khởi động phức tạp hơn. Bởi vì các hệ thống này hiếm khi có BIOS để thực hiện cấu hình hệ thống ban đầu. Mặc dù quá trình khởi tạo cấp thấp của bộ vi xử lý (microprocessor), bộ điều khiển bộ nhớ (memory controller) và phần cứng dành riêng cho từng board mạch là khác nhau, tùy theo loại board và CPU, nhưng nó phải được thực hiện trước khi hệ điều hành có thể thực thi.

Một bootloader của hệ thống nhúng (embedded system) tối thiểu phải thực hiện được những chức năng:

  • Khởi tạo phần cứng, đặc biệt là memory controller
  • Cung cấp tham số khởi động (boot parameter) cho OS
  • Khởi động hệ điều hành (start OS)

Hầu hết bootloader đều cung cấp các chức năng để đơn giản hoá việc phát triển và cập nhật firmware. Ví dụ như:

  • Đọc và ghi các vị trí bộ nhớ tùy ý
  • Upload các ảnh nhị phân (binary image) mới lên RAM của board mạch từ các thiết bị lưu trữ
  • Copy các binary image từ RAM lên flash

U-Boot là gì?

U-Boot là một bootloader nền tảng chéo (cross-platform), mã nguồn mở. U-Boot hỗ trợ cho hàng trăm board mạch nhúng và nhiều loại CPU, bao gồm PowerPC, ARM, XScale, MIPS, Coldfire, NIOS, Microblaze và x86.

Để biết thêm thông tin về dự án U-Boot, hãy xem http://sourceforge.net/projects/u-boot/http://www.denx.de/wiki/DULG/Manual.

Chức năng của U-Boot

U-Boot có khả năng tùy chỉnh cao, nên có thể làm một bootloader có nhiều tính năng phong phú hoặc chỉ những chức năng cần thiết với dung lượng nhỏ.

U-Boot giao tiếp bằng giao diện dòng lệnh, sử dụng command shell. Người ta có thể tuỳ chỉnh quy trình khởi động (boot process) bằng cách gởi mệnh lệnh cho U-Boot.

Các biến môi trường (environment variables) được U-Boot sử dụng có thể đọc hoặc ghi thông qua thiết bị không bốc hơi (non-volatile media). Chúng được dùng để tạo các file script giúp tự động thực thi mệnh lệnh theo thứ tự và cấu hình quy trình boot.

Bởi vì U-Boot có thể sử dụng Ethernet hoặc USB để tải về một kernel image, nên không cần phải program lên flash để test kernel mới. Điều này ngăn flash bị hư do việc ghi và xoá lặp lại nhiều lần.

Các con số sử dụng bởi U-Boot luôn luôn được xem ở dạng hexadecimal. Ví dụ, số 30100000 được U-Boot hiểu là 0x30100000.

Quá trình khởi động (boot process)

Sau khi bật nguồn hoặc khởi động lại, bộ xử lý sẽ load bootloader U-Boot qua nhiều bước.

Bộ xử lý thực hiện các bước sau:

  • Thực hiện lệnh khởi động chính (primary bootstrap) để cấu hình các interrupt và exception vectors, clock và SDRAM
  • Giải nén mã U-Boot từ flash sang RAM
  • Chuyển quyền điều khiển thực thi cho U-Boot

U-Boot thực hiện các bước sau:

  • Cấu hình địa chỉ MAC Ethernet, flash và serial control
  • Tải các thiết lập được lưu trữ dưới dạng biến môi trường trong bộ nhớ không dễ bay hơi
  • Sau vài giây (khoảng thời gian này có thể tuỳ chỉnh), tự động boot kernel đã được cài sẵn

Để dừng boot tự động (autoboot) của kernel được cài đặt sẵn (pre-installed kernel), hãy truyền một ký tự đến cổng serial bằng cách nhấn một phím từ serial console được kết nối với board. Nếu U-Boot dừng lại, nó sẽ hiển thị bảng điều khiển dòng lệnh (command line console), còn gọi là monitor.

UU-Boot 1.1.6 (Aug 28 2009 - 14:03:27 - GCC 4.3.2) DUB-RevF3
for ConnectCore 9M 2443 on Development Board
DRAM: 64 MB
NAND: 128 MB
CPU: S3C2443@534MHz
Fclk = 534MHz, Hclk = 133MHz, Pclk = 66MHz
Autoscript from TFTP... [not available]
Hit any key to stop autoboot: 0

Tài liệu tham khảo U-Boot

U-Boot Reference Manual

Icons made by Freepik from www.flaticon.com