Video failed to load

Linaro: Flash Bootloader, Boot Image và Rootfs

984 words
5 minutes
Linaro: Flash Bootloader, Boot Image và Rootfs

Bài này tổng hợp và viết lại từ các trang Linaro, Getting Started, Flashing Bootloader và Flashing Boot Image and Rootfs trong RidgeRun Developer Wiki.

Linaro là một tổ chức đóng góp cho phần mềm mã nguồn mở như Linux kernel. Với RB5, Linaro cung cấp bộ build Linux thay thế cho Thundercomm SDK: hỗ trợ mainline Linux kernel (upstream) và các bản phân phối dựa trên Yocto Project hoặc Debian. Bản Linaro OpenEmbedded RPB 21.12 cho RB5 dựa trên OpenEmbedded / Yocto Project 3.1.12 (dunfell) và Linux kernel 5.15.6, mới hơn kernel 5.4 của các image LU/LE trong Thundercomm SDK.

Tổng quan quy trình#

Khác với Thundercomm SDK (một công cụ làm tất cả), với Linaro bạn tự tải từng thành phần và flash bằng các công cụ riêng:

  1. Chuẩn bị máy host: tải bootloader, boot image, rootfs; cài fastboot; build công cụ flash qdl.
  2. Flash bootloader vào UFS, qua EDL mode (dùng qdl) hoặc Fastboot mode (dùng script flashall).
  3. Flash boot image và rootfs qua Fastboot mode.
  4. Khởi động lại board và sử dụng.

Máy host dùng Linux; hướng dẫn dưới đây chạy trên Ubuntu 20.04.

Ba thành phần cần tải#

Bảng 1: Ba thành phần cần tải
Thành phầnVai trò
BootloaderNạp hệ điều hành khi board được bật
Boot imageGiúp board boot, thường chứa kernel của hệ điều hành
Root file system (rootfs)Gốc của cây thư mục, chứa các file và thư mục cần thiết để hệ thống hoạt động

Linaro có hai lựa chọn phân phối: Debian và OpenEmbedded. Bài này dùng OpenEmbedded. Bản OpenEmbedded có nhiều image tham chiếu cho các trường hợp khác nhau: hệ thống không màn hình (headless) hoặc có giao diện dựa trên Xorg hay Wayland. Mỗi image có hai biến thể: bản thường và bản -test chứa thêm các gói phục vụ kiểm thử.

Các file dùng trong bài (bản release 21.12):

Các lựa chọn khác có trong trang Downloads của 96Boards cho RB5.

Chuẩn bị máy host#

Cài fastboot#

fastboot là công cụ ghi vào flash của thiết bị nhúng qua USB từ máy host. Có hai cách cài:

  • Cách 1 (khuyên dùng): dùng trình quản lý gói:
Terminal window
sudo apt install android-tools-fastboot -y
  • Cách 2: cài từ Android SDK Platform-Tools. Lưu ý bản “Tools only” cho Linux không có sẵn fastboot; cần dùng Android SDK Manager theo hướng dẫn trong SDK README.txt để cài platform-tools.

Build công cụ flash qdl#

Chip Qualcomm có một chế độ đặc biệt tên là EDL (Emergency Download Mode). Ở chế độ này, thiết bị nhận diện là Qualcomm HS-USB 9008 qua USB và cho phép máy host gửi lệnh ghi vào bộ nhớ trên board (UFS). Công cụ qdl dùng chế độ này để flash.

Terminal window
# Tải mã nguồn qdl
git clone https://github.com/linux-msm/qdl.git
# Cài thư viện và công cụ cần để build
sudo apt install libxml2-dev libusb-1.0-0-dev libzip-dev meson ninja-build help2man
# Build, file thực thi nằm ở build/qdl
cd qdl/
meson setup build
meson compile -C build
# Cài vào hệ thống để gọi được lệnh qdl ở mọi nơi
sudo meson install -C build
Note

Hướng dẫn gốc của RidgeRun clone qdl từ git.linaro.org và build bằng make. Repo đó nay đã chuyển sang linux-msm/qdl trên GitHub và dùng Meson; các lệnh trên theo README hiện tại. Một số bản phân phối (như Debian) cũng đã đóng gói sẵn qdl.

Tắt ModemManager#

Một số bản Linux dùng ModemManager để cấu hình mạng di động. Khi cắm board ở chế độ USB, máy host nhận board là một modem Qualcomm và ModemManager sẽ tìm cách cấu hình nó, làm hỏng quá trình flash. Vì vậy cần tắt ModemManager trước khi cắm board, và bật lại sau khi flash xong nếu cần:

Terminal window
sudo systemctl stop ModemManager

Flash bootloader#

Có hai cách flash bootloader vào UFS. Cả hai đều bắt đầu từ thư mục chứa file bootloader đã tải:

Terminal window
unzip rb5-bootloader-ufs-linux-XX.zip
cd rb5-bootloader-ufs-linux-XX

Cách 1: qua EDL mode#

  1. Đưa board vào EDL mode (xem Setting up board in EDL Mode).
  2. Chạy qdl để ghi bootloader vào UFS:
Terminal window
qdl prog_firehose_ddr.elf rawprogram?.xml patch?.xml

Khi thành công, cuối log sẽ có các dòng tương tự:

LOG: INFO: Calling handler for setbootablestoragedrive
partition 1 is now bootable
LOG: INFO: Calling handler for power
LOG: INFO: bsp_target_reset() 0
  1. Đưa board sang Fastboot mode (xem Setting up board in Fastboot Mode) rồi chuyển sang phần Flash boot image và rootfs.

Cách 2: qua Fastboot mode#

  1. Đưa board vào Fastboot mode (xem Setting up board in Fastboot Mode).
  2. Chạy script flashall, script này tự động flash bootloader vào UFS (khoảng 3 phút trên Intel Core i7-1065G7):
Terminal window
sudo ./flashall
  1. Khởi động lại board để nó chạy bootloader mới:
Terminal window
sudo fastboot reboot
  1. Chuyển sang phần Flash boot image và rootfs. Không đưa board vào Fastboot mode lần nữa: bootloader mới đã sẵn sàng nhận lệnh fastboot.

Flash boot image và rootfs#

Board cần đang ở Fastboot mode (theo một trong hai cách ở trên). Mỗi lệnh flash có thể mất tới 20 phút, tuỳ image và máy host.

  1. Trong thư mục chứa boot image, flash vào phân vùng boot (thay BUILD# bằng dấu ngày/build của file):
Terminal window
sudo fastboot flash boot boot-BUILD#.img
# Với file đã tải ở trên:
sudo fastboot flash boot boot-qrb5165-rb5--5.15-r0-qrb5165-rb5-20211218193306-511.img
  1. Trong thư mục chứa rootfs (đuôi .img.gz), giải nén rồi flash vào phân vùng rootfs:
Terminal window
gunzip rpb-desktop-image-qrb5165-rb5-20211218193306-511.rootfs.img.gz
fastboot flash rootfs rpb-desktop-image-qrb5165-rb5-20211218193306-511.rootfs.img

Khi thành công, fastboot in ra tương tự:

sending 'rootfs' (661596 KB)...
OKAY [ 2.971s]
writing 'rootfs'...
OKAY [ 20.953s]
finished. total time: 23.923s
  1. Rút cáp USB Type-C và cắm các thiết bị ngoại vi.
  2. Khởi động lại board bằng cách rút nguồn rồi cắm lại. Nếu đã flash image có giao diện, có thể nối board với màn hình và dùng ngay; hoặc truy cập board qua ADB, Serial Console hay SSH (xem Getting into the board).

Tham khảo#

  1. 96Boards: Qualcomm® Robotics RB5 Downloads.
  2. Linaro OpenEmbedded 21.12 release cho RB5.
  3. 96Boards: Linux Host Installation for Qualcomm® Robotics RB5.
  4. 96Boards: Qualcomm RB5 Board Recovery.
  5. Qualcomm OnQ: Running Upstream Linux on the Qualcomm Robotics RB5 Platform.
  6. RidgeRun Developer Wiki: Linaro, Getting Started, Flashing Bootloader, Flashing Boot Image and Rootfs.

Comments

Profile Image of the Author
Art
When the world stopped, I started compiling.
Announcement
Welcome to my blog!
Latest Moments
Table of Contents