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

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

RabbitMQ使用及与spring boot整合

1.MQ   消息队列(Message Queue,简称MQ)——应用程序和应用程序之间的通信方法   应用:不同进程Process/线程Thread之间通信   比较流行的中间件:     ActiveMQ     RabbitMQ(非常重量级,更适合于企业级的开发)     Kafka(高吞吐量的分布式发布订阅消息系统)     RocketMQ   在高并发、可靠性、成熟度等

Spring Boot 入门篇

一、简介 Spring Boot是一款开源的Java Web应用框架,旨在简化Spring应用的初始搭建以及开发过程。它整合了Spring技术栈中的诸多关键组件,为开发者提供了一种快速、简便的Spring应用开发方式。Spring Boot遵循“约定优于配置”的原则,通过自动配置、起步依赖和内置的Servlet容器,极大地简化了传统Spring应用的配置和部署过程。 二、Spring Boot

火语言RPA流程组件介绍--浏览网页

🚩【组件功能】:浏览器打开指定网址或本地html文件 配置预览 配置说明 网址URL 支持T或# 默认FLOW输入项 输入需要打开的网址URL 超时时间 支持T或# 打开网页超时时间 执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待的时间 UserAgent 支持T或# User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器

Spring Boot集成Tess4J实现OCR

1.什么是Tess4j? Tesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文字转换为计算机可读的文本。支持多种语言和书面语言,并且可以在命令行中执行。它是一个流行的开源OCR工具,可以在许多不同的操作系统上运行。Tess4J是一个基于Tesseract OCR引擎的Java接口,可以用来识别图像中的文本,说白了,就是封装了它的API,让Java可以直接调用。 Tess

部署若依Spring boot项目

nohup和& nohup命令解释 nohup命令:nohup 是 no hang up 的缩写,就是不挂断的意思,但没有后台运行,终端不能标准输入。nohup :不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,注意了nohup没有后台运行的意思;&才是后台运行在缺省情况下该作业的所有输出都被重定向到一个名为nohup.o

使用Spring Boot集成Spring Data JPA和单例模式构建库存管理系统

引言 在企业级应用开发中,数据库操作是非常重要的一环。Spring Data JPA提供了一种简化的方式来进行数据库交互,它使得开发者无需编写复杂的JPA代码就可以完成常见的CRUD操作。此外,设计模式如单例模式可以帮助我们更好地管理和控制对象的创建过程,从而提高系统的性能和可维护性。本文将展示如何结合Spring Boot、Spring Data JPA以及单例模式来构建一个基本的库存管理系统

Spring Boot集成PDFBox实现电子签章

概述 随着无纸化办公的普及,电子文档的使用越来越广泛。电子签章作为一种有效的身份验证方式,在很多场景下替代了传统的纸质文件签名。Apache PDFBox 是一个开源的Java库,可以用来渲染、生成、填写PDF文档等操作。本文将介绍如何使用Spring Boot框架结合PDFBox来实现电子签章功能。 准备工作 环境搭建:确保你的开发环境中安装了JDK 8或更高版本,并且配置好了Maven或