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-