• u-boot


    https://www.denx.de/wiki/U-Boot下载地址
    准备好工具链 在/etc/bash.bashrc 添加 export PATH=$PATH:/.../bin 并source 这个文件
    工具链国内下载地址 http://www.veryarm.com/arm-none-linux-gnueabi-gcc
    arm 官方提供的下载地址 https://releases.linaro.org/components/toolchain/binaries/
    先确定编译器没问题 再继续下面的操作
    下载一份u-boot 源码
    目录层次结构:

    / arch体系结构特定文件
      / arc ARC架构通用文件
      / arm ARM体系结构通用的文件
      / m68k m68k架构通用的文件
      / microblaze对microblaze体系结构通用的文件
      / mips MIPS架构通用的文件
      / nds32 NDS32体系结构通用文件
      / nios2 Altera NIOS2架构通用的文件
      / openrisc OpenRISC架构通用的文件
      / powerpc PowerPC体系结构通用的文件
      / sandbox与硬件无关的“ sandbox”通用的文件
      / sh SH体系结构通用的文件
      / x86 x86体系结构通用的文件
    / api外部应用程序的机器/ arch独立API
    / board依赖于板的文件
    / cmd U-Boot命令功能
    / common杂项架构独立功能
    / configs板默认配置文件
    / disk用于磁盘驱动器分区处理的代码
    / doc文档(不要期望太多)
    / drivers常用的设备驱动程序
    / dts包含用于生成内部U-Boot fdt的Makefile。
    / examples独立应用程序等的示例代码
    / fs文件系统代码(cramfs,ext2,jffs2等)
    / include头文件
    / lib对所有体系结构通用的库例程
    /许可证各种许可证文件
    / net联网代码
    /开机自检
    / scripts各种构建脚本和Makefile
    / test各种单元测试文件
    / tools用于构建S-Record或U-Boot映像等的工具。


    这是电路板的预期启动流程。这应同时适用于
    正确使用SPL和U-Boot(即它们都遵循相同的规则)。

    注意:“ SPL”代表“辅助程序加载程序”,在
    此文件后面的更多详细信息。

    目前,SPL大多使用单独的代码路径,但函数名称
    每个功能的作用都相同一些主板或架构
    可能与此不符。至少大多数使用
    CONFIG_SPL_FRAMEWORK符合此要求。

    执行通常从特定于架构的(可能是
    CPU特定的)start.S文件,例如:

    -arch / arm / cpu / armv7 / start.S
    -arch / powerpc / cpu / mpc83xx / start.S
    -arch / mips / cpu / start.S

    等等。从那里开始,调用了三个函数。目的和
    这些功能的局限性在下面描述。

    lowlevel_init():
    -目的:允许执行到达board_init_f()的基本初始化
    -没有global_data或BSS
    -没有堆栈(ARMv7可能有一个堆栈,但是很快就会被删除)
    -不得设置SDRAM或使用控制台
    -必须只做最低限度的工作,才能继续执行
    board_init_f()
    -几乎不需要
    -从此函数正常返回

    board_init_f():
    -目的:设置机器以准备运行board_init_r():
    即SDRAM和串行UART
    -global_data可用
    -堆栈位于SRAM中
    -BSS不可用,因此您不能使用全局/静态变量,
    仅堆栈变量和global_data

    非SPL特定说明:
    -调用dram_init()设置DRAM。如果已经在SPL中完成此操作
    无能为力

    SPL特定说明:
    -您可以使用自己的函数覆盖整个board_init_f()函数
    需要的版本。
    -preloader_console_init()可在此处极端调用
    -应该设置SDRAM,以及使UART工作所需的任何东西
    -这些不需要清除BSS,将由crt0.S完成
    -必须从此函数正常返回(请勿调用board_init_r()
    直)

    此处清除了BSS。对于SPL,如果定义了CONFIG_SPL_STACK_R,则在
    至此,堆栈和global_data都移到了下面
    CONFIG_SPL_STACK_R_ADDR。对于非SPL,U-Boot已重定位以在以下位置运行
    记忆。

    board_init_r():
    -目的:主要执行,通用代码
    -global_data可用
    -SDRAM可用
    -BSS可用,可以使用所有静态/全局变量
    -执行最终继续到main_loop()

    非SPL特定说明:
    -U-Boot重定位到内存顶部,并且现在从
    那里。

    SPL特定说明:
    -如果定义了CONFIG_SPL_STACK_R且堆栈可选地位于SDRAM中
    CONFIG_SPL_STACK_R_ADDR指向SDRAM
    -在这里可以调用preloader_console_init()-通常是
    通过选择CONFIG_SPL_BOARD_INIT然后提供一个
    包含此调用的spl_board_init()函数
    -加载U-Boot或(在falcon模式下)Linux

    配置交叉编译$ 主目录下Makefile 中 CROSS_COMPILE = ppc_4xx-

  • 相关阅读:
    前nginx后Apache+Node反向代理
    JavaScript面试时候的坑洼沟洄——逗号、冒号与括号
    JavaScript面试时候的坑洼沟洄——表达式与运算符
    JavaScript面试时候的坑洼沟洄——数据类型
    容易被忽略CSS特性
    常用CSS优化总结——网络性能与语法性能建议
    quic-go测试
    golang证书认证通信
    golang爬虫
    websocket概述
  • 原文地址:https://www.cnblogs.com/DemonMaster/p/11806326.html
Copyright © 2020-2023  润新知