Cách tùy chỉnh màn hình khởi động cho Raspberry Pi 5

Nhiều người dùng Raspberry Pi mong muốn có trải nghiệm khởi động sạch sẽ và chuyên nghiệp thay vì nhìn thấy các bản ghi kernel dài dòng và thông báo hệ thống.

Mặc dù các công cụ như fbi (trình xem ảnh framebuffer) thường được cộng đồng đề xuất, nhưng chúng có một hạn chế cơ bản: thiết bị framebuffer /dev/fb0 không khả dụng trước khi các dịch vụ hệ thống khởi động. Do đó, chúng không thể hiển thị hình ảnh sớm đủ trong quá trình khởi động.

Hướng dẫn này giới thiệu một phương pháp đáng tin cậy sử dụng Plymouth để hiển thị màn hình khởi động tùy chỉnh ngay từ giai đoạn đầu của quá trình khởi động.


Giai đoạn 1: Tắt đầu ra kernel

Trong quá trình khởi động, các bản ghi kernel sẽ cuộn trên màn hình và làm gián đoạn việc hiển thị màn hình khởi động tùy chỉnh.

Thêm các tham số sau vào dòng lệnh khởi động:

sudo sed -i '$s/$/ logo.nologo quiet loglevel=0/' /boot/firmware/cmdline.txt

Giải thích các tham số:

  • logo.nologo
    Xóa biểu tượng Raspberry Pi (hoặc biểu tượng phân phối) ở góc trên bên trái.

  • quiet
    Giảm lượng thông tin đầu ra từ kernel.

  • loglevel=0
    Chỉ hiển thị các thông báo khẩn cấp, khiến kernel gần như hoàn toàn im lặng.

:warning: Quan trọng:

cmdline.txt phải giữ nguyên là một dòng duy nhất, với các tham số cách nhau bằng khoảng trắng. Định dạng sai có thể khiến hệ thống không khởi động được.


Ẩn con trỏ nhấp nháy

Ngay cả sau khi tắt đầu ra kernel, một số hệ thống vẫn có thể hiển thị con trỏ terminal nhấp nháy.

Thêm tham số sau vào cuối cùng dòng đó:

vt.global_cursor_default=0

Giai đoạn 2: Chuẩn bị tài nguyên khởi động

Tối ưu hóa hình ảnh

Thông số đề xuất:

  • Định dạng: PNG hoặc JPG (PNG được khuyến nghị nếu cần trong suốt)
  • Độ phân giải: ≤ 1920×1080
  • Bảng màu: ≤ 224 màu (cải thiện tốc độ tải)
  • Tên tệp: splash.png

Đặt hình ảnh tại:

/boot/splash.png

Vị trí này cho phép kernel truy cập nó trong giai đoạn khởi động sớm.


Kiểm tra cấu hình trình điều khiển hiển thị

Đảm bảo rằng trình điều khiển hiển thị đúng đã được bật trong:

/boot/firmware/config.txt

Ví dụ cấu hình:

dtparam=vc4-kms-v3d

Tránh các tham số có thể gây khởi tạo lại HDMI, ví dụ:

hdmi_force_hotplug=1

Giai đoạn 3: Triển khai hệ thống chủ đề Plymouth

1. Cài đặt các gói cần thiết

sudo apt update
sudo apt install plymouth plymouth-themes -y

2. Tạo chủ đề tối giản

Tạo thư mục chủ đề:

sudo mkdir -p /usr/share/plymouth/themes/silent

Tạo tệp cấu hình chủ đề:

/usr/share/plymouth/themes/silent/silent.plymouth
[Plymouth Theme]
Name=silent
Description=Màn hình khởi động tĩnh
ModuleName=script

[script]
ImageDir=/usr/share/plymouth/themes/silent
ScriptFile=/usr/share/plymouth/themes/silent/silent.script

3. Tạo kịch bản hiển thị

Tạo tệp:

/usr/share/plymouth/themes/silent/silent.script
wallpaper_image = Image("splash.png");
screen_width = Window.GetWidth();
screen_height = Window.GetHeight();
wallpaper_sprite = Sprite(wallpaper_image);
wallpaper_sprite.SetPosition(0, 0, -100);

Giải thích logic kịch bản:

  • Tải hình ảnh khởi động đã chuẩn bị
  • Lấy độ phân giải màn hình hiện tại
  • Tạo đối tượng sprite toàn màn hình
  • Thiết lập thứ tự lớp để hình ảnh nằm ở dưới cùng

4. Triển khai tài nguyên và kích hoạt chủ đề

Sao chép hình ảnh:

sudo cp /boot/splash.png /usr/share/plymouth/themes/silent/

Kích hoạt chủ đề:

sudo plymouth-set-default-theme -R silent

Lưu ý quan trọng:

Tham số -R không chỉ đặt chủ đề mặc định mà còn thực thi:

update-initramfs -u

Thao tác này biên dịch chủ đề vào initramfs, cho phép Plymouth hiển thị màn hình khởi động trong giai đoạn khởi động kernel sớm.


Giải thích kỹ thuật

Trình tự khởi động Raspberry Pi 5

Quá trình khởi động Raspberry Pi 5 khác biệt đáng kể so với các phiên bản cũ hơn.

  1. Giai đoạn Firmware
    Khởi tạo phần cứng như PCIe và HDMI.

  2. Giai đoạn systemd-boot
    Tải kernel và initramfs.

  3. Giai đoạn hệ thống cơ bản (basic.target)
    Thiết bị framebuffer trở nên sẵn sàng hoàn toàn.

Đây là lý do phương pháp fbi thất bại: nó bắt đầu như một dịch vụ hệ thống, nhưng thiết bị framebuffer có thể chưa sẵn sàng. Plymouth chạy sớm hơn, như một phần của quá trình khởi động.


Điều khiển lớp hình ảnh

Trong kịch bản:

SetPosition(0, 0, -100)

Giá trị trục Z âm đặt hình ảnh ở lớp dưới cùng, đảm bảo rằng các thành phần giao diện người dùng sau này sẽ không che phủ nó.

Cơ chế xếp lớp này rất quan trọng để tạo ra một màn hình khởi động sạch sẽ.


Kiểm tra và thử nghiệm

Khởi động lại hệ thống:

sudo sync
sudo reboot

Kết quả mong đợi:

  • :white_check_mark: Không có ô cầu vồng lúc khởi động
  • :white_check_mark: Không có đầu ra bản ghi kernel
  • :white_check_mark: Không có con trỏ nhấp nháy
  • :white_check_mark: Hình ảnh tùy chỉnh hiển thị trong suốt quá trình khởi động

Nếu các ký tự vẫn xuất hiện trong giai đoạn firmware, chúng đến từ start.elf. Việc loại bỏ chúng yêu cầu thay thế tài nguyên biểu tượng bộ nạp khởi động, liên quan đến các sửa đổi sâu hơn.


:white_check_mark: Sau khi hoàn tất thiết lập này, Raspberry Pi của bạn sẽ hiển thị màn hình khởi động tùy chỉnh hoàn toàn ngay từ lúc cấp nguồn, mang lại trải nghiệm khởi động mượt mà và chuyên nghiệp.