linuxOS_D21X/doc/topics/sdk/boot/spl-boot-procedure.html
2025-01-23 16:35:08 +08:00

355 lines
42 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn" lang="zh-cn" data-whc_version="27.0">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="description" content="理解 SPL 的启动流程,关键是设备树,设备驱动模型。关于设备树,请查看设备树相关章节,设备驱动模型的介绍如下: uboot 设备驱动框架模型 uclass &lt;&gt; uclass_driver &lt;&gt; udevice &lt;&gt; driver &lt;&gt; hardware uclass 表示管理某一个类别下的所有 device; uclass_driver 表示对应 uclass 的 ops 集合。 ..."/><meta name="DC.rights.owner" content="(C) 版权 2025"/><meta name="copyright" content="(C) 版权 2025"/><meta name="generator" content="DITA-OT"/><meta name="DC.type" content="concept"/><meta name="DC.relation" content="../../../topics/sdk/boot/spl-program-stage.html"/><meta name="DC.relation" content="../../../topics/sdk/boot/uboot-riscv-spl.html"/><meta name="DC.relation" content="../../../topics/sdk/boot/load-mmc.html"/><meta name="DC.contributor" content="yan.wang"/><meta name="DC.contributor" content="yan.wang"/><meta name="DC.date.modified" content="2024-01-15"/><meta name="DC.format" content="HTML5"/><meta name="DC.identifier" content="_66"/><meta name="DC.language" content="zh-CN"/><title>启动流程</title><!-- Generated with build number 2024112209. --><meta name="wh-path2root" content="../../../"/><meta name="wh-toc-id" content="_66-d4445e2313"/><meta name="wh-source-relpath" content="topics/sdk/boot/spl-boot-procedure.dita"/><meta name="wh-out-relpath" content="topics/sdk/boot/spl-boot-procedure.html"/>
<link rel="stylesheet" type="text/css" href="../../../webhelp/app/commons.css?buildId=2024112209"/>
<link rel="stylesheet" type="text/css" href="../../../webhelp/app/topic.css?buildId=2024112209"/>
<script src="../../../webhelp/app/options/properties.js?buildId=20250123154945"></script>
<script src="../../../webhelp/app/localization/strings.js?buildId=2024112209"></script>
<script src="../../../webhelp/app/search/index/keywords.js?buildId=20250123154945"></script>
<script defer="defer" src="../../../webhelp/app/commons.js?buildId=2024112209"></script>
<script defer="defer" src="../../../webhelp/app/topic.js?buildId=2024112209"></script>
<link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-styles-web.css?buildId=2024112209"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/notes.css?buildId=2024112209"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-common.css?buildId=2024112209"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-images.css?buildId=2024112209"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/footnote.css?buildId=2024112209"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-web-watermark.css?buildId=2024112209"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/topic-body-list.css?buildId=2024112209"/></head>
<body id="_66" class="wh_topic_page frmBody">
<a href="#wh_topic_body" class="sr-only sr-only-focusable">
跳转到主要内容
</a>
<header class="navbar navbar-default wh_header">
<div class="container-fluid">
<div class="wh_header_flex_container navbar-nav navbar-expand-md navbar-dark">
<div class="wh_logo_and_publication_title_container">
<div class="wh_logo_and_publication_title">
<a href="http://www.artinchip.com" class=" wh_logo d-none d-sm-block "><img src="../../../company-logo-white.png" alt=" Linux SDK 使用指南 SDK 指南文件 "/></a>
<div class=" wh_publication_title "><a href="../../../index.html"><span class="booktitle"> <span class="ph mainbooktitle">Linux SDK 使用指南</span> <span class="ph booktitlealt">SDK 指南文件</span> </span></a></div>
</div>
</div>
<div class="wh_top_menu_and_indexterms_link collapse navbar-collapse" id="wh_top_menu_and_indexterms_link">
</div>
</div>
</div>
</header>
<div class=" wh_search_input navbar-form wh_topic_page_search search " role="form">
<form id="searchForm" method="get" role="search" action="../../../search.html"><div><input type="search" placeholder="搜索 " class="wh_search_textfield" id="textToSearch" name="searchQuery" aria-label="搜索查询" required="required"/><button type="submit" class="wh_search_button" aria-label="搜索"><span class="search_input_text">搜索</span></button></div></form>
</div>
<div class="container-fluid" id="wh_topic_container">
<div class="row">
<nav class="wh_tools d-print-none navbar-expand-md" aria-label="Tools">
<div data-tooltip-position="bottom" class=" wh_breadcrumb "><ol class="d-print-none"><li><span class="home"><a href="../../../index.html"><span>主页</span></a></span></li><li><div class="topicref" data-id="id"><div class="title"><a href="../../../topics/sdk/chapter-advanced-app.html">高级应用</a><div class="wh-tooltip"><p class="shortdesc">系统、存储、多媒体、接口、安全等模块的详细配置和设计说明。</p></div></div></div></li><li><div class="topicref" data-id="uBoot"><div class="title"><a href="../../../topics/sdk/boot/uboot-module.html">U-Boot</a><div class="wh-tooltip"><p class="shortdesc">启动支持的基本功能以及运行时的基本硬件环境。</p></div></div></div></li><li><div class="topicref" data-id="spl"><div class="title"><a href="../../../topics/sdk/boot/spl-program-stage.html">SPL 阶段</a></div></div></li><li class="active"><div class="topicref" data-id="_66"><div class="title"><a href="../../../topics/sdk/boot/spl-boot-procedure.html">启动流程</a></div></div></li></ol></div>
<div class="wh_right_tools">
<button class="wh_hide_highlight" aria-label="切换搜索突出显示" title="切换搜索突出显示"></button>
<button class="webhelp_expand_collapse_sections" data-next-state="collapsed" aria-label="折叠截面" title="折叠截面"></button>
<div class=" wh_navigation_links "><span id="topic_navigation_links" class="navheader">
<span class="navprev"><a class="- topic/link link" href="../../../topics/sdk/boot/uboot-riscv-spl.html" title="RISCV SPL" aria-label="上一主题: RISCV SPL" rel="prev"></a></span>
<span class="navnext"><a class="- topic/link link" href="../../../topics/sdk/boot/load-mmc.html" title="MMC 加载" aria-label="下一主题: MMC 加载" rel="next"></a></span> </span></div>
<div class=" wh_print_link print d-none d-md-inline-block "><button onClick="window.print()" title="打印此页" aria-label="打印此页"></button></div>
<button type="button" id="wh_toc_button" class="custom-toggler navbar-toggler collapsed wh_toggle_button navbar-light" aria-expanded="false" aria-label="Toggle publishing table of content" aria-controls="wh_publication_toc">
<span class="navbar-toggler-icon"></span>
</button>
</div>
</nav>
</div>
<div class="wh_content_area">
<div class="row">
<nav id="wh_publication_toc" class="col-lg-3 col-md-3 col-sm-12 d-md-block d-none d-print-none" aria-label="Table of Contents Container">
<div id="wh_publication_toc_content">
<div class=" wh_publication_toc " data-tooltip-position="right"><span class="expand-button-action-labels"><span id="button-expand-action" role="button" aria-label="Expand"></span><span id="button-collapse-action" role="button" aria-label="Collapse"></span><span id="button-pending-action" role="button" aria-label="Pending"></span></span><ul role="tree" aria-label="Table of Contents"><li role="treeitem"><div data-tocid="revinfo_linux-d4445e1079" class="topicref" data-id="revinfo_linux" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/revinfo/revinfo_linux.html" id="revinfo_linux-d4445e1079-link">修订记录</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d4445e1096" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d4445e1096-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/env/sdk-compile.html" id="id-d4445e1096-link">SDK 编译</a><div class="wh-tooltip"><p class="shortdesc">介绍不同编译环境下 SDK 的详细编译流程。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="tocId-d4445e1240" class="topicref" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action tocId-d4445e1240-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/lb_usage_commands.html" id="tocId-d4445e1240-link">使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_rcx_czh_pzb-d4445e1360" class="topicref" data-id="concept_rcx_czh_pzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_rcx_czh_pzb-d4445e1360-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/chapter-app.html" id="concept_rcx_czh_pzb-d4445e1360-link">应用场景</a><div class="wh-tooltip"><p class="shortdesc">描述了 SDK 在不同应用场景中的配置和使用包括系统更新、OTA、安全方案等。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d4445e1678" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d4445e1678-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/peripheral/peripheral-intro.html" id="id-d4445e1678-link">外设移植</a><div class="wh-tooltip"><p class="shortdesc"><span class="ph">触摸屏、显示器、WIFI 模块、按键</span>等外设的介绍和使用说明。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d4445e1964" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d4445e1964-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/bringup/chapter-bringup.html" id="id-d4445e1964-link">BringUp</a><div class="wh-tooltip"><p class="shortdesc">在硬件上电后快速初始化系统,为操作系统的启动准备好必要的硬件环境。</p></div></div></div></li><li role="treeitem" aria-expanded="true"><div data-tocid="id-d4445e2153" class="topicref" data-id="id" data-state="expanded"><span role="button" tabindex="0" aria-labelledby="button-collapse-action id-d4445e2153-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/chapter-advanced-app.html" id="id-d4445e2153-link">高级应用</a><div class="wh-tooltip"><p class="shortdesc">系统、存储、多媒体、接口、安全等模块的详细配置和设计说明。</p></div></div></div><ul role="group" class="navbar-nav nav-list"><li role="treeitem" aria-expanded="true"><div data-tocid="uBoot-d4445e2170" class="topicref" data-id="uBoot" data-state="expanded"><span role="button" tabindex="0" aria-labelledby="button-collapse-action uBoot-d4445e2170-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/uboot-module.html" id="uBoot-d4445e2170-link">U-Boot</a><div class="wh-tooltip"><p class="shortdesc">启动支持的基本功能以及运行时的基本硬件环境。</p></div></div></div><ul role="group" class="navbar-nav nav-list"><li role="treeitem"><div data-tocid="_65-d4445e2187" class="topicref" data-id="_65" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/uboot-hardware-env.html" id="_65-d4445e2187-link">硬件运行环境</a></div></div></li><li role="treeitem"><div data-tocid="_1601-d4445e2201" class="topicref" data-id="_1601" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/uboot-parameter.html" id="_1601-d4445e2201-link">启动参数</a></div></div></li><li role="treeitem"><div data-tocid="_1601_0-d4445e2215" class="topicref" data-id="_1601_0" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/boot-memory.html" id="_1601_0-d4445e2215-link">内存相关</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_lbx_3n3_pzb-d4445e2229" class="topicref" data-id="concept_lbx_3n3_pzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_lbx_3n3_pzb-d4445e2229-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/environment-variables.html" id="concept_lbx_3n3_pzb-d4445e2229-link">环境变量</a></div></div></li><li role="treeitem"><div data-tocid="dts-d4445e2271" class="topicref" data-id="dts" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/uboot-dts.html" id="dts-d4445e2271-link">DTS</a></div></div></li><li role="treeitem" aria-expanded="true"><div data-tocid="spl-d4445e2285" class="topicref" data-id="spl" data-state="expanded"><span role="button" tabindex="0" aria-labelledby="button-collapse-action spl-d4445e2285-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/spl-program-stage.html" id="spl-d4445e2285-link">SPL 阶段</a></div></div><ul role="group" class="navbar-nav nav-list"><li role="treeitem"><div data-tocid="riscvSpl-d4445e2299" class="topicref" data-id="riscvSpl" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/uboot-riscv-spl.html" id="riscvSpl-d4445e2299-link">RISCV SPL</a></div></div></li><li role="treeitem" class="active"><div data-tocid="_66-d4445e2313" class="topicref" data-id="_66" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/spl-boot-procedure.html" id="_66-d4445e2313-link">启动流程</a></div></div></li><li role="treeitem"><div data-tocid="mmc-d4445e2327" class="topicref" data-id="mmc" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/load-mmc.html" id="mmc-d4445e2327-link">MMC 加载</a></div></div></li><li role="treeitem"><div data-tocid="concept_nsb_pj3_pzb-d4445e2341" class="topicref" data-id="concept_nsb_pj3_pzb" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/load-spiNand.html" id="concept_nsb_pj3_pzb-d4445e2341-link">SPI NAND 加载</a></div></div></li><li role="treeitem"><div data-tocid="concept_dhz_pj3_pzb-d4445e2355" class="topicref" data-id="concept_dhz_pj3_pzb" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/load-spiNor.html" id="concept_dhz_pj3_pzb-d4445e2355-link">SPI NOR 加载</a></div></div></li><li role="treeitem"><div data-tocid="sdfat32-d4445e2369" class="topicref" data-id="sdfat32" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/load-SDFAT32.html" id="sdfat32-d4445e2369-link">SDFAT32 加载</a></div></div></li><li role="treeitem"><div data-tocid="concept_lx3_tn3_pzb-d4445e2383" class="topicref" data-id="concept_lx3_tn3_pzb" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/signature-verify.html" id="concept_lx3_tn3_pzb-d4445e2383-link">签名校验</a></div></div></li><li role="treeitem"><div data-tocid="back_to_brom-d4445e2397" class="topicref" data-id="back_to_brom" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/back-to-brom.html" id="back_to_brom-d4445e2397-link">返回 BROM</a></div></div></li></ul></li><li role="treeitem" aria-expanded="false"><div data-tocid="uBoot_0-d4445e2411" class="topicref" data-id="uBoot_0" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action uBoot_0-d4445e2411-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/uboot-stage.html" id="uBoot_0-d4445e2411-link">U-Boot 阶段</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_q5s_jn3_pzb-d4445e2495" class="topicref" data-id="concept_q5s_jn3_pzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_q5s_jn3_pzb-d4445e2495-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/uboot-driver-support.html" id="concept_q5s_jn3_pzb-d4445e2495-link">驱动支持</a></div></div></li><li role="treeitem"><div data-tocid="concept_l2d_xk3_pzb-d4445e2607" class="topicref" data-id="concept_l2d_xk3_pzb" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/uboot-partition-config.html" id="concept_l2d_xk3_pzb-d4445e2607-link">配置启动分区</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_afz_xk3_pzb-d4445e2621" class="topicref" data-id="concept_afz_xk3_pzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_afz_xk3_pzb-d4445e2621-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/uboot-core.html" id="concept_afz_xk3_pzb-d4445e2621-link">启动内核</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_uzy_yk3_pzb-d4445e2692" class="topicref" data-id="concept_uzy_yk3_pzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_uzy_yk3_pzb-d4445e2692-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/bundle-images.html" id="concept_uzy_yk3_pzb-d4445e2692-link">打包镜像</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_yfv_1l3_pzb-d4445e2832" class="topicref" data-id="concept_yfv_1l3_pzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_yfv_1l3_pzb-d4445e2832-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/uboot-chapter-image-burn.html" id="concept_yfv_1l3_pzb-d4445e2832-link">镜像烧录</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="userid-d4445e2888" class="topicref" data-id="userid" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action userid-d4445e2888-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/userid-burn.html" id="userid-d4445e2888-link">UserID 烧录</a></div></div></li><li role="treeitem"><div data-tocid="concept_azt_bl3_pzb-d4445e2944" class="topicref" data-id="concept_azt_bl3_pzb" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/logo-display.html" id="concept_azt_bl3_pzb-d4445e2944-link">图像显示</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="_1601_1-d4445e2958" class="topicref" data-id="_1601_1" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action _1601_1-d4445e2958-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/debug-configuration.html" id="_1601_1-d4445e2958-link">调试配置</a></div></div></li><li role="treeitem"><div data-tocid="opensbi-d4445e3000" class="topicref" data-id="opensbi" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/opensbi.html" id="opensbi-d4445e3000-link">OpenSBI</a></div></div></li><li role="treeitem"><div data-tocid="pbp-d4445e3014" class="topicref" data-id="pbp" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/pre-boot-program.html" id="pbp-d4445e3014-link">Pre-Boot Program (PBP)</a></div></div></li></ul></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_mtx_tk3_pzb-d4445e3028" class="topicref" data-id="concept_mtx_tk3_pzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_mtx_tk3_pzb-d4445e3028-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/linux/chapter_linux.html" id="concept_mtx_tk3_pzb-d4445e3028-link">Linux</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="chapter-system-d4445e3198" class="topicref" data-id="chapter-system" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action chapter-system-d4445e3198-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/chapter-title/chapter-system.html" id="chapter-system-d4445e3198-link">系统</a><div class="wh-tooltip"><p class="shortdesc"></p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="chapter-memory-d4445e4054" class="topicref" data-id="chapter-memory" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action chapter-memory-d4445e4054-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/chapter-title/chapter-memory-sdk.html" id="chapter-memory-d4445e4054-link">存储</a><div class="wh-tooltip"><p class="shortdesc">SDMC、SPI NAND、SPI NOR 等存储模块的介绍和使用说明。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_mcc_32s_nbc-d4445e4438" class="topicref" data-id="concept_mcc_32s_nbc" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_mcc_32s_nbc-d4445e4438-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/chapter-title/chapter-multi-media-sdk.html" id="concept_mcc_32s_nbc-d4445e4438-link">多媒体</a><div class="wh-tooltip"><p class="shortdesc">GE、VE、Display、DVP、MPP、MPP 播放器等多媒体模块的介绍和使用说明。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_nww_hzh_pzb-d4445e5947" class="topicref" data-id="concept_nww_hzh_pzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_nww_hzh_pzb-d4445e5947-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/chapter-title/chapter-interface-sdk.html" id="concept_nww_hzh_pzb-d4445e5947-link">接口</a><div class="wh-tooltip"><p class="shortdesc">CAN、CIR、GPAI、GPIO、I2C、PSADC、PWM 等接口模块的介绍和使用说明。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="chapter-safety-d4445e7944" class="topicref" data-id="chapter-safety" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action chapter-safety-d4445e7944-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/chapter-title/chapter-safety-sdk.html" id="chapter-safety-d4445e7944-link">安全</a><div class="wh-tooltip"><p class="shortdesc">SPI ENC、CE、eFuse 等安全模块的介绍和使用说明。</p></div></div></div></li></ul></li></ul></div>
</div>
</nav>
<div class="col-lg-7 col-md-9 col-sm-12" id="wh_topic_body">
<button id="wh_close_publication_toc_button" class="close-toc-button d-none" aria-label="Toggle publishing table of content" aria-controls="wh_publication_toc" aria-expanded="true">
<span class="close-toc-icon-container">
<span class="close-toc-icon"></span>
</span>
</button>
<button id="wh_close_topic_toc_button" class="close-toc-button d-none" aria-label="Toggle topic table of content" aria-controls="wh_topic_toc" aria-expanded="true">
<span class="close-toc-icon-container">
<span class="close-toc-icon"></span>
</span>
</button>
<div class=" wh_topic_content body "><main role="main"><article class="- topic/topic concept/concept topic concept" role="article" aria-labelledby="ariaid-title1">
<span class="edit-link" style="font-size:12px; opacity:0.6; text-align:right; vertical-align:middle"><a target="_blank" title="Edit this document" href="http://172.16.35.88/tasks/jdssno1uvvbf2mltu9kb9v3if05d5gopuakboe8hlud18rma/edit/F:/aicdita/aicdita-cn/topics/sdk/boot/spl-boot-procedure.dita">Edit online</a></span><h1 class="- topic/title title topictitle1" id="ariaid-title1">启动流程</h1>
<div class="date inPage">15 Jan 2024</div><div style="color: gray;">
Read time: 7 minute(s)
</div>
<div class="- topic/body concept/conbody body conbody">
<p class="- topic/p p" data-ofbid="d77036e33__20250123155205">理解 SPL 的启动流程,关键是设备树,设备驱动模型。关于设备树,请查看设备树相关章节,设备驱动模型的介绍如下:</p>
<section class="- topic/section section" id="_66__section_nbj_l1h_bzb" data-ofbid="_66__section_nbj_l1h_bzb"><h2 class="- topic/title title sectiontitle">uboot 设备驱动框架模型</h2>
<p class="- topic/p p" data-ofbid="d77036e41__20250123155205">uclass &lt;&gt; uclass_driver &lt;&gt; udevice &lt;&gt; driver &lt;&gt; hardware</p>
<p class="- topic/p p" data-ofbid="d77036e44__20250123155205">uclass 表示管理某一个类别下的所有 device;</p>
<p class="- topic/p p" data-ofbid="d77036e47__20250123155205">uclass_driver 表示对应 uclass 的 ops 集合。</p>
</section>
<section class="- topic/section section" id="_66__section_lcv_n1h_bzb" data-ofbid="_66__section_lcv_n1h_bzb"><h2 class="- topic/title title sectiontitle">uboot 设备驱动框架搭建的过程</h2>
<div class="- topic/p p" data-ofbid="d77036e56__20250123155205">
<ol class="- topic/ol ol" id="_66__ol_qbj_l1h_bzb" data-ofbid="_66__ol_qbj_l1h_bzb">
<li class="- topic/li li" data-ofbid="d77036e60__20250123155205">
<p class="- topic/p p" data-ofbid="d77036e62__20250123155205">创建 udevice</p>
</li>
<li class="- topic/li li" data-ofbid="d77036e66__20250123155205">
<p class="- topic/p p" data-ofbid="d77036e68__20250123155205">应用 uclass 如果没有则匹配生成 uclass</p>
</li>
<li class="- topic/li li" data-ofbid="d77036e72__20250123155205">
<p class="- topic/p p" data-ofbid="d77036e74__20250123155205">udevice 和 uclass 绑定</p>
</li>
<li class="- topic/li li" data-ofbid="d77036e78__20250123155205">
<p class="- topic/p p" data-ofbid="d77036e80__20250123155205">uclass_driver 和 uclass 绑定</p>
</li>
<li class="- topic/li li" data-ofbid="d77036e84__20250123155205">
<p class="- topic/p p" data-ofbid="d77036e86__20250123155205">driver 和 udevice 绑定</p>
</li>
<li class="- topic/li li" data-ofbid="d77036e91__20250123155205">
<p class="- topic/p p" data-ofbid="d77036e93__20250123155205">device_probe 执行,会触发 driver 调用 driver 函数</p>
</li>
</ol>
</div>
</section>
<section class="- topic/section section" id="_66__section_cmv_41h_bzb" data-ofbid="_66__section_cmv_41h_bzb"><h2 class="- topic/title title sectiontitle">SPL RISCV 的启动整体流程</h2>
<div class="- topic/p p" data-ofbid="d77036e105__20250123155205">
<pre class="+ topic/pre pr-d/codeblock pre codeblock language-c" id="_66__codeblock_lmt_hlr_c1c" data-ofbid="_66__codeblock_lmt_hlr_c1c"><code>_start <em class="hl-comment">// arch/riscv/cpu/start.S</em>
|-&gt; save_boot_params <em class="hl-comment">// arch/riscv/mach-artinchip/lowlevel_init.S</em>
| <em class="hl-comment">// BROM 跳转到 SPL 执行的时候,传递了一些参数,这里首先需要将这些参数保存起来</em>
|
|-&gt; csrw MODE_PREFIX(ie), zero <em class="hl-comment">// Disable irq</em>
|-&gt; li t1, CONFIG_SPL_STACK <em class="hl-comment">// 设置 sp 寄存器</em>
|-&gt; jal board_init_f_alloc_reserve <em class="hl-comment">// common/init/board_init.c</em>
| <em class="hl-comment">// 预留初始 HEAP 的空间</em>
| <em class="hl-comment">// 预留 GD 全局变量的空间</em>
|
|-&gt; jal board_init_f_init_reserve
| <em class="hl-comment">// common/init/board_init.c, init gd area</em>
| <em class="hl-comment">// 此时 gd 在 SPL STACK 中。</em>
|
|-&gt; jal icache_enable <em class="hl-comment">// arch/riscv/cpu/c906/cache.c 使能指令高速缓存</em>
|-&gt; jal dcache_enable <em class="hl-comment">// 使能数据高速缓存</em>
|
|-&gt; jal debug_uart_init <em class="hl-comment">// drivers/serial/ns16550.c</em>
| <em class="hl-comment">// 初始化调试串口,如果使能</em>
|
|-&gt; board_init_f <em class="hl-comment">// arch/riscv/lib/spl.c</em>
| |-&gt; spl_early_init() <em class="hl-comment">// common/spl/spl.c</em>
| |-&gt; spl_common_init(setup_malloc = true) <em class="hl-comment">// common/spl/spl.c</em>
| |-&gt; fdtdec_setup(); <em class="hl-comment">// lib/fdtdec.c 获取 dtb 的地址,并验证合法性</em>
| | <em class="hl-comment">// 只对带有“u-boot,dm-pre-reloc”属性节点进行解析初始化驱动模型的根节点扫描设备树创建 udevice,uclass</em>
| |-&gt; dm_init_and_scan(!CONFIG_IS_ENABLED(OF_PLATDATA)); <em class="hl-comment">// drivers/core/root.c</em>
| |-&gt; dm_init(); <em class="hl-comment">// driver model, initiate virtual root driver</em>
| | |-&gt; INIT_LIST_HEAD(DM_UCLASS_ROOT_NON_CONST); <em class="hl-comment">// 初始化 uclass 链表</em>
| | |-&gt; device_bind_by_name()
| | | | <em class="hl-comment">// drivers/core/device.c</em>
| | | | <em class="hl-comment">// 加载"root_driver"name, gd-&gt;dm_root</em>
| | | |-&gt; lists_driver_lookup_name()
| | | | |-&gt; ll_entry_start(<strong class="hl-keyword">struct</strong> driver, driver); <em class="hl-comment">// 获取 table 起始位置</em>
| | | | |-&gt; ll_entry_count(<strong class="hl-keyword">struct</strong> driver, driver); <em class="hl-comment">// 获取 table 长度</em>
| | | | <em class="hl-comment">// drivers/core/lists.c</em>
| | | | <em class="hl-comment">// 采用 U_BOOT_DRIVER(name) 声明的 driver从 table 中获取 struct driver 数据</em>
| | | |
| | | | <em class="hl-comment">// 初始化 udevice 与对应的 uclass,driver 绑定</em>
| | | |-&gt; device_bind_common(); <em class="hl-comment">// drivers/core/device.c</em>
| | | |-&gt; uclass_get(&amp;uc)
| | | | |-&gt; uclass_find(id); <em class="hl-comment">// 判断对应的 uclass 是否存在</em>
| | | | |-&gt; uclass_add(id, ucp); <em class="hl-comment">// 如果不存在就创建</em>
| | | | |-&gt; lists_uclass_lookup(id); <em class="hl-comment">// 获取 driver 结构体数据</em>
| | | |-&gt; uclass_bind_device(dev) <em class="hl-comment">// uclass 绑定 udevice drivers/core/uclass.c</em>
| | | |-&gt; drv-&gt;bind(dev) <em class="hl-comment">// driver 绑定 udevice</em>
| | | |-&gt; parent-&gt;driver-&gt;child_post_bind(dev)
| | | |-&gt; uc-&gt;uc_drv-&gt;post_bind(dev)
| | |
| | |-&gt; device_probe(gd-&gt;dm_root) <em class="hl-comment">// drivers/core/device.c</em>
| | |-&gt; uclass_resolve_seq(dev) <em class="hl-comment">// 通过 dtb 解析获得设备差异数据</em>
| | |-&gt; uclass_pre_probe_device(dev); <em class="hl-comment">// probe 前操作</em>
| | |-&gt; drv-&gt;probe(dev); <em class="hl-comment">// 执行 driver 的 probe 操作</em>
| | |-&gt; uclass_post_probe_device(dev); <em class="hl-comment">// probe 后操作</em>
| |
| |-&gt; dm_scan(pre_reloc_only);
| | <em class="hl-comment">// 扫描和绑定由 U_BOOT_DEVICE 声明的驱动。</em>
| | <em class="hl-comment">// 一般用在 SPL OF_PLATDATA 的情况</em>
| |-&gt; dm_scan_plat(pre_reloc_only);
| | |-&gt; lists_bind_drivers(DM_ROOT_NON_CONST, pre_reloc_only);
| | |-&gt; bind_drivers_pass(parent, pre_reloc_only);
| | |-&gt; device_bind_by_name();
| |
| |-&gt; dm_extended_scan(pre_reloc_only);
| | |-&gt; dm_scan_fdt(pre_reloc_only); <em class="hl-comment">// 扫描设备树并与设备驱动建立联系</em>
| | | |-&gt; dm_scan_fdt_node(gd-&gt;dm_root, ofnode_root(), pre_reloc_only); <em class="hl-comment">//扫描设备树并绑定 root 节点下的设备</em>
| | | |-&gt; ofnode_first_subnode(parent_node) <em class="hl-comment">// 获取设备树的第一个子节点</em>
| | | |-&gt; ofnode_next_subnode(node) <em class="hl-comment">// 遍历所有的子节点</em>
| | | |-&gt; ofnode_is_enabled(node) <em class="hl-comment">// 判断设备树的子节点是否使能</em>
| | | |-&gt; lists_bind_fdt(parent, node, NULL, pre_reloc_only); <em class="hl-comment">// 绑定设备树节点,创建新的 udevicd drivers/core/lists.c</em>
| | | |-&gt; ofnode_get_property(node, <span class="hl-string">"compatible"</span>, &amp;compat_length); <em class="hl-comment">// 获取 compatible</em>
| | | |-&gt; driver_check_compatible() <em class="hl-comment">// 和 driver 比较 compatible 值</em>
| | | |-&gt; device_bind_with_driver_data() <em class="hl-comment">// 创建一个设备并绑定到 driver drivers/core/device.c</em>
| | | |-&gt; device_bind_common() <em class="hl-comment">// 创建初始化 udevice 与对应的 uclass,driver 绑定</em>
| | |
| | | <em class="hl-comment">// /chosen /clocks /firmware 一些节点本身不是设备,但包含一些设备,遍历其包含的设备</em>
| | |-&gt; dm_scan_fdt_ofnode_path(nodes[i], pre_reloc_only);
| | |-&gt; ofnode_path(path); <em class="hl-comment">// 找到节点下包含的设备</em>
| | |-&gt; dm_scan_fdt_node(gd-&gt;dm_root, node, pre_reloc_only);
| |
| |-&gt; dm_scan_other(pre_reloc_only);
| | <em class="hl-comment">// 扫描使用者自定义的节点 nothing</em>
|
|-&gt; spl_clear_bss <em class="hl-comment">// arch/riscv/cpu/start.S</em>
|-&gt; spl_relocate_stack_gd <em class="hl-comment">// 切换 stack 和 gd 到 dram 空间</em>
|-&gt; board_init_r() <em class="hl-comment">// common/spl/spl.c</em>
|-&gt; spl_set_bd() <em class="hl-comment">// board data info</em>
| <em class="hl-comment">// 设置完 bd 之后,才能 enable d-cache</em>
|-&gt; mem_malloc_init()
| <em class="hl-comment">// init heap</em>
| <em class="hl-comment">// - CONFIG_SYS_SPL_MALLOC_START</em>
| <em class="hl-comment">// - CONFIG_SYS_SPL_MALLOC_SIZE&gt;</em>
|
|-&gt; spl_init
| |-&gt; spl_common_init
| <em class="hl-comment">// 由于前面已经调用了 spl_early_init,</em>
| <em class="hl-comment">// 这里不再调用 spl_common_init</em>
|
|-&gt; timer_init(); <em class="hl-comment">// lib/time.c nothing</em>
|-&gt; spl_board_init(); <em class="hl-comment">// arch/riscv/mach-artinchip/spl.c nothing</em>
|
|-&gt; initr_watchdog <em class="hl-comment">// enable watchdog如果使能</em>
|-&gt; dram_init_banksize(); <em class="hl-comment">// 如果使能</em>
|-&gt; board_boot_order() <em class="hl-comment">// common/spl/spl.c</em>
| |-&gt; spl_boot_device(); <em class="hl-comment">// arch/riscv/mach-artinchip/spl.c</em>
| |-&gt; aic_get_boot_device(); <em class="hl-comment">// arch/riscv/mach-artinchip/boot_param.c</em>
| <em class="hl-comment">// 从 boot param 中获取启动介质信息</em>
|
|-&gt; boot_from_devices(spl_boot_list)
| |-&gt; spl_ll_find_loader() <em class="hl-comment">// 根据 device 找到 spl_load_image 指针</em>
| | <em class="hl-comment">// 这里可能是各种介质的 load image 函数</em>
| | <em class="hl-comment">// SPL_LOAD_IMAGE_METHOD() 定义的 Loader</em>
| | <em class="hl-comment">// 可能是 MMC/SPI/BROM/...</em>
| |
| |-&gt; spl_load_image <em class="hl-comment">// 以 emmc 启动为例</em>
| |-&gt; spl_mmc_load_image <em class="hl-comment">// common/spl/spl_mmc.c</em>
| |-&gt; spl_mmc_load <em class="hl-comment">// 具体可看后面的流程</em>
|
|-&gt; spl_perform_fixups <em class="hl-comment">// vendor hook用于修改 tree 传递参数</em>
|-&gt; spl_board_prepare_for_boot <em class="hl-comment">// vendor hook, 可不实现</em>
|-&gt; jump_to_image_no_args <em class="hl-comment">// 跳转到 boot 执行</em></code></pre>
</div>
</section>
</div>
</article></main></div>
</div>
<nav role="navigation" id="wh_topic_toc" aria-label="On this page" class="col-lg-2 d-none d-lg-block navbar d-print-none">
<div id="wh_topic_toc_content">
<div class=" wh_topic_toc "><div class="wh_topic_label">在本页上</div><ul><li class="section-item"><div class="section-title"><a href="#_66__section_nbj_l1h_bzb" data-tocid="_66__section_nbj_l1h_bzb">uboot 设备驱动框架模型</a></div></li><li class="section-item"><div class="section-title"><a href="#_66__section_lcv_n1h_bzb" data-tocid="_66__section_lcv_n1h_bzb">uboot 设备驱动框架搭建的过程</a></div></li><li class="section-item"><div class="section-title"><a href="#_66__section_cmv_41h_bzb" data-tocid="_66__section_cmv_41h_bzb">SPL RISCV 的启动整体流程</a></div></li></ul></div>
</div>
</nav>
</div>
</div>
</div>
<footer class="navbar navbar-default wh_footer">
<div class=" footer-container mx-auto ">
<title>footer def</title>
<style><!--
.p1 {
font-family: FangZhengShuSong, Times, serif;
}
.p2 {
font-family: Arial, Helvetica, sans-serif;
}
.p3 {
font-family: "Lucida Console", "Courier New", monospace;
}
--></style>
<div class="webhelp.fragment.footer">
<p class="p1">Copyright © 2019-2024 广东匠芯创科技有限公司. All rights reserved.</p>
</div><div>
<div class="generation_time">
Update Time: 2025-01-23
</div>
</div>
</div>
</footer>
<button id="go2top" class="d-print-none" title="返回顶部">
<span class="oxy-icon oxy-icon-up"></span>
</button>
<div id="modal_img_large" class="modal">
<span class="close oxy-icon oxy-icon-remove"></span>
<div id="modal_img_container"></div>
<div id="caption"></div>
</div>
<script src="${pd}/publishing/publishing-styles-AIC-template/js/custom.js" defer="defer"></script>
</body>
</html>