n1盒子的uboot u盤引導armbian/linux系統
檢視uboot的預設變數,儲存在/dev/env裝置中,armbian4.18核心不能識別此裝置,3.14核心可以,檢視預設啟動命令為start_autoscript:
fw_printenv | grep bootcmd bootcmd=run start_autoscript; run storeboot;
start_autoscript判斷有usb剛執行start_usb_autoscript命令,mmc執行start_mmc_autoscript,具體如下:
start_autoscript=if usb start ; then run start_usb_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; if fatload usb 1 1020000 s905_autoscript; then autoscr 1020000; fi; if fatload usb 2 1020000 s905_autoscript; then autoscr 1020000; fi; if fatload usb 3 1020000 s905_autoscript; then autoscr 1020000; fi;
start_usb_autoscript 載入usb裝置1和2 fat分割槽根目錄s905_autoscript檔案並執行,s905_autoscript內容如下:
setenv env_addr"0x10400000" setenv kernel_addr "0x11000000" setenv initrd_addr "0x13000000" setenv boot_start booti ${kernel_addr} ${initrd_addr} ${dtb_mem_addr} if fatload usb 0 ${kernel_addr} zImage; then if fatload usb 0 ${initrd_addr} uInitrd; then if fatload usb 0 ${env_addr} uEnv.ini; then env import -t ${env_addr} ${filesize};run cmdline_keys;fi; if fatload usb 0 ${dtb_mem_addr} dtb.img; then run boot_start; else store dtb read ${dtb_mem_addr}; run boot_start;fi;fi;fi; if fatload usb 1 ${kernel_addr} zImage; then if fatload usb 1 ${initrd_addr} uInitrd; then if fatload usb 1 ${env_addr} uEnv.ini; then env import -t ${env_addr} ${filesize};run cmdline_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 fatload 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};run 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;fi; if fatload mmc 1 ${kernel_addr} zImage; then if fatload mmc 1 ${initrd_addr} uInitrd; then if fatload mmc 1 ${env_addr} uEnv.ini; then env import -t ${env_addr} ${filesize};run cmdline_keys;fi; if fatload mmc 1 ${dtb_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變數方法如下:
fw_setenv start_autoscript "if usb start ; then run start_usb_autoscript; fi; if ext4load mmc 1:c 1020000 /boot/s905_autoscript; then autoscr 1020000; fi;"
對於s905_autoscript檔案可用mkimage生成:
mkimage -C none -A arm -T script -d /boot/s905_autoscript.cmd /boot/s905_autoscript
標籤:none