【Xilinx】MPSOC启动流程(五)- Uboot

此系列博客,仅对Xilinx平台PS端(ARM部分)开发做介绍,不对PL(FPGA)做过多介绍。

目录

五. run_main_loop

5.1 main_loop

六. 自动执行启动内核

​​​​​​​6.1 autoboot_command

​​​​​​​6.2 脚本启动

6.2.1 ​​​​​​​QSPI

​​​​​​​6.2.2 EMMC/SD启动


五. run_main_loop

此函数实现uboot 启动以后会进入 倒计时,如果在倒计时结束之前按下按下回车键,那么就会进入 uboot 的命令模式,如果倒计时结束以后都没有按下回车键,那么就会自动启动 Linux 内核。

5.1 main_loop

       1.autoboot_command:检查倒计时是否结束

       2.cli_loop: uboot 的命令行处理函数

​​​​​​​​​​​​​​

六. 自动执行启动内核​​​​​​​​​​​​​​

​​​​​​​6.1 autoboot_command

当在倒计时没有按键按下,则会执行autoboot_command

       这里S的值为run distro_bootcmd

​​​​​​​6.2 脚本启动

       Distro_bootcmd的值为脚本,寻找对应的启动方式的环境变量值

       最终会查找boot.scr 脚本去执行镜像,设备树等的搬运,以及启动工作

6.2.1 ​​​​​​​QSPI

若为QSPI启动方式,执行bootcmd_qspi0环境变量的内容

sf probe 0 0 0: 加载qspi驱动

sf read $scriptaddr $script_offset_f $script_size_f : 从qspi flash中读取脚本到内存中

source ${scriptaddr}: 执行脚本boot.scr

​​​​​​​6.2.2 EMMC/SD启动

若为EMMC/SD启动方式,执行bootcmd_mmc0/1环境变量的内容: devnum=0/1; run mmc_boot

run mmc_boot -> run scan_dev_for_boot_part -> run scan_dev_for_boot ->

run scan_dev_for_scripts

scan_dev_for_scripts的内容为:查找MMC分区是否有boot.scr 脚本

若有脚本,则执行run boot_a_script

boot_a_script的值:load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr} 加载分区中的脚本,并source执行脚本

猜你喜欢

转载自blog.csdn.net/qq_37755518/article/details/130193387