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:
- Chuẩn bị máy host: tải bootloader, boot image, rootfs; cài
fastboot; build công cụ flashqdl. - Flash bootloader vào UFS, qua EDL mode (dùng
qdl) hoặc Fastboot mode (dùng scriptflashall). - Flash boot image và rootfs qua Fastboot mode.
- 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
| Thành phần | Vai trò |
|---|---|
| Bootloader | Nạp hệ điều hành khi board được bật |
| Boot image | Giú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):
- Bootloader: rb5-bootloader-ufs-linux-21.zip. Tên file có dạng
rb5-bootloader-ufs-linux-XX.zip, vớiXXlà số release. - Boot image: boot-qrb5165-rb5—5.15-r0-qrb5165-rb5-20211218193306-511.img, cho hệ thống có giao diện dựa trên Xorg.
- Rootfs: rpb-desktop-image-qrb5165-rb5-20211218193306-511.rootfs.img.gz, biến thể thường (không phải
-test).
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:
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 trongSDK 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.
# Tải mã nguồn qdlgit clone https://github.com/linux-msm/qdl.git
# Cài thư viện và công cụ cần để buildsudo apt install libxml2-dev libusb-1.0-0-dev libzip-dev meson ninja-build help2man
# Build, file thực thi nằm ở build/qdlcd qdl/meson setup buildmeson compile -C build
# Cài vào hệ thống để gọi được lệnh qdl ở mọi nơisudo meson install -C buildHướ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:
sudo systemctl stop ModemManagerFlash 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:
unzip rb5-bootloader-ufs-linux-XX.zipcd rb5-bootloader-ufs-linux-XXCách 1: qua EDL mode
- Đưa board vào EDL mode (xem Setting up board in EDL Mode).
- Chạy
qdlđể ghi bootloader vào UFS:
qdl prog_firehose_ddr.elf rawprogram?.xml patch?.xmlKhi thành công, cuối log sẽ có các dòng tương tự:
LOG: INFO: Calling handler for setbootablestoragedrivepartition 1 is now bootableLOG: INFO: Calling handler for powerLOG: INFO: bsp_target_reset() 0- Đư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
- Đưa board vào Fastboot mode (xem Setting up board in Fastboot Mode).
- 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):
sudo ./flashall- Khởi động lại board để nó chạy bootloader mới:
sudo fastboot reboot- 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.
- Trong thư mục chứa boot image, flash vào phân vùng
boot(thayBUILD#bằng dấu ngày/build của file):
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- Trong thư mục chứa rootfs (đuôi
.img.gz), giải nén rồi flash vào phân vùngrootfs:
gunzip rpb-desktop-image-qrb5165-rb5-20211218193306-511.rootfs.img.gzfastboot flash rootfs rpb-desktop-image-qrb5165-rb5-20211218193306-511.rootfs.imgKhi 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- Rút cáp USB Type-C và cắm các thiết bị ngoại vi.
- 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
- 96Boards: Qualcomm® Robotics RB5 Downloads.
- Linaro OpenEmbedded 21.12 release cho RB5.
- 96Boards: Linux Host Installation for Qualcomm® Robotics RB5.
- 96Boards: Qualcomm RB5 Board Recovery.
- Qualcomm OnQ: Running Upstream Linux on the Qualcomm Robotics RB5 Platform.
- RidgeRun Developer Wiki: Linaro, Getting Started, Flashing Bootloader, Flashing Boot Image and Rootfs.










