Bootloader làm việc gì?
Trong một hệ thống Linux nhúng (embedded Linux system), bootloader có hai công việc chính: khởi tạo hệ thống (initialize the system) tới một cấp độ cơ bản và tải kernel lên (load the kernel). Thực tế, công việc thứ nhất là phụ trợ cho công việc thứ hai ở chỗ nó chỉ cần tạo được những thứ cần thiết đủ để hệ thống tải kernel lên
Ngay sau khi bật nguồn hoặc reset, dòng code đầu tiên của bootloader được thực thi (execute), hệ thống ở trong một trạng thái tối thiểu. Bộ điều khiển Bộ Nhớ Truy Cập Ngẫu Nhiên Động (DRAM – Dynamic Random Access Memory) chưa được cài đặt, do đó bộ nhớ chính (main memory) là không thể truy cập. Tương tự như vậy, những giao diện khác cũng chưa được cấu hình, bộ lưu trữ (storage) được truy cập bằng bộ điều khiển flash NAND (NOT AND), bộ điều khiển MultiMediaCard (MMC), v.v. đều chưa có sẵn. Thông thường, nguồn tài nguyên duy nhất là một core CPU đang vận hành từ lúc đầu, vài Bộ Nhớ Truy Cập Ngẫu Nhiên Tĩnh (SRAM – Static Random Access Memory), và boot ROM (Read-Only Memory – Bộ Nhớ Chỉ Đọc) trong chip.
Một hệ thống khởi động (system bootstrap) bao gồm một vài phase của code, mỗi phase sẽ đưa thêm nhiều thành phần của hệ thống vào sự vận hành. Hành động cuối cùng của bootloader sẽ tải kernel lên RAM và tạo một môi trường thực thi cho kernel. Chi tiết của mỗi giao diện nằm giữa bootloader và kernel là cấu trúc đặc trưng, nhưng trong mỗi trường hợp, no phải làm hai việc. Đầu tiên, bootloader phải truyền một pointer trỏ tới một cấu trúc có chứa thông tin về cấu hình phần cứng (hardware configuration). Thứ hai, nó phải truyền một pointer trỏ tới dòng lệnh của kernel (kernel command line).
Kernel command line là một chuỗi ký tự (text string) điều khiển hành vi của Linux. Một khi kernel đã bắt đầu thực thi, bootloader không cần sử dụng nữa và toàn bộ bộ nhớ mà nó đã chiếm có thể lấy lại.
Một công việc phụ trợ của bootloader là cung cấp một chế độ bảo trì (maintenance mode) cho việc cập nhật các cấu hình boot (updating boot configurations), load các boot image mới vào trong bộ nhớ, và cũng có thể là chạy chẩn đoán (diagnostic). Việc này thường được điều khiển bằng giao diện người dùng dòng lệnh đơn giản (simple command-line user interface) thông qua serial console.
(Còn tiếp)