uboot启动源码分析

开发板smdk2410的uboot为例。
第一阶段文件为cpu/arm920t/start.S和board/smdk2410/lowlevel_init.S。

一、第一阶段
1、设置cpu为svc模式
2、关看门狗、关中断
3、cpu初始化
4、设置栈
5、时钟初始化
6、拷贝uboot到ram
7、清除bss段
8、set PreLoadedONRAM
9、执行start_armboot,进入第二阶段入口

问题:
1、汇编中标号的实质?
2、内存控制参数拷贝过程中,源地址的计算问题?

3、时钟参数的计算问题?

二、第二阶段
start_armboot()函数分析:
1、设置指针gd、gd->bd,存储的是与内核交互的参数。
2、执行init_sequence数组中的函数。cpu、板子、中断、波特率、串口、控制台、dram等初始化操作。
3、内存中malloc段初始化。
4、设置uboot环境变量
5、设置bd中网卡参数
6、串口设备初始化
7、设置gd->jt
8、初始化控制为一个设备
9、初始化GPIO
10、以太网初始化
11、进入循环main_loop()

第2步中:
board_init()://1、IO初始化;2、板子识别码;3、设置bi_boot_params,gd->bd->bi_boot_params = 0x30000100;
serial_setbrg()://设置串口寄存器参数

uboot命令实现:
#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \
cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}

其中Struct_Section定义如下:
#define Struct_Section __attribute__ ((unused,section (".u_boot_cmd"))) //

原文地址:https://www.cnblogs.com/mofei004/p/10413861.html

时间: 2024-10-28 14:03:03

uboot启动源码分析的相关文章

Android之rild进程启动源码分析

Android 电话系统框架介绍 在android系统中rild运行在AP上,AP上的应用通过rild发送AT指令给BP,BP接收到信息后又通过rild传送给AP.AP与BP之间有两种通信方式: 1.Solicited Response:Ap向Bp发送请求,Bp给Ap发送回复,该类型的AT指令及其回调函数以数组的形式存放在Ril_commands.h文件中: {数组中的索引号,请求回调函数,响应回调函数} [plain] view plaincopy {0, NULL, NULL},      

Openstack学习笔记之——Neutron-server服务加载与启动源码分析(三)

本文是在学习Openstack的过程中整理和总结,由于时间和个人能力有限,错误之处在所难免,欢迎指正! 在Neutron-server服务加载与启动源码分析(二)中搞定模块功能的扩展和加载,我们就回到Neutron-server服务加载与启动源码分析(一)中的_run_wsgi函数 <span style="font-size:14px;">def _run_wsgi(app_name): app = config.load_paste_app(app_name) ifno

Django如何启动源码分析

Django如何启动源码分析 启动 我们启动Django是通过python manage.py runsever的命令 解决 这句话就是执行manage.py文件,并在命令行发送一个runsever字符串 解析manage.py #!/usr/bin/env python import os import sys if __name__ == "__main__": #os.environ.setdefault 方法可以修改系统环境变量,但是只能os.environ 只能影响到当前运行

知识小罐头08(tomcat8启动源码分析 上)

前面好几篇都说的是一个请求是怎么到servlet中的service方法的,这一篇我们来看看Tomcat8是怎么启动并且初始化其中的组件的? 相信看了前面几篇的小伙伴应该对Tomcat中的各个组件不陌生了,所以我们就可以加快一点速度: 简单说一下Tomcat启动流程,首先是设置一下各种类加载器,然后加载server.xml配置文件,然后初始化Container各个容器,最后就是连接器Connector. 1.批处理文件 双击startup.bat文件启动tomcat,其实内部就是跳转到catali

ActivityManagerService服务线程启动源码分析【转】

本文转载自:http://blog.csdn.net/yangwen123/article/details/8177702 Android系统服务线程都驻留在SystemServer进程中,由SystemServer启动,在SystemServer.init2函数中,通过启动一个线程来启动各种系统服务线程. [java] view plain copy public static final void init2() { Slog.i(TAG, "Entered the Android syst

知识小罐头09(tomcat8启动源码分析 下)

初始化已经完成,现在就是启动这些组件,Tomcat中的start方法就是用于启动的,其实start的原理还是和上一篇说的初始化几乎一样!这里我就大概说一下,看几个比较关键的地方就行了. 前面的步骤就大概截图看一下就ok了 ok,由于前面这些东西基本和初始化的流程一样,跳过,我们就从启动service开始看: 其实关键就是这三步,启动引擎,监听器和连接器,我们好好看看这三步其中的原理. 1.启动引擎 engine.start()方法其实就是到StandardEngine中startInternal

Spark的Master和Worker集群启动的源码分析

基于spark1.3.1的源码进行分析 spark master启动源码分析 1.在start-master.sh调用master的main方法,main方法调用 def main(argStrings: Array[String]) { SignalLogger.register(log) val conf = new SparkConf val args = new MasterArguments(argStrings, conf) val (actorSystem, _, _, _) =

storm启动nimbus源码分析-nimbus.clj

nimbus是storm集群的"控制器",是storm集群的重要组成部分.我们可以通用执行bin/storm nimbus >/dev/null 2>&1 &来启动nimbus.bin/storm是一个python脚本,在这个脚本中定义了一个nimbus函数: nimbus函数 def nimbus(klass="backtype.storm.daemon.nimbus"):    """Syntax: [s

Tomcat之NIO架构源码分析

本文主要内容: Tomcat-NIO启动源码分析,关于Tomcat响应一次HTTP请求进行详细的分析.Tomcat版本:9.0.6 启动Tomcat方式这里采取编程的方式,maven引入坐标 <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>9.0.6</versi