Chủ Nhật, 30 tháng 9, 2018

U-boot là gì?

Trong Hệ thống nhúng, một trong những thành phần quan trọng và được nhắc đến khá nhiều trong hệ thống phần mềm là U-boot. Vậy U-boot là gì? Hãy cùng theo dõi bài viết này để hiểu rõ hơn về nó nhé.

U-boot là gì?
U-boot được viết từ Universal Boot Loader, là loại Boot Loader phổ biến nhất.
U-boot là một tập mã nguồn mở, hỗ trợ boot loader cho nhiều nền tảng khác nhau. U-boot hỗ trợ các lệnh tương tác, các biến môi trường, các lệnh thực thi và boot hệ thống từ các thiết bị media bên ngoài. U-boot hỗ trợ nhiều loại CPU và các họ CPU thông dụng hiện nay. U-boot hỗ trợ các board phát triển trên nền các vi xử lý thông dụng.

Nhiệm vụ của U-boot
U-boot thực hiện cấu hình các khối phần cứng trong một board và đặt chúng vào trạng thái hoạt động. Nó có thể load và thực thi hệ điều hành một cách tự động (auto-boot) hoặc ngược lại, nghĩa là nó cho phép người dùng khởi động hệ điều hành thông qua các lệnh giao tiếp mà U-boot hỗ trợ.
Tập lệnh chuẩn của U-boot cung cấp khả năng cho phép người dùng thao tác trên bộ nhớ, mạng và nhiều thao tác khác khi hệ thống khởi động.
Khi quyền điều khiển được chuyển đến cho U-boot, nó sẽ khởi tạo các ngắt (interupt) và các thiết bị ngoại vi. Sau đó, U-boot chờ nhập các dòng lệnh từ người dùng. Nếu người dùng nhận được lệnh boot Image của Kernel hoặc nếu nó được sử dụng để boot Kernel trực tiếp thì U-boot sẽ giải nén Kernel Image, load Kernel lên bộ nhớ và chuyển điều khiển đến Kernel.

Đặc điểm
Thông thường, U-boot được đặt trong phân vùng đầu tiên của bộ nhớ Flash, bắt đầu từ sector hay block nào được định nghĩa bởi vi xử lý. U-boot khởi tạo CPU và một vài phần cứng trên board, tạo một vài kiến trúc dữ liệu để Kernel sử dụng và load nó lên phân vùng đầu tiên của bộ nhớ.
U-boot cung cấp các hàm chuẩn để hiệu chỉnh quá trình khởi động và khởi tạo Kernel. Thường thì nó cung cấp các thao tác dưới dạng các dòng lệnh, hay còn gọi là command line.

Cấu trúc thư mục của U-boot

  • Thư mục board xác định nhiều kiến trúc nền khác nhau của các hãng khác nhau như Atmel, Ciruss,... Thư mục này cũng bao gồm các hàm khởi tạo các board, các hàm này có thể gọi từ thư viện lib_<arch>/board.
  • Thư mục board/<board_name> xác định thông tin chi tiết cho hệ thống, thư mục này chứa các tập tin khởi tạo cần thiết cho mỗi hệ thống bao gồm các tập tin như asm_init.S, config.mk, flash.c.
  • Thư mục common chứa tập tin định nghĩa các lệnh của U-boot, các biến môi trường như cmd_boot.c, cmd_date.c, environment, env.c, main.c,...
  • Thư mục cpu bao gồm các tập tin xác định các thông số , khởi tạo các ngắt, bộ nhớ đệm,...cho CPU như cpu.c, cpu_init.c, interrupts.c,...
  • Thư mục disk chứa các tập tin phân vùng và thông tin thiết bị cho ổ đĩa
  • Thư mục driver chứa các tập tin thiết bị như ethernet, usb, serial,...
  • Thư mục include bao gồm nhiều tập tin header như console.h, version.h,...Trong đó, version.h định nghĩa phiên bản của U-boot ở dòng #define u-boot_VERSION "xxx" 
  • Thư mục include/configs chứa các cấu hình cho các board
  • Thư mục lib_generic chứa các thư viện chung như string.c,...
  • Thư mục net chứa các tập tin Ethernet như eth.c, tftp.c, bootp.c,...
  • Thư mục fs chứa các tập tin hệ thống như fat, jffs2,...
  • Thư mục rtc chứa các tập tin đồng hồ thời gian thực 
  • Thư mục tools chứa các thư mục và tập tin hỗ trợ biên dịch, gỡ rối
  • Thư mục post bao gồm các tập tin và thư mục như post.c, codec.c, uart.c,...


0 comment�:

Đăng nhận xét