Files
luban-lite-t3e-pro/doc/topics/sdk/boot/uboot-post-init.html
2025-01-23 16:37:00 +08:00

312 lines
16 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="26.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="后初始化阶段是代码重定位之后执行的初始化流程,由下面的 board_init_r 开始。 _start // arch/riscv/cpu/start.S |-&gt; save_boot_params // arch/riscv/mach-artinchip/lowlevel_init.S |-&gt; ... |-&gt; board_init_f(); // common/board_f.c |-&gt; ..."/><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.contributor" content="yan.wang"/><meta name="DC.date.modified" content="2024-12-04"/><meta name="DC.format" content="HTML5"/><meta name="DC.identifier" content="concept_p55_hl3_pzb"/><meta name="DC.language" content="zh-CN"/><title>后初始化</title><!-- Build number 2023110923. --><meta name="wh-path2root" content="../../../"/><meta name="wh-toc-id" content=""/><meta name="wh-source-relpath" content="topics/sdk/boot/uboot-post-init.dita"/><meta name="wh-out-relpath" content="topics/sdk/boot/uboot-post-init.html"/>
<link rel="stylesheet" type="text/css" href="../../../webhelp/app/commons.css?buildId=2023110923"/>
<link rel="stylesheet" type="text/css" href="../../../webhelp/app/topic.css?buildId=2023110923"/>
<script src="../../../webhelp/app/options/properties.js?buildId=20250121171154"></script>
<script src="../../../webhelp/app/localization/strings.js?buildId=2023110923"></script>
<script src="../../../webhelp/app/search/index/keywords.js?buildId=20250121171154"></script>
<script defer="defer" src="../../../webhelp/app/commons.js?buildId=2023110923"></script>
<script defer="defer" src="../../../webhelp/app/topic.js?buildId=2023110923"></script>
<link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-styles-web.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/notes.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-common.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-images.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/footnote.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-web-watermark.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/topic-body-list.css?buildId=2023110923"/></head>
<body id="concept_p55_hl3_pzb" 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="RTOS SDK 使用指南SDK 指南文件"/></a>
<div class=" wh_publication_title "><a href="../../../index.html"><span class="booktitle"><span class="ph mainbooktitle">RTOS 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 "></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_print_link print d-none d-md-inline-block "><button onClick="window.print()" title="打印此页" aria-label="打印此页"></button></div>
</div>
</nav>
</div>
<div class="wh_content_area">
<div class="row">
<div class="col-12" id="wh_topic_body">
<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" href="http://172.16.35.88/tasks/jdssno1uvvbf2mltu9kb9v3if05d5gopuakboe8hlud18rma/edit/F:/aicdita/aicdita-cn/topics/sdk/boot/uboot-post-init.dita">Edit online</a></span><h1 class="- topic/title title topictitle1" id="ariaid-title1">后初始化</h1><div class="date inPage">4 Dec 2024</div><div style="color: gray;">
Read time: 3 minute(s)
</div><div class="- topic/body concept/conbody body conbody"><div class="- topic/p p" data-ofbid="d230528e22__20250121171651">后初始化阶段是代码重定位之后执行的初始化流程,由下面的 <span class="+ topic/keyword pr-d/apiname keyword apiname">board_init_r</span>
开始。<pre class="+ topic/pre pr-d/codeblock pre codeblock language-c" id="concept_p55_hl3_pzb__codeblock_nmj_lmr_c1c" data-ofbid="concept_p55_hl3_pzb__codeblock_nmj_lmr_c1c">_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>
|-&gt; ...
|-&gt; board_init_f(); <em class="hl-comment">// common/board_f.c</em>
|-&gt; setup_reloc(); <em class="hl-comment">// common/board_f.c</em>
|-&gt; jump_to_copy(); <em class="hl-comment">// common/board_f.c</em>
|-&gt; relocate_code(); <em class="hl-comment">// arch/riscv/cpu/start.S</em>
| <em class="hl-comment">// RISCV 上的实现relocate 之后,函数不返回,直接跳转到 board_init_r 执行</em>
|-&gt; invalidate_icache_all()
|-&gt; flush_dcache_all()
|-&gt; board_init_r();</pre></div><div class="- topic/p p" data-ofbid="d230528e29__20250121171651"><span class="+ topic/keyword pr-d/apiname keyword apiname">board_init_r</span> 函数中逐个执行函数列表 <span class="+ topic/keyword pr-d/apiname keyword apiname">init_sequence_r</span>
中的初始化函数。<pre class="+ topic/pre pr-d/codeblock pre codeblock language-c" id="concept_p55_hl3_pzb__codeblock_flf_mmr_c1c" data-ofbid="concept_p55_hl3_pzb__codeblock_flf_mmr_c1c"><strong class="hl-keyword">static</strong> init_fnc_t init_sequence_r[] = {
initr_trace,
initr_reloc,
#ifdef CONFIG_ARM
initr_caches,
#endif
initr_reloc_global_data,
initr_barrier,
initr_malloc,
log_init,
initr_bootstage, <em class="hl-comment">/* Needs malloc() but has its own timer */</em>
initr_console_record,
#ifdef CONFIG_SYS_NONCACHED_MEMORY
initr_noncached,
#endif
bootstage_relocate,
#ifdef CONFIG_OF_LIVE
initr_of_live,
#endif
#ifdef CONFIG_DM
initr_dm,
#endif
#<strong class="hl-keyword">if</strong> defined(CONFIG_ARM) || defined(CONFIG_NDS32) || defined(CONFIG_RISCV) || \
defined(CONFIG_SANDBOX)
board_init, <em class="hl-comment">/* Setup chipselects */</em>
#endif
stdio_init_tables,
initr_serial,
initr_announce,
#<strong class="hl-keyword">if</strong> CONFIG_IS_ENABLED(WDT)
initr_watchdog,
#endif
INIT_FUNC_WATCHDOG_RESET
#ifdef CONFIG_NEEDS_MANUAL_RELOC
initr_manual_reloc_cmdtable,
#endif
#ifdef CONFIG_ADDR_MAP
initr_addr_map,
#endif
#<strong class="hl-keyword">if</strong> defined(CONFIG_BOARD_EARLY_INIT_R)
board_early_init_r,
#endif
INIT_FUNC_WATCHDOG_RESET
#ifdef CONFIG_POST
initr_post_backlog,
#endif
INIT_FUNC_WATCHDOG_RESET
#ifdef CONFIG_ARCH_EARLY_INIT_R
arch_early_init_r,
#endif
power_init_board,
#ifdef CONFIG_MTD_NOR_FLASH
initr_flash,
#endif
INIT_FUNC_WATCHDOG_RESET
#ifdef CONFIG_CMD_NAND
initr_nand,
#endif
#ifdef CONFIG_CMD_ONENAND
initr_onenand,
#endif
#ifdef CONFIG_MMC
initr_mmc,
#endif
initr_env,
#ifdef CONFIG_SYS_BOOTPARAMS_LEN
initr_malloc_bootparams,
#endif
INIT_FUNC_WATCHDOG_RESET
initr_secondary_cpu,
#<strong class="hl-keyword">if</strong> defined(CONFIG_ID_EEPROM) || defined(CONFIG_SYS_I2C_MAC_OFFSET)
mac_read_from_eeprom,
#endif
INIT_FUNC_WATCHDOG_RESET
stdio_add_devices,
initr_jumptable,
#ifdef CONFIG_API
initr_api,
#endif
console_init_r, <em class="hl-comment">/* fully init console as a device */</em>
#ifdef CONFIG_DISPLAY_BOARDINFO_LATE
console_announce_r,
show_board_info,
#endif
#ifdef CONFIG_ARCH_MISC_INIT
arch_misc_init, <em class="hl-comment">/* miscellaneous arch-dependent init */</em>
#endif
#ifdef CONFIG_MISC_INIT_R
misc_init_r, <em class="hl-comment">/* miscellaneous platform-dependent init */</em>
#endif
INIT_FUNC_WATCHDOG_RESET
interrupt_init,
#ifdef CONFIG_ARM
initr_enable_interrupts,
#endif
#ifdef CONFIG_CMD_NET
initr_ethaddr,
#endif
#ifdef CONFIG_BOARD_LATE_INIT
board_late_init,
#endif
#ifdef CONFIG_CMD_NET
INIT_FUNC_WATCHDOG_RESET
initr_net,
#endif
#ifdef CONFIG_POST
initr_post,
#endif
#<strong class="hl-keyword">if</strong> defined(CONFIG_PRAM)
initr_mem,
#endif
run_main_loop,
};</pre></div><div class="- topic/p p" data-ofbid="d230528e38__20250121171651">其中下面几个重要的阶段需要留意。<pre class="+ topic/pre pr-d/codeblock pre codeblock language-c" id="concept_p55_hl3_pzb__codeblock_mjr_mmr_c1c" data-ofbid="concept_p55_hl3_pzb__codeblock_mjr_mmr_c1c">board_init_r();
|
|-&gt; initr_dm <em class="hl-comment">// 初始化设备驱动,这次扫描所有的设备,并且绑定到匹配的驱动上</em>
| |-&gt; dm_init_and_scan(false);
| |-&gt; dm_init(IS_ENABLED(CONFIG_OF_LIVE)); <em class="hl-comment">// drivers/core/root.c</em>
| |-&gt; dm_scan_platdata(pre_reloc_only=true);
| |-&gt; dm_extended_scan_fdt(gd-&gt;fdt_blob, pre_reloc_only=true);
| |-&gt; dm_scan_other(pre_reloc_only);
|
|-&gt; initr_flash <em class="hl-comment">// SPI NOR 的初始化</em>
| |-&gt; flash_size = flash_init();
|
|-&gt; initr_nand <em class="hl-comment">// RAW NAND 的初始化</em>
|-&gt; initr_mmc
| |-&gt; mmc_initialize(gd-&gt;bd);
|
|-&gt; initr_env
| |-&gt; env_relocate(); <em class="hl-comment">// env/common.c</em>
| |-&gt; env_load(); <em class="hl-comment">// env/env.c</em>
|
|-&gt; stdio_add_devices();
|
|-&gt; board_late_init(); <em class="hl-comment">// board/artinchip/d211/d211.c</em>
|-&gt; setup_boot_device();
|-&gt; env_set(<span class="hl-string">"boot_device"</span>, <span class="hl-string">"mmc"</span>);</pre></div><p class="- topic/p p" data-ofbid="d230528e42__20250121171651"><strong class="+ topic/ph hi-d/b ph b">Cache Enable</strong></p><p class="- topic/p p" data-ofbid="d230528e45__20250121171651">RISCV 上U-Boot 运行在 S-Mode没有权限开关 Cache因此只能由 SPL 来开关 Cache。</p><p class="- topic/p p" data-ofbid="d230528e47__20250121171651"><strong class="+ topic/ph hi-d/b ph b">Device Model</strong></p><p class="- topic/p p" data-ofbid="d230528e50__20250121171651">在后初始化阶段,会扫描所有的设备和驱动,并且将设备和对应的驱动进行绑定。</p><p class="- topic/p p" data-ofbid="d230528e52__20250121171651"><strong class="+ topic/ph hi-d/b ph b">存储介质的初始化</strong></p><p class="- topic/p p" data-ofbid="d230528e55__20250121171651">NOR/NAND/MMC 等存储介质的驱动在这个阶段开始初始化。</p><p class="- topic/p p" data-ofbid="d230528e57__20250121171651"><strong class="+ topic/ph hi-d/b ph b">环境变量加载</strong></p><p class="- topic/p p" data-ofbid="d230528e60__20250121171651">环境变量中保存着 U-Boot 的配置,以及相关的启动信息,此时需要从对应的存储介质中加载使用。</p><p class="- topic/p p" data-ofbid="d230528e63__20250121171651"><strong class="+ topic/ph hi-d/b ph b">显示驱动</strong></p><p class="- topic/p p" data-ofbid="d230528e66__20250121171651">如果项目使能了 U-Boot 阶段的显示,此时在 <span class="+ topic/keyword pr-d/apiname keyword apiname">stdio_add_devices()</span> 中对显示和按键驱动进行初始化。</p><p class="- topic/p p" data-ofbid="d230528e71__20250121171651"><strong class="+ topic/ph hi-d/b ph b">其他配置</strong></p><p class="- topic/p p" data-ofbid="d230528e74__20250121171651"><span class="+ topic/keyword pr-d/apiname keyword apiname">board_late_init()</span> 中,将从 SPL 传递过来的启动设备信息,更新到环境变量中,使得后续的启动脚本
可以获知当前的启动设备信息。</p></div></article></main></div>
</div>
</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-21
</div>
</div>
</div>
</footer>
<div id="go2top" class="d-print-none">
<span class="oxy-icon oxy-icon-up"></span>
</div>
<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>