Tối Ưu Khởi Động Orange Pi: Chỉnh Sửa script.bin để Ưu Tiên eMMC và Giải Phóng Thẻ SD
Việc quản lý thiết bị khởi động trên Orange Pi có thể đôi khi gây khó khăn, đặc biệt khi bạn muốn tận dụng tối đa bộ nhớ eMMC tích hợp và sử dụng thẻ SD cho các mục đích lưu trữ khác. Bài viết này sẽ hướng dẫn chi tiết cách chỉnh sửa file cấu hình phần cứng script.bin để thay đổi cơ chế phát hiện thiết bị khởi động, ưu tiên eMMC và bỏ qua thẻ SD.
Hiểu Về script.bin và Kernel Legacy
Đối với các bo mạch Orange Pi sử dụng Kernel “Legacy” (phiên bản 3.4.X), file script.bin đóng vai trò trung tâm trong việc định cấu hình phần cứng. Đây là file nhị phân chứa tất cả các thiết lập quan trọng, từ các cổng GPIO đến các thiết bị lưu trữ. Khi một hệ thống đã được chuyển từ thẻ SD sang bộ nhớ eMMC, mong muốn chung là có thể sử dụng thẻ SD cho các mục đích khác như lưu trữ dữ liệu. Tuy nhiên, theo mặc định, hệ thống có thể không nhận diện thẻ SD hoặc thậm chí không khởi động nếu có thẻ SD được cắm vào (do hệ thống vẫn tìm kiếm bootloader trên thẻ SD).
Giải pháp là tùy chỉnh script.bin để buộc hệ thống chỉ tìm kiếm bootloader trên eMMC, cho phép thẻ SD được sử dụng tự do mà không ảnh hưởng đến quá trình khởi động. Phương pháp này đã được nhiều người dùng xác nhận là hiệu quả.
Cấu Hình Các Thiết Bị Bộ Nhớ Trong script.bin
Trong file script.bin, các thiết lập liên quan đến thiết bị lưu trữ được quản lý thông qua các phần như [mmc0_para], [mmc1_para] và [mmc2_para]. Các phần này tương ứng với các thiết bị bộ nhớ khác nhau có thể có trên bo mạch Orange Pi, bao gồm khe cắm thẻ SD, bộ nhớ eMMC, và/hoặc bộ nhớ NOR/NAND. Sự tương ứng cụ thể giữa mmcN và từng loại thiết bị sẽ phụ thuộc vào mẫu Orange Pi bạn đang sử dụng.
Dưới đây là các thông số chính có thể được cấu hình cho các thiết bị bộ nhớ mmc trong script.bin:
[mmcN_para]
sdc_used = 1
sdc_detmode = 3
sdc_buswidth = 4
sdc_clk = port:PF02<2><1><2><default>
sdc_cmd = port:PF03<2><1><2><default>
sdc_d0 = port:PF01<2><1><2><default>
sdc_d1 = port:PF00<2><1><2><default>
sdc_d2 = port:PF05<2><1><2><default>
sdc_d3 = port:PF04<2><1><2><default>
sdc_det = port:PF06<0><1><2><default>
sdc_use_wp = 0
sdc_wp =
sdc_isio = 0
sdc_regulator = "none"
sdc_power_supply = "none"
Giải thích các thông số quan trọng:
sdc_used: Bật/Tắt việc sử dụng bộ điều khiển SD (0: tắt; 1: bật).sdc_detmode: Chế độ phát hiện thiết bị. Có 5 giá trị (0-4):0: Không phát hiện.1: Phát hiện qua GPIO (sử dụng thông sốsdc_detđể chỉ định GPIO).2: Phát hiện qua đường dữ liệu (dựa trên trạng thái của đường dữ liệu thứ 3sdc_d3).3: Chế độ dò tìm tự động (polling) – mặc định trên nhiều bản phân phối.4: Chế độ thủ công (phát hiện thông qua/proc).
sdc_buswidth: Độ rộng bus dữ liệu (thường là 4).sdc_clk: Định nghĩa chân và cấu hình cho tín hiệu đồng hồ.sdc_cmd: Định nghĩa chân và cấu hình cho tín hiệu lệnh.sdc_dN: Định nghĩa chân và cấu hình cho các tín hiệu dữ liệu (d0, d1, d2, d3).sdc_det: Định nghĩa chân và cấu hình cho tín hiệu phát hiện (dùng khisdc_detmode = 1).sdc_use_wp: Bật/Tắt bảo vệ ghi (0: tắt; 1: bật).sdc_wp: Định nghĩa chân và cấu hình cho tín hiệu bảo vệ ghi (dùng khisdc_use_wp = 1).sdc_isio: Cấu hình cho SD với giao diện SDIO (Secure Digital Input Output).sdc_regulator: Định nghĩa bộ điều chỉnh điện áp (cho các thiết bị yêu cầu nguồn điện cụ thể, hỗ trợ UHS-I/DDR và HS200).sdc_power_supply: Định nghĩa nguồn cấp điện cho thiết bị (cho các trường hợp đặc biệt).
Ví Dụ Thực Tế: Cấu Hình Thẻ SD Để Chỉ Dùng Làm Bộ Nhớ
Trong hầu hết các mẫu Orange Pi, thẻ SD thường được gán cho thiết bị mmc0. Để ngăn hệ thống tìm kiếm bootloader trên thẻ SD và cho phép khởi động từ eMMC, chúng ta sẽ thay đổi chế độ phát hiện của thẻ SD. Theo mặc định, nhiều bản phân phối sử dụng chế độ dò tìm tự động (sdc_detmode = 3). Chúng ta sẽ chuyển sang chế độ phát hiện qua GPIO (sdc_detmode = 1), tận dụng việc chân GPIO tương ứng thường được cấu hình ban đầu để không phát hiện thẻ SD là thiết bị khởi động.
Các bước thực hiện:
- Sao lưu file cấu hình gốc: Luôn tạo bản sao lưu trước khi chỉnh sửa để phòng trường hợp xảy ra lỗi.
sudo cp /boot/script.bin /boot/script.bak - Chuyển đổi file nhị phân sang định dạng văn bản (fex): File
script.binlà nhị phân và cần được chuyển đổi sang định dạngfexđể có thể chỉnh sửa bằng trình soạn thảo văn bản.sudo bin2fex /boot/script.bin /boot/script.fex - Chỉnh sửa file fex: Mở file
script.fexbằng trình soạn thảonano.sudo nano /boot/script.fex - Tìm và thay đổi chế độ phát hiện: Trong file, tìm đến phần
[mmc0_para](tương ứng với thẻ SD) và thay đổi giá trị củasdc_detmodetừ3(polling) thành1(GPIO).[mmc0_para] sdc_used = 1 sdc_detmode = 1 <-- Thay đổi từ 3 sang 1 ... - Lưu và đóng file: Sau khi chỉnh sửa, nhấn
Ctrl + X, sau đóY(Yes) vàEnterđể lưu các thay đổi. - Chuyển đổi file fex trở lại định dạng nhị phân (bin):
sudo fex2bin /boot/script.fex /boot/script.bin - Tắt hệ thống:
sudo shutdown -h now - Kiểm tra: Sau khi hệ thống đã tắt hoàn toàn, cắm thẻ SD vào và khởi động lại Orange Pi (ngắt và kết nối lại nguồn điện). Hệ thống sẽ khởi động từ eMMC mà không gặp vấn đề gì, và thẻ SD của bạn giờ đây có thể được sử dụng làm bộ nhớ lưu trữ thông thường.
Việc điều chỉnh script.bin là một phương pháp mạnh mẽ để tùy biến hành vi khởi động của Orange Pi, mang lại sự linh hoạt hơn trong việc quản lý các thiết bị lưu trữ của bạn.