码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • uboot的start.S


    目录

    一、起始文件start.S

    二、_start和reset

    三、save_boot_params_ret

    四、_main之前系统寄存器初始化和从核的引导


    一、起始文件start.S

    1.uboot编译完成后有一个uboot-boot.lds链接器文件

     2.打开里面有一个ENYRY(_start),_start符号所在的文件就是整个程序的起始文件

    3.位置在 u-boot-2022.01/arch/arm/cpu/armv8/start.S

    4.异常向量表代码位置u-boot-2022.01\arch\arm\lib\vectors.S

    二、_start和reset

    • 进后有两种可配置情况,因为没有定义LINUX_KERNEL_IMAGE_HEADER 所以不需要看
    • 直接跳转到  reset  继续执行启动流程
    • save_boot_params 此处定义为了一个弱函数,为直接跳转回save_boot_params_ret继续往下执行
    1. .globl _start
    2. _start:
    3. #if defined(CONFIG_LINUX_KERNEL_IMAGE_HEADER)
    4. #include
    5. #elif defined(CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK)
    6. /*
    7. * Various SoCs need something special and SoC-specific up front in
    8. * order to boot, allow them to set that in their boot0.h file and then
    9. * use it here.
    10. */
    11. #include
    12. #else
    13. b reset
    14. #endif
    15. .align 3
    16. .globl _TEXT_BASE
    17. _TEXT_BASE:
    18. .quad CONFIG_SYS_TEXT_BASE
    19. /*
    20. * These are defined in the linker script.
    21. */
    22. .globl _end_ofs
    23. _end_ofs:
    24. .quad _end - _start
    25. .globl _bss_start_ofs
    26. _bss_start_ofs:
    27. .quad __bss_start - _start
    28. .globl _bss_end_ofs
    29. _bss_end_ofs:
    30. .quad __bss_end - _start
    31. reset:
    32. /* Allow the board to save important registers */
    33. b save_boot_params
    34. .globl save_boot_params_ret
    35. save_boot_params_ret:

    三、save_boot_params_ret

    进行地址无关的相对地址修复,以此保证后续在跳入c语言部分时可正常执行,一般不定义此配置则是继续往下执行boot流程。

    四、_main之前系统寄存器初始化和从核的引导

    对一些系统寄存器进行初始化

    • 关闭data cache,关闭mmu
      定义设置异常向量表的宏
      系统的时钟频率,COUNTER_FREQUENCY频率值
    • 勘误修正等

    参考博文

    博文2

  • 相关阅读:
    lombok的介绍
    OG 488, acid|195136-52-8|Oregon Green 488 Carboxylic Acid
    政企组织为什么更需要私有化的IM即时通讯平台?
    Spread 16.0 for WinForms Crack
    linux-内存
    JAVA学习-全网最详细
    远程连接centos 7 图形化桌面
    thsi指针用法总结
    Python实现自动重新运行指定python脚本
    Matlab图像处理之Lee滤波器
  • 原文地址:https://blog.csdn.net/m0_51247005/article/details/127093163
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号