要实现插上 USB 就优先从 USB 启动(通常用于运行 Armbian、CoreELEC 或 EmuELEC),你需要修改 U-Boot 环境变量,在默认的 storeboot 之前插入一段检查 USB 脚本的逻辑。& @: m6 `6 Z! x' i) { 6 o# _7 D* r9 ~6 {7 t/ ]3 y9 x 请在 adb shell 或串口终端中依次执行以下命令。 S# c6 u' Y; n7 a1 x+ p/ u4 J2 `1 M9 B4 R- P' A5 a# j% } 第一步:定义 USB 启动检测脚本 # m; Q" [6 D% f# m. T我们需要创建一个名为 start_usb_autoscript 的新变量。这段脚本的作用是:启动 USB 控制器,尝试读取 aml_autoscript 或 s905_autoscript(常见的引导脚本名),如果读取成功则执行它。) `# @8 f5 h0 W: ^ C' n4 }8 } 0 ?5 T9 M) Q' f# a: U在终端中输入(建议复制粘贴以避免输错): + ]/ w( l. }& s* W6 J2 X 7 d& B9 u8 }. `: f% v+ K! E$ kBash + B6 ]! c+ t! O+ f1 [% G7 E% X7 D# I! Sfw_setenv start_usb_autoscript "if usb start 0; then if fatload usb 0 1080000 aml_autoscript; then autoscr 1080000; fi; if fatload usb 0 1080000 s905_autoscript; then autoscr 1080000; fi; fi" i% z' M9 G+ D / a0 u O4 }1 r+ r1 s* W" ^+ d6 h3 E 解释: + T6 u, h" d4 N9 Fusb start 0: 启动 USB 控制器 0。 . i6 S2 j: G8 R1 Tfatload ...: 尝试从 USB 分区读取引导脚本到内存地址 1080000(这是你环境变量中定义的 loadaddr)。8 r! T, A7 _4 {0 l1 K8 K! g autoscr 1080000: 如果读取成功,就运行该内存地址的脚本。 e+ t' Q3 B) {" D9 J! O# j% g1 r$ N如果找不到文件,脚本会结束并返回,不会卡死。 % u+ Q4 f& M$ R: N; f9 I# F1 {* N6 P7 l$ ^ 第二步:修改 bootcmd 启动顺序 : l+ M+ s; l7 m+ g8 a现在的 bootcmd 是 run storeboot。我们要把它改成先运行刚才定义的 USB 脚本,然后再运行原来的启动逻辑。 - V. e% E$ \6 u" u% ~ P N' h7 e9 z9 `6 X 输入:* B- _! c2 r I3 F6 g" t - x" D( l" D7 C7 r" P, e* EBash 8 {7 G) \# Z- a+ Ofw_setenv bootcmd "run start_usb_autoscript; run storeboot"" {/ a8 \: l( L# n, [# M, l * ~5 t0 A" B; s% }) I+ q第三步:验证并重启6 R" Y3 M9 R/ V# n$ U 检查修改是否生效: 输入以下命令查看 bootcmd 是否已变更:; v3 k; j+ p% z 3 o$ H/ L) g6 b0 L1 A$ v( u* QBash2 z+ a& A9 n! C4 V1 ?9 V fw_printenv bootcmd ! p5 {6 {, p2 U5 O2 `. p8 m输出应该是:bootcmd=run start_usb_autoscript; run storeboot 5 l' u8 S) T9 ~# E. \: n - b3 O3 H0 a. l R重启测试: 插入写好系统(如 Armbian/CoreELEC)的 U 盘,然后执行重启:/ F( ~! x; ^# Z . b" z) u5 ]) e, i+ A Bash2 c8 `, }+ P( x4 d2 c reboot
您需要 登录 才可以下载或查看,没有账号?立即注册
举报
本版积分规则 发表回复 回帖后跳转到最后一页
查看 »
相关侵权、举报、投诉及建议等,请发 E-mail:yesdong@qq.com
Powered by Discuz! X5.0 Licensed © 2001-2026 Discuz! Team.44152102000001