DAY 1
学习一定要利用好三分钟热血来学习。
寄存器级别的操作是stm32工程师熟悉的也是这次linux学习的重点。
u-boot 启动流程详解
通过分析 uboot 的启动流程可以了解 Linux 内核是如何被启动的。
要分析 uboot 的启动流程,首先要找到“入口”,找到第一行程序在哪里。程序的链接是由
链接脚本来决定的,所以通过链接脚本可以找到程序的入口。
- u-boot.lds 就是u-boot链接文件。 该文件相当于STM32开发中的.sct 分散加载文件。
定义中断向量表 起始地址也是 0X87800000,说明整个 uboot 的起始地址就是 0X87800000
STM32中断向量表也是可设置的,默认是0x80000000
将 arch/arm/cpu/armv7/start.s 编译出来的代码放到中断向量表后面
在 u-boot.lds 中有一些跟地址有关的“变量”需要我们注意一下
“变量”值可以在 u-boot.map 文件中查找,除了__image_copy_start
以外,其他的变量值每次编译的时候可能会变化,如果修改了 uboot 代码、修改了 uboot 配置、选用不同的优化等级等等都会影响到这些值。所以,一切以实际值为准! - u-boot.map 是 uboot 的映射文件,可以从此文件看到某个文件或者函数链接到了哪个地址。STM32也有.map文件。一样的用法。
/*
* Copyright (c) 2004-2008 Texas Instruments
*
* (C) Copyright 2002
* Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <config.h>
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm"