stm32mp135d u-boot 引导流程

2024-05-01 14:36
文章标签 流程 boot 引导 stm32mp135d

本文主要是介绍stm32mp135d u-boot 引导流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

stm32mp135d u-boot 引导流程

  • 一、U-Boot启动流程
    • 1. bootcmd_stm32mp 确定当前设备
    • 2. distro_bootcmd 进入当前设备启动
    • 3. bootcmd_mmc1 设置当前设备号
    • 4. mmc_boot 设置当前设备类型
    • 5. scan_dev_for_boot_part 扫描设备分区
    • 6. scan_dev_for_boot 扫描指定分区
    • 7. scan_dev_for_extlinux 查找指定分区的配置文件
    • 8. boot_extlinux 准备启动
    • 9. sysboot 启动内核
  • 二、direct boot cmd 手动配置直接启动
  • 三、other cmd 其他辅助命令
    • 1. read config 读取
    • 2. env_check 环境检查
    • 3. scan_m4fw 检查是否有M4 固件
    • 4. scan_overlays 检查 overlays 配置文件

此文描述了u-boot是通过什么样的过程进入linux内核启动的

一、U-Boot启动流程

boot -> bootcmd_stm32mp -> distro_bootcmd -> bootcmd_mmc1 -> mmc_boot -> scan_dev_for_boot_part -> scan_dev_for_boot -> scan_dev_for_extlinux -> boot_extlinux -> sysboot -> do_sysboot(sysboot.c)

1. bootcmd_stm32mp 确定当前设备

  1. 打印当前启动设备
  2. 判断设备启动类型后(烧录usb|serial,启动emmc|nand|nor),设置环境变量boot_targets
  3. 执行 distro_bootcmd
    env_check
echo "Boot over ${boot_device}${boot_instance}!"
if test ${boot_device} = serial || test ${boot_device} =usb; thenstm32prog ${boot_device} ${boot_instance}
elserun env_checkif test ${boot_device} = mmc; thenenv set boot_targets "mmc${boot_instance}"fiif test ${boot_device} = nand || test ${boot_device} = spi-nand; thenenv set boot_targets ubifs0fiif test ${boot_device} = nor; thenenv set boot_targets mmc0firun distro_bootcmd
fi

2. distro_bootcmd 进入当前设备启动

1.当前使用的emmc,执行bootcmd_mmc1

for target in ${boot_targets}; dorun bootcmd_${target}
done

3. bootcmd_mmc1 设置当前设备号

bootcmd_mmc1=devnum=1
run mmc_boot

4. mmc_boot 设置当前设备类型

if mmc dev ${devnum}; thendevtype=mmcrun scan_dev_for_boot_part
fi

5. scan_dev_for_boot_part 扫描设备分区

    1. 检查可引导的设备分区
    1. fstype 检查分区的文件系统类型,默认ext4
    1. 执行 scan_dev_for_boot
part list ${devtype} ${devnum} -bootable devplist;
env exists devplist || setenv devplist 1;
for distro_bootpart in ${devplist}; doif fstype ${devtype} ${devnum}:${distro_bootpart} bootfstypethenrun scan_dev_for_bootfi
done
setenv devplist

6. scan_dev_for_boot 扫描指定分区

  • 1.选择 uboot 启动图像
  • 2.执行 scan_dev_for_extlinux
run select_lcd_id;
echo Scanning ${devtype} ${devnum}:${distro_bootpart}...
for prefix in ${boot_prefixes}; dorun scan_dev_for_extlinuxrun scan_dev_for_scripts
done
run scan_dev_for_efi

7. scan_dev_for_extlinux 查找指定分区的配置文件

    1. 查找配置文件
    1. prefix的值 /mmc1_
    1. ${prefix}${boot_syslinux_conf} -> /mmc1_extlinux/stm32mp135d-aaron_extlinux.conf
if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf}; thenecho Found ${prefix}${boot_syslinux_conf}run boot_extlinuxecho SCRIPT FAILED: continuing...
fi

8. boot_extlinux 准备启动

scan_m4fw
scan_overlays

run scan_m4fw;
run scan_overlays;
sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf}

9. sysboot 启动内核

sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf}

二、direct boot cmd 手动配置直接启动

prefix=/mmc1_
devtype=mmc
devnum=1
distro_bootpart=4
scriptaddr=0xc4100000
boot_syslinux_conf=extlinux/stm32mp135d-aaron_extlinux.conf

确定所有配置后,直接运行:

sysboot mmc 1:4 any 0xc4100000 /mmc1_extlinux/stm32mp135d-aaron_extlinux.conf

三、other cmd 其他辅助命令

1. read config 读取

ext4load mmc 1:4 c4100000 /mmc1_extlinux/stm32mp135d-aaron_extlinux.confmd c4100000
md.b c4100000 288

2. env_check 环境检查

env_check 的作用是在引导过程中检查环境变量是否被修改,并在需要时将其保存到持久存储中,以确保修改的环境变量在下次引导时仍然有效
-p: 显示环境变量的名称和值。
-d: 显示默认环境变量的名称和值。
-q: 静默模式,即不显示不必要的信息。

if env info -p -d -q; then env save; fi

3. scan_m4fw 检查是否有M4 固件

    1. 扫描设备上是否存在 M4 固件(Firmware)
if test -e ${devtype} ${devnum}:${distro_bootpart} ${m4fw_name}; thenecho Found M4 FW $m4fw_nameif load ${devtype} ${devnum}:${distro_bootpart} ${m4fw_addr} ${m4fw_name}; thenrun boot_m4fwfi
fi

4. scan_overlays 检查 overlays 配置文件

    1. 设置配置文件
iftest -e ${devtype} ${devnum}:${distro_bootpart} /overlays/overlays.txt && load ${devtype} ${devnum}:${distro_bootpart} ${loadaddr} /overlays/overlays.txt && env import -t ${loadaddr} ${filesize}
thenecho loaded overlay.txt: ${overlay}run ov_initrun ov_apply
fi

能力一般,水平有限,知识浅薄,如果能帮到您,那我感到很荣幸

这篇关于stm32mp135d u-boot 引导流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/951946

相关文章

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热