u-BOOT启动流程
创始人
2024-03-24 03:20:37
0

1、u-boot入口:入口即第一行程序,程序的链接是由链接脚本决定的,编译uboot之后,可以在根目录下生成u-boot.lds文件
编译后的uboot文件
打开lds文件可以看到代码当前入口点: :_start,_start后面就是中断向量表,通过查看map地址可以得知start地址为 0Xc0100000,即整个 uboot的起始地址就是 0Xc0100000
在这里插入图片描述
2、u-boot启动过程中主要用到的一些函数:

board_init_f:初始化一系列外设,比如串口、定时器,或者打印一些消息等。
relocate_code:用于代码拷贝
relocate_vectors:重定位向量表
board_init_f:初始化外设的后续工作
run_main_loop:uboot启动以后会进入 N(N=1.2.3…)秒倒计时,如果在 N秒倒计时结束之前按下回车键,那么就会进入 uboot的命令模式,如果倒计时结束以后都没有按下回车键,那么就会自动启动Linux内核,这个功能就是由这个函数实现的
cli_loop:uboot的命令行处理函数,我们在 uboot中输入各种命令,进行各种操作就是有 cli_loop来处理的

3、bootm启动linux内核用到的函数:

全局变量 images会在 bootm命令的执行中频繁使用到,相当于 Linux内核启动的“灵魂”。
在这里插入图片描述
bootm命令的执行函数为 do_bootm:行,主要作用是解析 bootm的命令参数和检查有没有子命令

do_bootm_states:来执行不同的 BOOT 阶段,这里要执行的 BOOT阶段有:
BOOTM_STATE_START,BOOTM_STATE_FINDOS、 BOOTM_STATE_FINDOTHER、
BOOTM_STATE_LOADOS、 BOOTM_STATE_RAMDISK、 BOOTM_STATE_OS_PREP、
BOOTM_STATE_OS_FAKE_GO和 BOOTM_STATE_OS_GO。
bootm_os_get_boot_func:来查找对应系统的启动函数,查找方法很简单,就是读取数组中指定元素。
do_bootm_linux:Linux系统对应的启动函数
kernel_entry:,看名字“内核 _进入”,说明此函数是进入 Linux内核的,此函数有三个参数 zero arch params,第一个参数 zero要 为 0;第二个参数为机器 ID;第三个参数 ATAGS或者设备树 (DTB)首地 址, ATAGS是传统的方法,用于
传递一些命令行信息啥的,如果使用设备树的话就要传递设备树 (DTB)。
调用 kernel_entry函数进入 Linux内核,此行将一去不复返, uboot的使命也就完成了

流程图:
在这里插入图片描述
在这里插入图片描述

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...