uboot启动流程之进uboot命令行和启动内核

2023-11-15

1.上电进board_init_r-->init_sequence_r-->run_main_loop

-->main_loop-->bootdelay_process-->autoboot_command主要就是这么个流程

2.具体怎么决定是进命令行还是启动kernel是在autoboot_command决定的

void autoboot_command(const char *s)
{
    debug("### main_loop: bootcmd=\"%s\"\n", s ? s : "<UNDEFINED>");

    if (stored_bootdelay != -1 && s && !abortboot(stored_bootdelay)) {
#if defined(CONFIG_AUTOBOOT_KEYED) && !defined(CONFIG_AUTOBOOT_KEYED_CTRLC)
        int prev = disable_ctrlc(1);    /* disable Control C checking */
#endif

        run_command_list(s, -1, 0);

#if defined(CONFIG_AUTOBOOT_KEYED) && !defined(CONFIG_AUTOBOOT_KEYED_CTRLC)
        disable_ctrlc(prev);    /* restore Control C checking */
#endif
    }

#ifdef CONFIG_MENUKEY
    if (menukey == CONFIG_MENUKEY) {
        s = getenv("menucmd");
        if (s)
            run_command_list(s, -1, 0);
    }
#endif /* CONFIG_MENUKEY */
}
3. 进入abortboot-->abortboot_normal

static int abortboot_normal(int bootdelay)
{

...

#if defined CONFIG_ZERO_BOOTDELAY_CHECK
    /*
     * Check if key already pressed
     * Don't check if bootdelay < 0
     */
    if (bootdelay >= 0) {
        if (tstc()) {    /* we got a key press    */
            key = getc(); /* consume input */
            puts("\b\b\b 0");
            switch (key) {
                case 0x03:      /* ^C - Ctrl+C */
                case 0x0d:      /* Enter */
                case 0x20:      /* Space */ //only "enter" key can triger abort
                abort = 1;    /* don't auto boot    */
            }
        }
    }
#endif

...

return abort;

}

这里可以看到键盘按Ctrl+C、enter、或者Space将abort置1,函数结尾返回

4.  回到autoboot_command可以看到如果abortboot_normal返回1则autoboot_command执行完成回到main_loop继续跑到cli_loop-->cli_simple_loop进入并停在命令行模式。

5. 上面是命令行模式,下面说上电启动kernel

同样在autoboot_command-->abortboot返回0,autoboot_command里调用run_command_list执行命令bootcmd启动kernel

具体如下board相关配置文件会参考如下配置bootcmd

#define CONFIG_BOOTCOMMAND "run storeboot"

...

"storeboot="\
        "if imgread kernel boot ${loadaddr}; then "\
            "bootm ${loadaddr}; "\
        "fi; "\
        "run update; "\
        "\0"\

在env_default.h里

const uchar default_environment[] = {

...

#ifdef    CONFIG_BOOTCOMMAND
    "bootcmd="    CONFIG_BOOTCOMMAND        "\0"
#endif

...

}

main_loop函数里会在调用autoboot_command(s);执行启动linuxkernel之前调用s = bootdelay_process();获取bootcmd命令。

后面就是bootm命令调用do_bootm-->do_bootm_states-->boot_fn(bootm_os_get_boot_func)-->

boot_os[os]-->do_bootm_linux,再后面就不说了,网络上搜索一下一大把。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uboot启动流程之进uboot命令行和启动内核 的相关文章

  • ARM 汇编 SOS 中的 64 位除法

    我正在计算 16 个 64 位数字相加的平均值 我认为我已经正确完成了所有加法 但现在我需要弄清楚如何将 64 位数字除以 16 但我被困住了 任何帮助都会非常感谢你 到目前为止 这是我的代码 tableSize EQU 16 sum EQ
  • GNU Arm Cortex m4 上的 C++ 异常处理程序与 freertos

    2016 年 12 月更新现在还有一个关于此行为的最小示例 https community nxp com message 862676 https community nxp com message 862676 我正在使用带有 free
  • ARM 9处理器的opencv交叉编译

    我需要为 ARM 9 处理器交叉编译 opencv 我有处理器的工具链 但不知道如何交叉编译 请告诉我为arm板交叉编译的过程 谢谢大家 看这个参考 http www airs com ian configure configure 5 h
  • 手臂“版本”之间的差异? (仅限 ARMv7)

    基本上我想知道ARMv7l和ARMv7之间的区别hl 我有一个带有armv7l的arm处理器 并且有很多armv7的rpmhl 我完全不知道我必须搜索什么才能获得相关信息 这个 后缀 叫什么 还有其他类型吗 他们的做法有何不同 我假设它指示
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • DSP 库 - RFFT - 奇怪的结果

    最近我一直在尝试在我的STM32F4 Discovery评估板上进行FFT计算 然后将其发送到PC 我已经调查了我的问题 我认为我对制造商提供的 FFT 函数做错了 我正在使用 CMSIS DSP 库 现在我一直在用代码生成样本 如果工作正
  • 读取和打印手臂组件中的字符串

    我正在使用 ARMSim 刚刚开始学习汇编 所以如果我看起来一无所知 请原谅我 但我正在尝试从输入文件中读取字符串 然后将其打印到输出屏幕 到目前为止我有 equ SWI Open 0x66 open a file equ SWI Clos
  • 为 ARM 交叉编译 zlib

    我尝试为arm poky linux gnueabi交叉编译zlib 但启动 make 时出现错误 zlib 1 2 11 AR HOST ar CC HOST gcc RANLIB HOST ranlib configure prefix
  • 如何在 Android 设备上运行 VS Code [重复]

    这个问题在这里已经有答案了 我有 Galaxy Tab S6 它具有替代笔记本电脑的很酷的功能 例如连接鼠标和键盘 但不幸的是它运行 Android 操作系统 并且没有很多开发应用程序可用于 Android 所以我想是否有一个选项可以在至少
  • arm-thumb指令集的blx指令如何支持4MB范围

    读自https www keil com support man docs armasm armasm dom1361289866046 htm https www keil com support man docs armasm arma
  • 如何使用 Neon SIMD 将无符号字符转换为有符号整数

    如何转换变量的数据类型uint8 t to int32 t使用霓虹灯 我找不到执行此操作的任何内在因素 假设您想要将 16 x 8 位整数的向量转换为 4 个 4 x 32 位整数的向量 您可以通过首先解压缩为 16 位 然后再次解压缩为
  • 基于 Windows 8 ARM 的平板电脑上的 VB6

    随着 Windows 8 将支持 VB6 我的问题是 Microsoft 是否在任何地方表示 是或否 VB6 应用程序将在基于 ARM 的平板电脑上运行 如果没有 是否有任何 ARM 模拟器 以便我们可以在 Windows 8 ARM 平板
  • 如何设置 CMake 与 clang 交叉编译 Windows 上的 ARM 嵌入式系统?

    我正在尝试生成 Ninja makefile 以使用 Clang 为 ARM Cortex A5 CPU 交叉编译 C 项目 我为 CMake 创建了一个工具链文件 但似乎存在错误或缺少一些我无法找到的东西 当使用下面的工具链文件调用 CM
  • saber sd 如何在没有 SPL 的情况下直接从 uboot 启动

    sabre sd 基于 imx 6 最大内部 RAM 约为 150Kb 然而 uboot 足够大 可以容纳在这个空间中 在这个场景中事情是如何进行的 https community freescale com docs DOC 95015
  • 使用 NEON 内在函数除以浮点数

    我当时正在处理四个像素的图像 这是在armv7对于 Android 应用程序 我想分一个float32x4 t向量由另一个向量组成 但其中的数字与大约不同0 7 to 3 85 在我看来 除法的唯一方法是使用右移 但这是针对一个数字2 n
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • ARM Chromebook 上的 Android 开发环境?

    我尝试了多次安装和使用安卓工作室 https developer android com studio index html on an ARM Chromebook C100P https archlinuxarm org platfor
  • 架构armv7的重复符号

    尝试在我现有的应用程序中使用 Layar SDK 时出现以下错误 我该如何解决这个问题 Ld Users pnawale Library Developer Xcode DerivedData hub afxxzaqisdfliwbzxbi
  • 为arm构建WebRTC

    我想为我的带有arm926ej s处理器的小机器构建webrtc 安装 depot tools 后 我执行了以下步骤 gclient config http webrtc googlecode com svn trunk gclient s
  • ARM NEON 矢量化失败

    我想在 ARM cortex a9 上启用 NEON 矢量化 但在编译时得到以下输出 未矢量化 不支持相关 stmt D 14140 82 D 14143 77 D 14141 81 这是我的循环 void my mul float32 t

随机推荐

  • 网络志愿者微公益行

    活动中 网络志愿者将书包和牛奶作为新年礼物送给孩子们 并走到愿望墙 一对一完成孩子们的小小愿望 发动仪式完毕后 网络志愿者深化贫困学生家中 详细了解他们的生活困难 并活跃协助处理
  • h5逻辑_H5+app 混合开发

    目录 app分类 h5与原生进行交互 1 判断h5页面打开的环境是ios android 2 JS与客户端互相调用 js调用ios的方法 js调用android的方法 error android接收不到参数 js调用ios与android的
  • redis学习

    1 yfk 博客 Redis http blog csdn net yfkiss article category 1059564
  • Cookie与Session机制,以及scrapy中cookiejar的理解

    Http协议 http是一种无状态协议 先说什么是协议 说白了就是通讯过程中的一种规范 要求 那什么是无状态的呢 就是我们在向服务器请求一个页面的过程中 并不是一个持久性的连接 而是客户端发送一个请求 比方说 我打开腾讯网 然后服务器端返回
  • 惠普PC服务器HP DL360G5网卡的安装

    在惠普服务器 HP DL360G5上安装Linux ES4 0的时候 系统不会自动检测到网卡并安装驱动程序 因此需要手动安装网卡的驱动程序 以下是网卡的安装方法 1 rpm ivh bnx2 1 4 43f 1 src rpm 回车 界面如
  • linux图形界面卡死

    项目场景 linux图形界面卡死 问题描述 鼠标能够移动 但是整个图形界面卡住 解决方案 进入linux下共有六个虚拟控台 f2 f6 分别对应这不同的权限 ctrl alt f2 提示登陆 此时登陆root用户 先输入账号 再输入密码 登
  • IP数据包格式

    IP数据包格式如下 版本号 Version 指 IP 协议的版本 通常为 IPv4 或 IPv6 首部长度 Header Length 指 IP 数据包的首部长度 以 32 位字 4 字节 为单位 区分服务 Differentiated S
  • 网站服务器商标属于哪类,网络水晶头属于商标哪个类别

    水晶头是一种能沿固定方向插入并自动防止脱落的塑料接头 俗称 水晶头 专业术语为RJ 45连接器 RJ 45是一种网络接口规范 类似的还有RJ 11接口 就是我们平常所用的 电话接口 用来连接电话线 之所把它称之为 水晶头 是因为它的外表晶莹
  • jmeter学习笔记(三)-性能测试概念

    性能测试相关概念 a 响应时间 是用户提交一个请求 系统从开始呈现到将所有信息都呈现到客户端所需要的时间 以一个web应用的页面响应时间为例 页面的响应时间可分解为 网络传输时间 N1 N2 N3 N4 应用延迟时间 A1 A2 A3 b
  • 如何在你的Android工程中启用K2编译器?

    如何在你的Android工程中启用K2编译器 K2编译器是用于Kotlin代码编译的最新 高效编译器 你现在可以尝试使用了 Kotlin编译器正在为Kotlin 2 0进行重写 新的编译器实现 代号K2 带来了显著的构建速度改进 编译Kot
  • 数学基础:向量求导整理

    0矩阵求导网站 不包括叉乘和点乘求导 http www matrixcalculus org 1标量对向量求导 标量 分子 分别对行 列向量 分母 各元素求导 结果仍为行 列向量 维度与分母一致 定义行向量 y T y
  • 关于QString的常见用法(详细讲解)

    QString类提供一个unicode字符串 在QT软件开发平台中常用到的一种变量类型 其提供了很多方便的应用方法 下面介绍一些关于QString的常见用法 1 字符串末尾追加 example 1 QString str hello str
  • iMazing2023iOS系统设备数据传输与备份工具使用教程

    iMazing需要数据线将你的电脑和iPhone或者是iPad连接 这款软件是itunes的完美替代品 有用iPhone或iPad的朋们友推荐下载使用 只要在同一网络下 就可以轻松管理你的iPhone 可以说是非常的方便 平时在传输文件资料
  • Vue SEO解决方案

    目录 SEO是什么 SEO目的 Vue中seo的解决方案 SEO是什么 seo是一种网站优化技术 也被叫做搜索引擎优化 可以利用搜索规则提高网站上有关搜索的自然排名 主要表现为微博热搜控榜等 通过seo技术 可以实现一系列的商业行为 对产品
  • Unity+SteamVR开发——交互

    一 前言 本文使用两个工具为Unity2018 4 26和SteamVR2 6 1 SteamVR2 6 1相比之前的版本有了很大的改变 其中在交互上有了很大的提升 SteamVR2 6 1上给出的案例中提供了抛射物体 线性驱动 环形驱动以
  • QT实现必须确定的弹窗窗口

    头文件包含 消息弹窗 include
  • java.lang.IllegalStateException: Duplicate key,异常

    问题描述 将list集合里的数据转化为map对象的时候 出现了如下异常 标题中的异常 原因 list转成map的时候map中的key重复导致的 使用场景 在实际应用开发中 会常把一个List的查询数据集合转为一个Map 那么在这里的 lis
  • Systrace 线程 CPU 运行状态分析技巧 - Runnable

    Runnable 状态 在 Systrace 中的显示方式 Perfetto Systrace 不同 CPU 运行状态异常原因 101 Running 长 1 中讲解了导致 CPU 的 Running 状态耗时久的原因与优化方法 这一节介绍
  • 提高计算机水平的小技巧,电脑上的几个小技巧,让你的工作效率提高一半!

    不管是工作还是学习 电脑已经是大家生活中必不可少的一部分了 那你敢说自己已经是电脑高手了吗 但是其实有很多电脑上的小技巧我们却还是不知道的 今天小乐就给大家分享几个电脑上的几个小技巧 希望可以让小伙伴们有所收获 其实在信息化时代的今天 依然
  • uboot启动流程之进uboot命令行和启动内核

    1 上电进board init r gt init sequence r gt run main loop gt main loop gt bootdelay process gt autoboot command主要就是这么个流程 2 具