/*
* the actual reset code
*/
reset:
/*
* set the cpu to SVC32 mode
*/
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0xd3
msr cpsr,r0

为什么一来需要把cpu 设置成svc管理模式?

usr模式,此模式不可以直接访问板子的硬件资源,而uboot初始化,必须要去访问此类资源,所以不可以设置为usr模式。

svc模式属于特权模式,可以访问所有硬件受控资源。相对于其他的模式,SVC模式可以访问的资源更多。

还有就是:

需要再次说明的是,arm920T上,复位或者上电时,系统处于svc管理模式,之所以这里还要写进入svc模式,是因为uboot支持的单板非常多,这样也更严谨,不过我们要知道,在我们这里的特定cpu,上电就是svc模式的。

_TEXT_BASE:
.word TEXT_BASE

其中的TEXT_BASE在u-boot-1.1.6\board\100ask24x0\config.mk,定义为:

TEXT_BASE = 0x33F80000

33F80000刚好为512k,在64M sdram中的最上面,如果我们以后的uboot编译出来大于512k了,那么需要改变这里的值。

现在我们来看看顶层的Makefile,了解一下整个框架的主要连接点。

在此,我先忽略脚本语言的一些语法,因为刚开始学习实在不适合又去学个新的脚本语法,但是之后肯定是需要进一步了解的。

先是把uboot用起来,而不是一来就要自己能全部写出,不然学起来太茫然了,经过了这么久的琢磨,终于也不再对uboot感到畏惧和陌生了,之后的工作中,肯定也是用官方提供的uboot,自己做一些移植和更改,所以现在先学好怎么使用,不能再钻牛角尖了。如同刚从单片机转过来的时候,在想要不要把汇编再买本书重新学一遍一样,事实证明,学习是一个过程,量变到质变,汇编遇到不会的就查,一般而言自己写的汇编都是简单级别的,复杂的我们就用C语言代替了,脚本至少目前我还不需要着急又去学一下,因为我要先启动内核,跑几个APP再说啊,不然一直就停留在这里了,如果学习到后面,确实需要主目录下的mkconfig里面的脚本知识,就再去学习一下语法吧。

前面说到,我们在编译uboot之前需要先配置uboot,在韦老师的bsp中是执行make 100ask24x0_config

这个配置达到了什么效果呢?

SRCTREE := $(CURDIR)

MKCONFIG := $(SRCTREE)/mkconfig

mkconfig是个脚本,执行make 100ask24x0_config相当于执行

(ps:博客的符号总是抽)

$+数字:代表的是命令行的参数排序。

然后是脚本的

cd ./include
rm -f asm
ln -s asm-$2 asm

注:脚本的语句没有解释,只是说明脚本执行的和执行后的效果。

ln -s asm-$2 asm

等价于:ln -s asm-arm asm 创建符号链接是为了方便移植和开发,比如这里把asm指向asm-arm

eg:

include<asm/type.h>就等价于include<asm-arm/type.h> 因为uboot支持的cpu是在太多了,有asm-i386等,为了不每次都更改 asm- 的后缀,这里使用符号链接达到简化移植的目的。

这里执行完之后,include目录下的config.mk文件内容就是:

ARCH =arm
CPU = arm920t
BOARD =100ask24x0

SOC    = s3c24x0

我们查看一下这个config.mk和config.h看看是否和我们分析的一样:

果然,和我们分析一致,现在,我们知道ARCH,CPU,BOARD,SOC等于什么了,下面就开始分析第二阶段了。

uboot第一阶段关键位置分析的更多相关文章

  1. uboot之第一阶段

    U-boot的启动一般分为两个阶段,现在我们先将第一阶段. 在此之前,我们先了解一下uboot的目录结构,各个文件夹是什么作用. 如果连各个文件夹是干什么的都不清楚就开始移植剪裁,势必会和我刚拿到开发 ...

  2. U-BOOT概述及源码分析(一)

    嵌入式Linux系统从软件角度通常可以分为以下4个层次: 引导加载程序 | Linux内核 | 文件系统 | 用户应用程序 嵌入式Linux系统中典型分区结构: 正常启动过程中,Bootloader首 ...

  3. uboot启动阶段修改启动参数方法及分析

    作者:围补 本来启动方式这节不是什么复杂的事儿,不过想简单的说清楚明白,还真是不知道怎么组织.毕竟文字跟有声语言表达有别.但愿简单的东西别让我讲的太复杂! Arm板系统文件一般有三个——bootloa ...

  4. UBoot启动代码第一阶段流程

    http://blog.csdn.net/xautfengzi/article/details/7470134 前段时间了看了UBoot的源码,放了一段时间之后忘得差不多了.现做一些注释,方便以后温习 ...

  5. uboot两阶段代码分析

    1.启动过程特征总结(1)第一阶段为汇编阶段(start.s).第二阶段为C阶段(board.c中的start_armboot 函数)(2)第一阶段在SRAM中.第二阶段在DRAM中(3)第一阶段注重 ...

  6. uboot 2013.01 代码简析(2)第一阶段初始化

    uboot执行"make smdk2410_config"之后就可以进行编译了,可以执行make命令进行编译, 因为整个输出太长,我仅仅列出部分最关键的输出(部分我不关心的内容直接 ...

  7. 【ARM-Linux开发】 uboot启动阶段修改启动参数方法及分析

    作者:围补 本来启动方式这节不是什么复杂的事儿,不过想简单的说清楚明白,还真是不知道怎么组织.毕竟文字跟有声语言表达有别.但愿简单的东西别让我讲的太复杂! Arm板系统文件一般有三个--bootloa ...

  8. u-boot启动第一阶段

    目标板:2440开发板 u-boot启动的第一阶段是在文件start.S中完成的,这个过程对不同硬件平台的设置是不同的.下面进入start.S _start: b reset //跳转到reset / ...

  9. 从0移植uboot (二) _启动流程分析

    经过了上一篇的配置,我们已经执行make就可以编译出一个uboot.bin,但这还不够,首先,此时的uboot并不符合三星芯片对bootloader的格式要求,其次,此时的uboot.bin也没有结合 ...

随机推荐

  1. sid-msg.map文件概述

    我这边编写了magic对应的指定文件规则,但是运行的时候发现储存的文件中包含我未指定的数据文件: 在rules下边看的时候,发现有sid-msg.map文件,上网了解下这个文件是干啥的.. 下边文章来 ...

  2. 树莓派进阶之路 (010) - 树莓派raspi-config配置(转)

    经过前面两步我们的树莓派已经正常的工作起来了,但是在真正用它开发之前还需要进行一些列的配置以及软件的安装,这样开发起来才会得心应手,下面我们介绍一下常用的软件和服务 1.配置选项: 树莓派第一次使用的 ...

  3. UNIX 家族及Linux

    Unix成长为一个非私有的操作系统,是因为1956年的AT&T公司受命于联邦去经营电报电话服务.当然也可以开发软件,甚至那个软件可以有”合理”收费的许可证,但是这个公司却被禁止从事任何和计算机 ...

  4. IOC 之深入理解 Spring IoC

    在一开始学习 Spring 的时候,我们就接触 IoC 了,作为 Spring 第一个最核心的概念,我们在解读它源码之前一定需要对其有深入的认识,本篇为[死磕 Spring]系列博客的第一篇博文,主要 ...

  5. 如何创建magento模块z之Hello World例子(转)

    步骤:1.创建一个Hello World模块2.为这个模块配置路由3.为这个模块创建执行控制器 创建Hello World模块 创建模块的结构目录:app/core/local/Sjolzy/Hell ...

  6. 如何控制android系统中NavigationBar 的显示与隐藏

    我们使用的大多数android手机上的Home键,返回键以及menu键都是实体触摸感应按键.如果你用Google的Nexus4或Nexus5话,你会发现它们并没有实体按键或触摸感应按键,取而代之的是在 ...

  7. c#asp.net url 传递中文参数要使用 System.Web.HttpUtility.UrlEncode 而不能使用Server.UrlEncode

    最近网站里的参数包括中文的例如: http://www.taiba/Tag%b0%ae%c7%e9.html 已开始使用 Server.UrlEncode来做的,但发现,有一些中文在url重写的是说找 ...

  8. matlab中的Traing、Validation、Testing

    <matlab神经网络30个案例分析> ROC曲线是反映敏感性和特异性连续变量的综合指标,roc曲线真阳性率为纵坐标,假阳性率为横坐标,在坐标上由无数个临界值求出的无数对真阳性率和假阳性率 ...

  9. StringBoot集成Rabbit Redis和ack机制双重保险,保障消息一定能够正确的消费

    转: StringBoot集成Rabbit,根据业务返回ACK 原文链接 : http://www.jianshu.com/p/baed9ec92410 为了维护消息的有效性,当消费消息时候处理失败时 ...

  10. Macos mysql 8.0.11 添加配置文件

    mac 安装mysql 后,没有配置文件,如果需要添加配置文件,需要在/etc 目录下面添加 my.cnf 文件. 添加方法 打开文件命令:sudo vi  /etc/my.cnf 文件添加内容: [ ...