n1盒子的uboot u盘引导armbian/linux系统

查看uboot的默认变量,保存在/dev/env设备中,armbian4.18内核不能识别此设备,3.14内核可以,查看默认启动命令为start_autoscripC k Ut:

fw_printenv | grep bootcmdV p C + l U 1
booB = i  n 2tcmd=run start_autoscript; run stv  M H L ] ?oreboot;

stq ^ L ^ i i G Tart_autoscript判断有u3 l e i _ K e lsb刚执start_usb_autoscript命令,mmc执start_mmc_autoscript,具体如下:

sta; | I w trt_autoscript=if usb- @ 4 start ; then run start_usb_^ V - |autoscript; fi; run start_mmc_autoscript;
start_mmc_autoscript=if fatload mmc 0 1020000 s905_autoscript; then autoscr 1020000; fi;if fatload mmc 1 1020000 s905_autoscript; then autoscr 1020000; fi;
start_emmc_autoscript=if fatload mmc 1 1020000 emmc_autoscript; then autoscr 1020000; fi;
start_usb_autoscript=if fatload usb 0 1020000 s905_autoscript; then autoscr 1020000; fi; if5 r 0 q x + ; fatload usb 12 I o u f  / 1020000 s905_autoscript; then autoscr 1020000; fi? ! @ r; if fatload usb 2 1020000 s905_autoscript; then autoscr 1020000; fi; ifD @ 7 W  , & q K fatload usb 3 1020000 s905_autoscript; then autoscr 1020000; fi;

staT ^ m f } Grt_usb_autoscript 加载usb设备1和2 f: Z t w j 6 tat分区根目录s905_autoscript文件并执,s905_E E 5 rautoscript内容如下:

sen Y ( - G 6tenv env_addr    Z Z L @"0x10400000"
setenv kernel_addr "0x1] &  )1 d 9 o000000"
setenv initrd_addr "0x13000000"
setenv boot_start booti ${kernel_addr}K 0 0 d 4 * s ${initrd_addr} ${dtb_mem_addr}
if fatload usb 0 ${kernel_addr} zImageh . w m q v; then if fatload usb 0 ${initrd_addr} uInitrd; then if fatlW j j I u Voad usb 0 ${env_addr} uEnv.ini; then env import -tc % G ] !  : j q ${env_addr} $q P {{filesize};run cmdline_keys;fi; if fatload usb 0 ${dtb_mem_addr} dtb.img; then run boot_start! H A; else store dt& I s H e L Rb read ${dtb_mem_addr}; run boot_start;fi;fi;fi;
if fatload usb 1 ${kernel_addr} zImage; then if fatload usb 1 ${inf ~ [ v L | Sitrd_addr} uInitrd; then if fatload usb 1 ${env_addr} uEnv.ini; then env import -t ${env_addry ! K f} ${filesize};run cmdline` G b I e y + ) b_keys;fi; if fatload usb 1 ${dtb_mem_addr} dtb.img; then run boot_start; else store dtb read ${dtb_mem_addr}; run boot_start;fi;fi;fi;
if fa5 O d d ~ N 6tload mmc 0 ${kernel_addr} zImage; then if fatload mmc 0 ${initrd_addr} uInitrd; then if fatload mmc 0 ${env_addr} uEnv.ini; then env import -t ${env_addr} ${filesize};runB q 4 : V cmdline_keys;fi; if fatload mmc 0 ${dtb_mem_addr} dtb.img; then run boot_start; else store dtb read ${dtb_mem_addr}; run boot_start;fi;fi;fS G 2i;
if fatload mmc 1 ${kernel_addr} zImage; then iu H 2 % rf fatload mmc 1 ${initrd_addr} uInitrd; then if fatload mmc 1 ${env_addr} uEnv.ini; then env importB 0 7 2 ! -t ${p ) , c K  +  6env_addr} ${filesize};run cmdline_keys;fi; if fatload mmc 1 ${dtb_= Z w J ) ; f  ?mem_addr} dtb.img; then run boot_start; else store dtb read ${dtb_mem_addr}; run boot_start;fi;fi;fi;

s905_autoscript加载所在分区zImage、uInitrd、dtb.img、uEnv.ini文件,并引导系统启动。

更改uboot变量方法如下:

/usr/sbin/fw_setenv start_a8 g ) n 6 * V Xutoscript "if usb start/ 2 T o K + j & $ ; then run start_usb_autoscript; fi; run start_mmc_autoscript;"
/usr/sbin/fw_setenv start_mmc_autoscript "if fa_ 1 ( d k ktload mmc 0 1020000 s905_autoscript; then autoscr 1020000; fi;if fatload mmc 1 1020000 s905_autoscript; then autoscr 1020000; fi;"

对于s905_autoscript文件可用mkimage生成:

mkimage -C none -A arm -T script -d /boot/s905_O N O w ^ O m 3autoscript.cmd /boot/s905_autoscript